Rozważ tablicę dodatnich liczb całkowitych:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...
Następnie połącz je:
1234567891011121314151617181920212223242526...
A następnie podziel je na kawałki o zmiennej długości, przy czym każda długość jest równa N- tej dodatniej liczbie całkowitej:
[1][23][456][7891][01112][131415][1617181][92021222][324252627][2829303132] ...
---------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 ...
Zadanie
Biorąc pod uwagę liczbę całkowitą N (dodatnią w przypadku indeksowania 1 lub nieujemną w przypadku indeksowania 0), Twoim zadaniem jest wyprowadzenie sumy delt cyfr w części N (różnice między kolejnymi cyframi).
Możesz wybrać 0 lub 1-indeksowanie N .
Sekwencja musi zaczynać się od 1 .
To jest code-golf , wygrywa najkrótszy kod w bajtach.
Przykłady i przypadki testowe
1-indeksowane przypadki testowe. Jeśli chcesz indeksować 0, po prostu zmniejsz N.
N, Chunk, Deltas, Sum
1 -> 1 -> [] -> 0
2 -> 23 -> [1] -> 1
3 -> 456 -> [1, 1] -> 2
4 -> 7891 -> [1, 1, -8] -> -6
5 -> 01112 -> [1, 0, 0,1] -> 2
6 -> 131415 -> [2, -2, 3, -3, 4] -> 4
7 -> 1617181 -> [5, -5, 6, -6, 7, -7] -> 0
8 -> 92021222 -> [-7, -2, 2, -1, 1, 0, 0] -> -7
9 -> 324252627 -> [-1, 2, -2, 3, -3, 4, -4, 5] -> 4
10 -> 2829303132 -> [6, -6, 7, -6, -3, 3, -2, 2, -1] -> 0
Łamigłówka 2 na CodeGolf-Hackathon (ja też jestem tam oryginalnym autorem, więc mogę pisać ponownie). Powiązane, inspiracje . Związane .
code-golf
sequence
array-manipulation
integer
Pan Xcoder
źródło
źródło
Odpowiedzi:
JavaScript (ES6),
54535150 bajtówZapisano 1 bajt dzięki @tsh
0-indeksowane.
Przypadki testowe
Pokaż fragment kodu
źródło
k=>-(n=1,g=s=>s[x=k*-~k/2]-s[x+k]-n||g(s+n++))""-n
APL (Dyalog) , 32 bajty
Wypróbuj online!
W jaki sposób?
+/⍳⍵
- suma1
don
⍳
- zrób z tego zasięg' '~⍨⍕
- w ciąg, bez spacji(+/⍳⍵-1)↓
- upuść pierwsze (suma1
don-1
) znaków⍵↑
- zachowaj kolejnen
znaki⍎¨
- zamień każdy znak na liczbę całkowitą2-⍨/
- lista różnic (odejmowanie wstecz dla każdych 2 pozycji)+/
- Podsumowując.źródło
Łuska , 9 bajtów
Wypróbuj online!
Moje rozwiązanie dla Hackathonu.
Wyjaśnienie:
źródło
Haskell ,
6160 bajtówWypróbuj online!
Wyjaśnienie:
Suma delt na liście jest taka sama, jak różnica między ostatnim a pierwszym elementem.
Ostatni element (zero indeksowane) jest
t
,triangle(n)-1 = sum[2..n]
. Pierwszy element jest zatemt-n+1
, ponieważ lista zawieran
elementy.źródło
Python 2 , 80 bajtów
Wypróbuj online!
2**n
jest oczywiście przesadą, ale jest krótszy niż bajtn*n+1
.źródło
Mathematica, 71 bajtów
Wypróbuj online!
źródło
JavaScript (ES6),
605753 bajtów1-indeksowany. Poprzednia 60-bajtowa wersja nierekurencyjna:
źródło
05AB1E , 8 bajtów
0-indeksowane.
Wypróbuj online!
źródło
Python 2 , 87 bajtów
Wypróbuj online!
źródło
Python 2 , 104 bajty
Wypróbuj online!
źródło
Perl 6 ,
5855 bajtówSprawdź to
Sprawdź to
Rozszerzony:
źródło
PHP ,
163147 bajtówWypróbuj online!
Moja pierwsza próba gry w golfa ... mam wrażenie, że może być krótsza
Edycja: zapisano 16 bajtów, usuwając kilka instancji
źródło
Perl 5 , 79 + 1 (
-p
) = 80 bajtówWypróbuj online!
źródło
Pyth ,
2927 bajtówZaoszczędzono 2 bajty dzięki @ Mr.Xcoder.
Wypróbuj online!
źródło
Galaretka , 14 bajtów
Wypróbuj online!
Wyjaśnienie
Zaczynałem od pobrania zakresu (n (n + 1) / 2), ale ponieważ możesz mieć dodatkowe cyfry na końcu listy przed pocięciem go, zmieniłem go na zakres (n ^ 2). W każdym razie masz dodatkowe cyfry po 1-9.
źródło
+²HRDFṫЀ³ḶḣЀRS€‘¤ṪðḣIS
oryginalna (udana, ale długa) próba