Wejście:
Niepusta lista / wektor, w którym każdy element zawiera wartość / znak wskazujący, czy policzysz w górę, czy w dół . Użyję 1
i -1
, ale możesz wybrać, co chcesz. Można użyć tylko dwie wartości, nie można używać 1,2,3...
i -1,-2,-3...
na górę i dół odpowiednio.
Wyzwanie:
Będziesz korzystać z numerów w geometrycznym serii 1, 2, 4, 8, 16, 32 ... . Za każdym razem, gdy zaczniesz liczyć w górę lub w dół, będziesz liczyć co 1 , potem 2 , potem 4 itd. Jeśli zmienisz i zaczniesz liczyć w drugą stronę, odejmiesz 1 , następnie 2 , a następnie 4 i tak dalej. Dane wyjściowe będą liczbą, którą otrzymasz na końcu.
Przykłady:
W poniższym przykładzie pierwszy wiersz to dane wejściowe, drugi wiersz to liczby, które liczysz w górę / w dół, trzeci wiersz to suma skumulowana, a ostatni to wynik.
Przykład 1:
1 1 1 1 1 1 1 1 1 1
1 2 4 8 16 32 64 128 256 512
1 3 7 15 31 63 127 255 511 1023
1023
Przykład 2:
1 1 1 1 1 1 -1 -1 -1 -1 1 1 1
1 2 4 8 16 32 -1 -2 -4 -8 1 2 4
1 3 7 15 31 63 62 60 56 48 49 51 55
55
Jak widać, pierwsza 1
lub -1
„resetuje” liczoną przez nas wartość, a kolejne sekwencje 1
lub -1
oznaczają podwojenie wartości.
Przykład 3:
-1 -1 1 1 -1 -1 -1
-1 -2 1 2 -1 -2 -4
-1 -3 -2 0 -1 -3 -7
-7
Niektóre dodatkowe przypadki testowe uwzględniające niektóre potencjalne przypadki narożne.
Dane wejściowe znajdują się w pierwszym wierszu. Wyjście jest na drugim.
1
1
-------
-1
-1
-------
-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
0
To jest golf golfowy, więc wygrywa najkrótsze zgłoszenie w każdym języku.
®ì2Ãx
, abyxì2
zapisać dwa bajty.Cubix , 65 bajtów
Wypróbuj online!
Zobacz, jak biegnie
Jako krótkie wyjaśnienie tego:
źródło
JavaScript (ES6), 38 bajtów
źródło
R , 32 bajty
Wypróbuj online!
Jest to ta sama metoda, jak kilka innych tutaj.
Z wejściem
-1 -1 1 1 -1 -1 -1
2, 2, 3
i wartościami-1, 1, -1
3, 3, 7
-3, 3, -7
-7
źródło
Python 3 ,
5756 bajtów-1 bajt dzięki @notjagan
Wypróbuj online!
źródło
s>()
zajęło mi chwilę. To naprawdę sprytne.Galaretka , 4 bajty
Wypróbuj online!
źródło
C ++ 14, 58 bajtów
Pobiera dane wejściowe za pośrednictwem
v
argumentu (std::vector
lub dowolnego kontenera iterowalnego), dane wyjściowe dos
argumentu (przez odniesienie). Każdy elementv
musi być albo1
albo-1
.Przykładowe zastosowania i przypadki testowe.
źródło
Brachylog , 13 bajtów
Wypróbuj online!
Brachylog używa
_
zamiast-
.Wyjaśnienie:
źródło
Python,
7672 bajtówWypróbuj online!
źródło
Pyth , 12 bajtów
Wypróbuj online!
źródło
PHP, 51 bajtów
Uruchom
-n
lub wypróbuj online .źródło
CJam (13 bajtów)
Zestaw testów online . Jest to anonimowy blok (funkcja), który pobiera tablicę liczb całkowitych na stos i pozostawia liczbę całkowitą na stosie. Ostatni test pokazuje, że poprawnie obsługuje pustą tablicę, dając 0.
Podejście polega na prostym kodowaniu długości przebiegu, a następnie ręcznym dekodowaniu długości przebiegu dla każdej serii i konwersji podstawowej. Korzystając z wbudowanego dekodowania długości przebiegu, otrzymuję jeszcze jeden bajt z
{e`1/:e~2fb1b}
lub{e`{ae~2b}%1b}
.źródło
05AB1E , 6 bajtów
Wypróbuj online!
źródło
γε¬sƶÄ<o*}OO
Haskell,
5453 bajtówWypróbuj online!
Prosta rekurencja, która podwaja akumulator
k
lub resetuje go do1
/-1
i dodaje wartości z każdego kroku.źródło
Mathematica, 60 bajtów
źródło
Mathematica, 25 bajtów
źródło
Java, 91 bajtów
źródło
Pyth, 11 bajtów
Wypróbuj online
Jak to działa
źródło