Tym razem mam dla ciebie proste wyzwanie. Biorąc pod uwagę tablicę dodatnich liczb całkowitych A (lub odpowiednika w Twoim języku), zamień każdy wpis A i na sumę kolejnych elementów A i A , cofając się od początku, jeśli nie ma wystarczającej liczby pozycji.
Jak zwykle, możesz konkurować w dowolnym języku programowania i możesz przyjmować dane wejściowe i dostarczać dane wyjściowe za pomocą dowolnej standardowej metody i w dowolnym rozsądnym formacie, zwracając uwagę, że te luki są domyślnie zabronione. Opcjonalnie możesz również przyjąć wielkość A jako dane wejściowe. To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach) dla każdego języka .
Przykłady / przypadki testowe
Biorąc pod uwagę [1,3,4,5]
, twój kod powinien wypisać [3,10,13,14]
, ponieważ 1
jest zastąpiony przez 3
, 3
jest zastąpiony przez 4+5+1=10
(zauważ, jak jest zawijany od początku), 4
przez 5+1+3+4=13
i 5
przez 1+3+4+5+1=14
.
Biorąc pod uwagę [3,2,1,9]
, Twój program powinien produkować [12,10,9,33]
, bo zastąpił 3
z 2+1+9=12
, 2
z 1+9=10
, 1
z 9
oraz 9
z 3+2+1+9+3+2+1+9+3=33
(Zauważ jak owinięty powrotem od początku więcej niż raz).
Kilka innych przypadków testowych do wyboru:
[4,3,2,1] -> [10,7,5,4]
[3,2,1,9] -> [12,10,9,33]
[1,3,4,5] -> [3,10,13,14]
[4,4,3,2,2] -> [11,11,8,6,8]
[3,5,3,2,1] -> [10,14,6,4,3]
[3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3]
[7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30]
[28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34]
[1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]
źródło
+
na końcu). Poza tym, może następnym razem będziesz mnie ninja. :)Python , 55 bajtów
Wypróbuj online!
źródło
~
operator nie jest odrobinę bitowy, jest skutecznie skrócony-1-v
, więc-~v
jest skrócony, dla-(-1-v)
którego jest po prostu1+v
(ale unika nawiasów takich jak(1+v)*a
). Po drugie, w Pythonie można pomnożyć listę przez liczbę całkowitą, aby ją powtórzyć (np.['a','b']*3
Jest['a','b','a','b','a','b']
).-~v*a
Można zastąpića+v*a
dla tej samej liczby bajtów. Wreszcie[i:i+v]
jest indeksowanie plaster, zachowując elementyi
doi+v-1
(0-indeksowane) tylko.J, 33 bajty
bez golfa
wyjaśnienie
Wypróbuj online!
źródło
C (gcc) ,
8685 bajtówWypróbuj online!
źródło
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 bajtówWypróbuj online!
źródło
05AB1E ,
87 bajtówWypróbuj online!
Wyjaśnienie
źródło
K4 / K (oK) ,
2019 bajtówRozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Przekształć dane wejściowe, upuść najpierw, weź x długość każdego, podsumuj.
źródło
Galaretka , 7 bajtów
Wypróbuj online!
źródło
Attache , 26 bajtów
Wypróbuj online!
Wyjaśnienie
Oto rozwidlenie dwóch funkcji:
{Sum=>_[(_2+1:_)%#_]}
Iota
Oznacza to, że odpowiedni
Iota
argument jest stosowany do argumentux
i jest przekazywany jako drugi argument do środkowego palca (pierwsza funkcja). Staje się to dla danych wejściowychx
:Zamieniając je na
_
i_2
:Iota[x]
zwraca tablicę indeksówx
. Jest to równoważne z0...#x
.#x
to krótki sposób określenia wielkościx
lubSize[x]
. Zasadniczo ta funkcja mapujeSum
funkcję na drugie wyrażenie:x[...]
Bit zewnętrzny oznacza, że...
wygeneruje serię wskaźników do wyborux
. Najważniejsza część generowania indeksów to:To wyrażenie używa trochę wektoryzacji. Aby to zwizualizować, załóżmy, że dane wejściowe są
x := [1, 3, 4, 5]
. Następnie to wyrażenie jest równoważne z:To jest lista indeksów, które reprezentują indeksy kolejnych
N
elementów wx
modzie#x
. Aby zabezpieczyć je przed odzyskaniem, bierzemy ten mod tablicy#x
:To daje nam odpowiednie wskaźniki, które są następnie uzyskiwane z
x
każdej tablicy i sumowane, dając odpowiednie wyniki.Inne próby
36 bajtów:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- Zapomniałemx[...]
całkowicie wektoryzacji, więc staje się:30 bajtów:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- ale potem zdałem sobie sprawę, że_2+
wewnętrzny zakres może być rozłożony na czynniki, co oznacza, że możemy zapisać nawiasy, używając:
zamiast..
, dając nam bieżącą wersję.źródło
R ,
8964 bajtówWypróbuj online!
Główny pomysł, aby wygenerować wystarczająco długi wektor wskaźnika cyklicznego, którego można użyć, aby uzyskać potrzebne elementy z wektora wejściowego.
Orginalna wersja:
Wypróbuj online!
źródło
R ,
6258 bajtówWypróbuj online!
Alternatywą dla innego rozwiązania R . W komentarzach JayCe wspomniał o tym,
cumsum
co uruchomiło w moim mózgu coś do użyciadiffinv
i zamiast recyklingu matrycyrep
.Wyjaśnienie:
Biorąc pod uwagę tablicę wejściową
a
, letM=max(a)
il=length(a)
.Zauważ, że
M+l
jest to maksymalny możliwy indeks, do którego musielibyśmy uzyskać dostęp, i żeM+l<=M*l+1
, jeśliM,l>1
,M+l<=M*l
(z równością tylko wtedy, gdyM=l=2
) i jeślil==1
lubM==1
, toM+l==M*l+1
.Na przykład niech
a=c(4,3,2,1)
. PotemM=l=4
.Konstruujemy
M*l+1 x l
macierz w R przezmatrix(a,max(a)*l+1,l)
. Ponieważ R poddaje się recyklingowia
w porządku głównym kolumny, otrzymujemy macierz powtarzającą elementya
jako takie:Każda kolumna jest cyklicznym następcą każdego elementu
a
, za
w pierwszym rzędzie; wynika to ze sposobu, w jaki R przetwarza swoje argumenty w macierzy.Następnie bierzemy odwrotną „pochodną” z
diffinv
zasadniczo skumulowaną sumą każdej kolumny z dodatkowym0
jako pierwszy wiersz, generując macierzW pierwszej kolumnie wpis
6=4+2
jest równy14=4 + (3+2+1+4)
, czyli suma następcy cyklicznego (CSS) plus wiodąca4
. Podobnie w drugiej kolumnie wpis5=3+2
jest równy10=3 + (4+1+2)
i tak dalej.Więc w kolumnie
i
Thea[i]+2
nd pozycja jest równaCSS(i)+a[i]
. Dlatego bierzemy wiersze indeksowanea+2
, uzyskując macierz kwadratową:Wpisy wzdłuż przekątnej są równe cyklicznym sumom następcy plus
a
, więc wyodrębniamy przekątną i odejmujemya
, zwracając wynik jako sumy cyklicznego następcy.źródło
Map
i pierwotnie było to jak 68 bajtów, zanim zorientowałem się, że mogę wziąćl
jako dane wejściowe!Pyth,
13 lat11 bajtówZaoszczędzono 2 bajty dzięki Mr. Xcoder.
Wypróbuj tutaj
Wyjaśnienie
źródło
Węgiel drzewny , 12 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
JavaScript ES6, 65 bajtów
Proste rozwiązanie. Nie golfowany:
map()
Funkcja JavaScript jest idealna do zadania, uruchamia określone wywołanie zwrotne dla każdego elementu i zastępuje go wynikiem wywołania zwrotnego. Oddzwonienie otrzymuje dwa parametry, pierwszyx
to wartość, a drugiy
to indeks. Biorąc modułi % a.length
, możemy z łatwością zapętlić tablicę, w razie potrzeby wielokrotnie.Testowy fragment kodu
(Wprowadź dane wejściowe jako notację JSON)
Pokaż fragment kodu
źródło
Java 8, 87 bajtów
Curled pustka lambda biorąc
int[]
listę iint
długość.Wypróbuj online . Zwróć uwagę, że śledziłem
System.out
ten program w celu pobrania wyników dla ładniejszego drukowania.źródło
Julia 0,6 ,
635553 bajtówWypróbuj online!
Starsze rozwiązanie:
Julia 0.6 , 65 bajtów
Wypróbuj online!
Inne rozwiązanie. Pod względem liczby bajtów nie jest świetny, ale podoba mi się i prawdopodobnie jest bardziej wydajny niż pozostałe dwa, zwłaszcza jeśli dane wejściowe mają duże liczby.
Julia 0.6 , 69 bajtów
Wypróbuj online!
źródło
Płótno , 10 bajtów
Wypróbuj tutaj!
Wyjaśnienie:
źródło
QBasic 1.1 , 115 bajtów
Pierwsze wejście to długość L , następnie L kolejne wejścia to elementy w kolejności. Wyjścia L reprezentują wynikową tablicę z elementami w kolejności, w jakiej są prezentowane.
źródło
Japt, 7 bajtów
Wypróbuj tutaj
źródło
APL + WIN, 37 bajtów
Monity o wprowadzenie:
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Wyjaśnienie:
źródło
Rubinowy , 38 bajtów
Wypróbuj online!
źródło
JavaScript, 65 bajtów 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
grał w golfa
bez golfa
Wypróbuj online!
(wersja bez golfisty powyżej) Jestem nowy w tej grze w golfa!
* zaktualizowano! dzięki przydatnym linkom podanym w komentarzach udało mi się zmniejszyć rozmiar do 65 bajtów!
źródło
n
), na co nie zezwalamy. Witamy jednak w PPCG :)Perl 5 z
-M5.010
42 bajtamiWypróbuj online!
źródło
JavaScript, 46 bajtów
Wypróbuj online
źródło
Cjam, 23 bajty
Wypróbuj online!
źródło
Pip
-rn
, 14 bajtówPobiera liczby wejściowe w kolejnych liniach standardowego wejścia; podaje liczby wyjściowe w kolejnych liniach standardowego wyjścia. Wypróbuj online!
Wyjaśnienie
Lub korzystając z działającego przykładu:
źródło
APL (Dyalog Classic) , 12 bajtów
Wypróbuj online!
wykorzystuje
⎕io←1
źródło
Perl 6 ,
5032 bajtówWypróbuj online!
Jestem nowym golfistą w Perlu 6, więc jestem pewien, że może być krótszy.Już nie nowe, i wróć do golfa!źródło