Zamierzamy złożyć listę liczb całkowitych. Procedura, aby to zrobić, jest następująca: Jeśli lista ma parzystą długość, zrób listę połowy jej długości, gdzie n-ty element nowej listy jest sumą n-tego elementu starej listy i od n-tego do ostatni element starej listy. Na przykład, gdybyśmy mieli listę
[1 2 3 4 5 6 7 8]
Złożylibyśmy to w ten sposób
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Jeśli lista ma nieparzystą długość, aby ją złożyć, najpierw usuwamy środkowy element, składamy go tak, jakby był parzysty, i dodajemy środkowy element do wyniku.
Na przykład, gdybyśmy mieli listę
[1 2 3 4 5 6 7]
Złożylibyśmy to w ten sposób
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Zadanie
Napisz program lub funkcję, która pobiera listę liczb całkowitych jako dane wejściowe i wyjściowe, które ta lista jest złożona.
To jest pytanie w golfa kodu, więc odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
Przykładowa implementacja
Oto implementacja w Haskell, która definiuje funkcję, f
która wykonuje fold.
f(a:b@(_:_))=a+last b:f(init b)
f x=x
źródło
Odpowiedzi:
Python , 46 bajtów
Wypróbuj online!
Ta sama długość:
Znacznie krótsze rozwiązanie działa w przypadku list o równej długości (30 bajtów)
Wypróbuj online!
Nadal próbuję znaleźć krótki sposób, aby poprawić to dla nieparzystej długości.
źródło
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
ma również tę samą długość ...05AB1E , 5 bajtów
Kod
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie
źródło
Emojicode , 203 bajty
To była dla mnie najbardziej bolesna odpowiedź na kod Emojicode. Niepotrzebna długość: /
Wypróbuj online!
źródło
Japt ,
211816 bajtówPrzetestuj online!
Całkowicie okropneNieco mniej okropne dzięki @Oliver . BRB po tym, jak zaimplementuję więcej wbudowanych i naprawię kilka błędów ...źródło
Gaia , 7 bajtów
Wyjaśnienie
źródło
Mathematica, 88 bajtów
źródło
Mathematica 57 bajtów
Wstawia zero w punkcie środkowym, dodaje listę do tyłu i przyjmuje odpowiednią długość.
źródło
Japt , 12 bajtów
Wypróbuj online! z
-Q
flagą, aby wyświetlić sformatowaną tablicę.Alternatywne rozwiązanie, 14 bajtów
Wypróbuj online!
źródło
Galaretka , 7 bajtów
Wypróbuj online!
-2 dzięki ETHproductions ... i mnie zrealizowałem wcześniej.
źródło
JavaScript (Node.js) , 53 bajty
Wypróbuj online!
Kolejna sugestia:
JavaScript (Node.js) , 43 bajty
Wypróbuj online!
źródło
R ,
81706857 bajtówWypróbuj online!
funkcja anonimowa; zwraca wynik.
źródło
Python 3 , 101 bajtów
Wypróbuj online!
źródło
Python 3 , 70 bajtów
Wypróbuj online!
źródło
JavaScript,
7571 bajtówWypróbuj online
Zaoszczędzono 2 bajty dzięki produktom ETH
źródło
JavaScript (ES6), 41 bajtów
Pokaż fragment kodu
źródło
MATL , 9 bajtów
Wypróbuj online!
Jak to działa
Biorąc pod uwagę tablicę
[a b c ... x y z]
,[a z]
nazwijmy ją podtablicą „crust” i podtablicą[b c ... y z]
„core”.Kod składa się z pętli, która usuwa skorupę, oblicza jej sumę i przesuwa rdzeń na górę stosu, gotowa do następnej iteracji. Warunkiem pętli jest liczba elementów w podstawowej tablicy pomocniczej
źródło
WendyScript , 72 bajty
Wypróbuj online!
źródło
C # (.NET Core) ,
118111 bajtówLiczba bajtów obejmuje również
Wypróbuj online!
Jako dane wejściowe użyj liczb oddzielonych przecinkami (
,
) lub spacją. Wyjaśnienie:źródło
Perl,
4238 znakówsub f {@ a = map {$ + pop} splice @ , 0, @ / 2; @ a, @ }Spróbuj na przykład tak:
źródło
Pyth,
181713 bajtówMoje oryginalne podejście było
-1 bajt dzięki Mr. Xcoder
-4 bajty dzięki FryAmTheEggman
źródło
c2<list>
podzielić listę na pół. Kolejnym przydatnym poleceniem jest.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 bajtówJako nienazwana lambda, przyjmowanie kontenera takiego jak
vector
lublist
zwraca wartość przez modyfikację danych wejściowych:Korzystanie ze znanego operatora „od samego początku”
<--
i potrójnego plusu+++
Niegolfowany i przykład:
źródło
J , 22 bajty
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 21 bajtów SBCS
-3 bajty dzięki @ Adám.
Wypróbuj online!
Wyjaśnienie:
źródło
+⌿(⌊2÷⍨≢)(↑↑⍮⌽⍤↓)⊢
(⌊2÷⍨≢)(↑{+⌿↑⍺⍵}∘⌽↓)⊢
`Common Lisp, 106 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 62 bajty
Wypróbuj online!
źródło
-i-1
się+~i
zapisać bajt.c!=i
zc>i
bajtem.Scala, 91 bajtów
źródło
Mathematica , 52
źródło
JavaScript (ES6),
4643 bajtówPokaż fragment kodu
Zapisano 3 bajty z inspiracją od Asafa .
źródło
c+c
działa na trzeci bajt.Java 8, 93 bajty
Dwu cyfrowy! To lambda, która bierze
int[]
i zwraca anint[]
.Niegolfowana lambda
Całkiem proste. Składa drugą połowę na miejscu na pierwszą połowę danych wejściowych i zwraca kopię tylko pierwszej połowy.
Co zaskakujące, kopia tablicowa w instrukcji return wydaje się być najtańszym sposobem radzenia sobie z końcowym dziwactwem dla danych wejściowych o nieparzystej długości.
źródło
PHP , 67 bajtów
Wypróbuj online!
źródło