Wprowadzenie
Zauważmy tej tablicy: [3, 2, 4, 1, 1, 5, 1, 2]
.
Każdy element wyświetla długość podciągu, który należy zsumować. Rzućmy okiem na pierwszy element powyższej tablicy:
[3, 2, 4, 1, 1, 5, 1, 2]
^
Element przy pierwszym indeksie ma wartość 3 , więc bierzemy teraz podłańcuch o długości trzy z takim samym indeksem jak pozycja początkowa:
[3, 2, 4]
Po zsumowaniu daje to wynik 9 , więc pierwszym elementem zestawu sum podciągów jest 9
.
Robimy to dla wszystkich elementów w tablicy:
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
Widać, że liczba 5 to trochę dziwny przypadek. Liczba ta przekracza długość tablicy:
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
Zignorujemy wszystko, co przekracza tablicę, więc po prostu używamy [5, 1, 2]
.
Ostatnim krokiem jest podsumowanie wszystkiego:
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
I to jest tablica, która musi zostać wyprowadzona:
[9, 6, 11, 1, 1, 8, 1, 2]
Zadanie
Biorąc pod uwagę niepustą tablicę z dodatnimi (niezerowymi) liczbami całkowitymi, wypisz zestaw sum podciągów . To jest golf golfowy , więc wygrywanie z najmniejszą liczbą bajtów wygrywa!
Przypadki testowe
[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]
Odpowiedzi:
Galaretka , 6 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python, 40 bajtów
Przetestuj na Ideone .
źródło
Excel, 21 bajtów
=SUM(OFFSET(A1,,,A1))
Otwórz nowy arkusz kalkulacyjny, umieść wartości testowe w kolumnie A. Wprowadź formułę w B1 i kliknij dwukrotnie uchwyt komórki, aby przejść do zakresu.
źródło
Python 3, 47 bajtów
Dość prosta implementacja. Bardzo wygodne było domyślne zachowanie Pythona w przypadku plasterków, które przekraczają koniec listy .
źródło
Haskell,
34, 33 bajtówJeden bajt zapisany przez nich.
źródło
JavaScript ES6, 50 bajtów
Dość oczywiste. Jest
map
nad każdym elementem w tablicy, przechodzącslice
od tegoi
indeksu przez indeks pluse
wartość tego lementu, ireduce
dodając.źródło
J, 11 bajtów
Stosowanie
Wyjaśnienie
źródło
JavaScript (ES6), 45
reduce
pobity ponownie!źródło
f=
, tak jak w tej odpowiedzi .f=
nie jest już liczony w 45 bajtachSiatkówka , 38 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Dane wejściowe i wyjściowe są listami oddzielonymi przecinkami.
Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
źródło
Mathematica
6055 bajtówna przykład
Dzięki @MartinEnder za zgolenie 5 bajtów :)
źródło
#+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&
wciąż nie jestem pewien, czy jest optymalny, ale oszczędza 17 bajtów.05AB1E,
118 bajtówWyjaśnienie
Wypróbuj online
źródło
Pyth , 8 bajtów
Zestaw testowy.
Tłumaczenie odpowiedzi El w Pythonie .
źródło
Erlang, 69 bajtów
Funkcje wyższego rzędu Erlanga dla list nie otrzymują indeksu bieżącego elementu. Korzysta ze słownika procesów, aby ustawić indeks bieżącego elementu.
źródło
Pyke,
127 bajtówWypróbuj tutaj!
źródło
VBA, 160 bajtów
źródło
Pyth, 6 bajtów
Zestaw testowy
To inne rozwiązanie niż dotychczas. Zapętla dane wejściowe, kroi sumę wartości początkowych, a następnie usuwa pierwszy element z zapisanych danych wejściowych i powtarza.
Wyjaśnienie:
źródło
Julia, 39 bajtów
Wypróbuj online!
źródło
F #,
8482 bajtówźródło
JavaScript (ES6) - 79 bajtów
Rozwiązanie rekurencyjne, które nie korzysta z żadnej z metod Array:
Testowanie:
źródło
C #, 89 bajtów
całkiem prosto
Doceniane pomysły na ulepszenia
źródło
Brachylog , 27 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Wyjaśnienie
źródło
Dyalog APL, 15 bajtów
lub
źródło
Program PHP, 72 bajty
Zadzwoń z
php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 jako funkcja:
+9 bez wbudowanych:
($ c zachowuje oryginalne wartości, $ a odlicza każdy indeks, $ r pobiera sumy)
-3 jako program:
źródło
q (37 bajtów)
Przykład:
źródło
Matricks , 25 bajtów
Tak, wreszcie wyzwanie, dla którego nie potrzebuję nowych funkcji!
Biegnij z:
python matricks.py substring.txt [[<input>]] 0
Wyjaśnienie:
źródło
JavaScript (przy użyciu zewnętrznej biblioteki) (66 bajtów)
Link do lib: https://github.com/mvegh1/Enumerable
Wyjaśnienie kodu: _.From ładuje tablicę wejściową do biblioteki, która jest w zasadzie LINQ dla js. Następnie każdy element w tablicy jest mapowany zgodnie z następującym predykatem: Weź dane wejściowe i pokrój je z indeksu bieżącego elementu i weź ten indeks plus wartość bieżącego elementu. Następnie podsumuj tę podsekwencję. Konwertuj wynik na macierzystą tablicę JS i zwróć ją
źródło
var
zmienne, nie potrzebujesz tego w golfie. Możesz także zmienić,.forEach
na.map
który kosztuje mniej bajtów.Clojure, 63 bajty
Używa dopasowania wzorca do dekompozycji argumentu wejściowego na pierwszy i resztę argumentów.
źródło
MATL ,
171413 bajtówWyjaśnienie
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe (zmodyfikowano kod, aby obsługiwał kilka danych wejściowych).
źródło
C #, 94 bajtów
Gdzie a jest int [] reprezentującym dane wejściowe do rozwiązania.
źródło