Opis
Odejmij kolejne liczby P od liczby N. Następna liczba N to N + 1.
Spójrz na przykłady, aby zrozumieć, co mam na myśli.
Przykłady:
Input: N=2,P=3
Calculate: n - (n+1) - (n+2) - (n+3) //Ending with 3, because P=3
Calculate: 2 - 2+1 - 2+2 - 2+3 //Replacing N with 2 from Input
Calculate: 2 - 3 - 4 - 5
Output: -10
Input: N=100,P=5
Calculate: n - (n+1) - (n+2) - (n+3) - (n+4) - (n+5)
Calculate: 100- 101 - 102 - 103 - 104 - 105
Output: -415
Input: N=42,P=0
Calculate: n
Calculate: 42
Output: 42
Input: N=0,P=3
Calculate: n - (n+1) - (n+2) - (n+3)
Calculate: 0 - 1 - 2 - 3
Output: -6
Input: N=0,P=0
Calulate: n
Calculate: 0
Output: 0
Wkład:
N : Liczba całkowita, dodatnia, ujemna lub 0
P : Liczba całkowita, dodatnia lub 0, nie ujemna
Wydajność:
Liczba całkowita lub ciąg, dozwolone 0 na początku, dozwolone znaki nowej linii
Zasady:
- Bez luk
- To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach
- Dane wejściowe i wyjściowe muszą być zgodne z opisem
code-golf
math
arithmetic
Paul Schmitz
źródło
źródło
Input: N=0,P=3
przykład, wasze rozszerzenie ma trochę obcych podwójnych negatywówN * (P-1)
. To praktycznie definicja z trywialne .Odpowiedzi:
05AB1E ,
53 bajtyZaoszczędzono 2 bajty dzięki Adnan
Wyjaśnienie
Przyjmuje P, a następnie N jako wejście.
źródło
Ý+Æ
:).P
idzie pierwszy)Ý
... Myślałem, że istnieje tylko zakres 1.Python 2,
26 2423 bajtów-2 bajty dzięki @Adnan (wymienić
p*(p+1)/2
zp*-~p/2
)-1 bajt dzięki @MartinEnder (wymienić
-p*-~p/2
z+p*~p/2
Testy są na ideone
źródło
CJam, 8 bajtów
Zestaw testowy.
Szkoda, że rozwiązanie w formie zamkniętej jest dłuższe. : |
Wyjaśnienie
źródło
Haskell, 21 bajtów
źródło
JavaScript (ES6),
201918 bajtówZapisano 1 bajt przez curry, jak sugeruje Zwei
Zapisano 1 bajt dzięki user81655
Test
źródło
n=>p=>...
i wywoływanie funkcji za pomocąf(n)(p)
(n,p)=>n-p*(++p/2+n)
działa również w języku C #.n-p*(++p/2+n)
jest równoważne zn+p*(~p/2-n)
.Galaretka , 4 bajty
Wypróbuj online!
Jak to działa
źródło
Haskell,
1918 bajtówPoprzednie 19 bajtów
źródło
C #,
2120 bajtówEdycja: Zapisano jeden bajt dzięki TheLethalCoder
Wypróbuj online!
Pełne źródło, w tym przypadki testowe:
źródło
N=>P=>
zamiast(N,P)=>
zaoszczędzić 1 bajtMathematica, 15 bajtów
Funkcja bez nazwy, która odbiera
P
in
jako jej parametry w tej kolejności.Używa rozwiązania w formie zamkniętej
n - n*p - p(p+1)/2
.źródło
Perl,
2322 bajtówObejmuje +1 dla
-p
Podaj n i p (w tej kolejności) w osobnych wierszach STDIN:
subtract.pl
:(za pomocą
''
cytatów, aby zapisać\
wywołuje karę 2 bajtowy, ponieważ nie może być łączona z-e
)Ten sam pomysł i długość:
Zaskakujące jest, że faktyczne wykonanie obliczeń jest krótsze niż użycie formuły bezpośredniej (są
$
to bardzo bolesne dla arytmetyki)źródło
C ++,
5451 bajtów[] (int N, int P) {int F; for (F = N; P; F - = ++ N, P -); return F;}Test:
źródło
f;g(n,p){f=n;while(p--)f-=++n;return f;}
używając algorytmuint
Pyke, 6 bajtów
Wypróbuj tutaj!
źródło
Brachylog ,
1917 bajtówWyjaśnienie
źródło
MATL , 5 bajtów
Dane wejściowe są,
P
a następnieN
.Wypróbuj w MATL Online!
Wyjaśnienie
źródło
Partia, 30 bajtów
Pobiera
n
ip
jako parametry wiersza polecenia i drukuje wynik bez końcowego znaku nowej linii.źródło
SILOS , 80 bajtów
Wypróbuj online z przypadkami testowymi:
2,3
100,5
42,0
0,3
0,0
źródło
R,
1714 bajtówDzięki billywob za grę w golfa 3 bajty. Poprzednia odpowiedź:
Zauważ, że 1: 0 rozwija się do wektora (1,0), więc potrzebujemy warunku if (P) (lub użyć
seq_len
, ale to więcej bajtów). Bez warunku otrzymalibyśmy niewłaściwy wynik, gdyby P = 0.Jeśli P jest równe zero, wówczas suma rozwija się do
sum(N+NULL)
, a następnie dosum(numeric(0))
, która wynosi zero.źródło
n-n*p-sum(0:p)
byłoby i tak krótsze :)function(N,P){...}
lubN=scan();P=scan();...
PHP, 33 bajtów
źródło
<?php
lub<?
skrócić kod PHP. Edytuj swoją odpowiedź.Galaretka , 7 bajtów
Argumenty są
P, N
testowane na TryItOnline
W jaki sposób?
źródło
Pyth - 6 bajtów
Pakiet testowy .
źródło
Dalej, 36 bajtów
Proste obliczenie
n - (p*n + (p^2+p) / 2)
Wypróbuj online
źródło
Java,
67, 63 bajtyGra w golfa:
Nie golfowany:
Zasadniczo zrobiłem matematykę na formule. Ta
n - p*n
część zajmuje się wszystkimn
we wzorze. Następnie zastosowałem super zabawną właściwość sumowania razem liniowo rosnącego zbioru liczb całkowitych (szeregi arytmetyczne): użyłem sumy pierwszej i ostatniej liczby całkowitej, a następnie pomnożono jąset.length / 2
(sprawdzam również parzystość i odpowiednio ją obsługuję).Wypróbuj: https://ideone.com/DEd85A
źródło
int n,int p
aby zapisać bajt. Ponadto, można zmienićp%2==0
, abyp%2<1
zapisać kolejny bajt. - Nie wiedziałem, że już opublikowałeś odpowiedź Java, kiedy opublikowałem mój krótszy wariant z for-loop . Podoba mi się twój wzór matematyczny, więc daj +1 ode mnie. :)p%2>0
i zmieniając kolejność w trójce możesz zapisać postać.p/2 *(p+2)
jest równyp*p/2+p
Java 7,
4340 bajtówJava 8, 19 bajtów
Bezwstydnie skradzione z niesamowitej formuły Python 2 autorstwa @JonathanAllan .
Oryginalna odpowiedź (
6160 bajtów):Przypadki bez golfa i testy:
Wypróbuj tutaj.
Wydajność:
źródło
int c(int n,int p){...}
. Gdyby był to Java 8 (lub 9), mógłby to być(n,p)->n-p*n+p*~p/2
( 19 bajtów )Fouriera , 34 bajty
Wypróbuj online!
źródło
Labirynt , 15 bajtów
lub
Używa rozwiązania w formie zamkniętej
n - n*P - P*(P+1)/2
.źródło
php, 38 bajtów
źródło
Pyth, 11 bajtów
Funkcja,
g
która pobiera dane wejściowen
ip
argumenty oraz wypisuje wynik. Można go nazwać w formiegn p
.Wypróbuj online
Jak to działa
źródło
C89,
38,35, 33 bajtówPrzetestuj na Coliru .
źródło
Klon, 19 bajtów
Stosowanie:
źródło
Perl 6 , 21 bajtów
Wyjaśnienie:
źródło