Wyzwanie
Biorąc pod uwagę sekwencję liczb, utwórz funkcję, która zwraca kroki sekwencji.
- Załóżmy, że sekwencja będzie
N >= 3
- Sekwencja powtórzy kroki co najmniej raz
- Sekwencja będzie zawierać tylko liczby naturalne
- Twoja funkcja lub program powinien zwrócić możliwie najkrótszą sekwencję kroków
Przykład:
Wejście: [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17]
Wynik: [1, 1, 2]
Objaśnienie: Początkowa sekwencja pochodzi z 1 => 2 (1 step), 2 => 3 (1 step), 3 => 5 (2 steps)
. Potem się powtarza. Dane wyjściowe to[1 step, 1 step, 2 steps] => [1, 1, 2]
Inny przykład:
Wejście: [2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20]
Wynik: [3, 1, 1, 1]
[2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20]
\ /\ /\ /\ /
3 1 1 1 Then it repeats...
Przypadki testowe
Input: [1, 4, 8, 9, 10, 13, 17, 18, 19, 22, 26, 27, 28] => Output: [3,4,1,1]
Input: [6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41] => Output: [5,2]
Input: [2, 6, 10, 13, 17, 21, 25, 28, 32, 36, 40, 43, 47] => Output: [4,4,3,4]
Input: [5, 6, 7] => Output: [1]
Wyjaśnienia
- Długość wejściowa - 1 jest podzielna przez długość wyjściową
- Załóżmy, że sekwencja zawsze będzie rosła
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
źródło
Odpowiedzi:
Galaretka ,
97 bajtówWypróbuj online!
Jak to działa
źródło
JavaScript (ES6), 58 bajtów
Zwraca ciąg oddzielony przecinkami (z przecinkiem wiodącym).
Wypróbuj online!
Lub 56 bajtów, jeśli użyjemy
,-
jako separatora i założymy, że sekwencja jest zawsze ściśle rośnie.W jaki sposób?
Najpierw konwertujemy tablicę wejściową a [] na listę kolejnych różnic za pomocą:
Ponieważ p jest początkowo ustawione na wartość nienumeryczną (funkcja zwrotna mapy () ), pierwsza iteracja daje NaN .
Przykład:
Następnie zmuszamy wynik do ciągu:
Na koniec szukamy najkrótszego 1 wzoru liczb całkowitych oddzielonych przecinkami (
,\d+
) zaczynających się zaraz po „NaN” i powtarzających się do końca łańcucha:1: używając non-chciwego
*?
źródło
/(,.+?)\1*$/
.Brachylog , 11 bajtów
Wypróbuj online!
Byłoby 5 bajtów, gdyby istniała wbudowana funkcja dla kolejnych różnic.
Wyjaśnienie
źródło
Pyth, 11 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
Japt ,
1412 bajtówSpróbuj
Wyjaśnienie
Oryginalny
Spróbuj
źródło
R ,
4946 bajtówPełny program:
Wypróbuj online!
R ,
725854 bajtówOryginalne przesłanie funkcji ze wszystkimi przypadkami testowymi w jednym miejscu:
Wypróbuj online!
Podziękowania dla JayCe za zasugerowanie pełnej trasy programu i -4 bajtów dla funkcji, oraz dla Giuseppe za dalsze -3.
źródło
a<-
tutaj nie potrzebujęJ ,
2219 bajtów3 bajty zapisane dzięki FrownyFrog!
Wypróbuj online!
[Wypróbuj online!] [TIO-ji2uiwla]
W jaki sposób?
źródło
/:
zamiast tego#\
możesz0{"1[:~.
zapisać 1 bajt."0 1
jest"{
05AB1E , 8 bajtów
Zaoszczędził 3 bajty dzięki Kevin Cruijssen .
Wypróbuj online!
05AB1E , 11 bajtów
Wypróbuj online!
13 bajtów
Urocza alternatywa IMO:
Wypróbuj online!
źródło
.œ
.JavaScript, 49
56bajtówEdytuj 7 bajtów zapisanych dzięki (zgadnij kto?) Arnauld
Taki sam pomysł wyrażenia regularnego jak Arnauld, ale co ciekawe tak różne w realizacji ...
Zwracanie ciągu znaków z oddzielonymi przecinkami kroków (i przecinkiem wiodącym)
Test
źródło
match
było moją kiepską decyzją. Możesz mnie trochę obezwładnić . :-)MATL ,
141312 bajtówWypróbuj online!
Właśnie odkryłem, że MATL ma funkcję krążenia!
Wyjaśnienie
d
- Uzyskaj różnice między kolejnymi terminami, jako tablicęt5YL
- powiel to, a następnie wywołaj funkcjęYL
(„galeria”) za pomocą opcji5
(„krążący”). Tworzy macierz z danym wektorem jako pierwszym rzędem, a następnie kolejne rzędy są tym samym wektorem przesuniętym kołowo, aż się owija.FTF#Xu
- Sprawdź unikalne wiersze i uzyskaj ich numery (nie jestem pewien, czy istnieje krótszy sposób na zrobienie tego). Po powtórzeniu kroków sekwencji rząd przesunięty kołowo będzie taki sam jak pierwszy rząd, a kolejne rzędy będą się powtarzać. W ten sposób uzyskuje się wskaźniki pierwszego przebiegu kroków sekwencji, zanim zaczną się powtarzać.)
- zindeksuj to w oryginalnej tablicy różnic, aby uzyskać odpowiedź.Starsze:
Wypróbuj online!
(-1 bajt dzięki Giuseppe)
Wyjaśnienie:
źródło
Python 2 , 101 bajtów
Wypróbuj online!
Po pierwsze tworzy delty dni , po czym wyszukuje pierwszy prefiks p o d że kiedy powtórzono ⌊len (l) / len (P) ⌋ razy wydajność L , gdzie L jest lista wejściowego.
źródło
Rubin , 62 bajty
Opiera się na logice Regex zaadaptowanej z odpowiedzi Arnaulda .
Wypróbuj online!
Alternatywne określenie różnic kroków, również 62 bajty:
Wypróbuj online!
źródło
Java 10,
104100 bajtówRegex
( ?.+?)\1*$
dla najkrótszego powtarzającego się podciągu z komentarza @Neil @Arnauld ' JavaScript (ES6) Odpowiedź s .Wypróbuj online.
Wyjaśnienie:
źródło
APL + WIN, 39 bajtów
Monituj o dane wejściowe.
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Wyjaśnienie:
źródło
Python 2 ,
8685 bajtówWypróbuj online!
Skonstruuj różnice jako
d
; jeślid
powtarza się z rozmiarem jednostki,n
tod[n:]==d[:-n]
; w przeciwnym razie powrócą.źródło
Retina 0.8.2 , 42 bajty
Wypróbuj online! Link zawiera przypadki testowe. Dane wyjściowe obejmują przecinek wiodący. Wyjaśnienie:
Konwertuj na unary.
Oblicz różnice w przód, z wyjątkiem pierwszej liczby, która pozostanie w tyle.
Dopasuj powtarzające się różnice.
Konwertuj na dziesiętny.
źródło
05AB1E ,
1413 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wiem, że są już dwie krótsze odpowiedzi 05AB1E opublikowane przez @ Mr.Xcodera , ale chciałem wypróbować to alternatywne podejście przy użyciu kontroli rotacji i równości.
Może być w stanie zagrać w golfa o kilka bajtów bez upuszczania
Á
.-1 bajt po końcówce @Emigna, aby usunąć rejestry global_variable (
©
i 2x®
) i zamiast tego użyć Duplicate (D
) i Triplicate (Ð
).Wyjaśnienie:
źródło
Haskell, 107 bajtów
x jest tablicą wejściową.
źródło
f x=
. Również użycieinits
wymagaimport Data.List
, ponieważ nie jest to częścią Preludium: Wypróbuj online!(init x)
może to byćx
spowodowane tym, żezip
obcina się automatycznie, jeśli jedna z list jest dłuższa od drugiej. I dlamap(uncurry(-))$zip
istnieje wbudowany:zipWith(-)
. Zamiastf x=let i=...in
można użyć osłony wzoru:f x|i<-...=
.filter
,!!0
zamiasthead
icycle
zamiastconcat$repeat
: Spróbuj online!Stax ,
86 bajtówUruchom i debuguj
Oto rozpakowana wersja z adnotacjami, która pokazuje, jak to działa.
Uruchom ten
źródło
Perl 6 , 57 bajtów
Sprawdź to
Dane wyjściowe są oddzielone spacjami (
"1 1 2"
)Rozszerzony:
źródło
~(.skip Z-$_)
05AB1E , 9 bajtów
Wyjaśnienie:
Alternatywny 9-bajtowy:
To samo algo, ale zamiast porównywać z listą delt (które należy zapisać / przywrócić), to używa
.¥
(undelta) następnie porównuje z (niejawnym) wejściem.Wypróbuj online!
źródło
K4 , 30 bajtów
Rozwiązanie:
Przykłady:
Wyjaśnienie:
Wydaje się, że to, co próbujemy rozwiązać, jest ogromne. Uzyskaj delty wejścia, a następnie buduj sekwencje i określ najkrótszą, która do niej pasuje.
źródło
Wolfram Language (Mathematica) , 26 bajtów
Wypróbuj online!
Zwraca wartość
Sequence
zawierającą kroki.+2 bajty dla
List
wyjścia:Wypróbuj online!
źródło
Perl 5
-p
, 55 bajtówWypróbuj online!
Liczby są wprowadzane jako lista oddzielona spacjami. Dane wyjściowe mają ten sam format.
źródło