Biorąc pod uwagę ciąg jako argument, wypisz długość najdłuższego (-ych) powtarzającego się podciągu (ciągów) lub zero, jeśli nie ma takiego ciągu.
Możesz założyć, że łańcuch wejściowy nie jest pusty.
Przykłady
abcdefabc
: podciąg abc
jest powtarzany w pozycjach 1 i 7, więc program powinien wypisać 3
abcabcabcabcab
: abcabc
lub bcabca
lub cabcab
są powtarzane, więc program powinien wypisać 6 . (podciąg abcabcabcab
również się powtarza, ale wystąpienia nakładają się, więc go nie akceptujemy).
aaaaaaa
: aaa
powtarza się na przykład w pozycjach 1 i 4, więc program powinien wypisać 3
abcda
: a
powtarza się, więc program powinien wypisać 1
xyz
: brak powtarzającego się ciągu → 0
ababcabcabcabcab
: powinien zwrócić 6
To jest golf golfowy , więc wygrywa najmniej bajtów.
code-golf
string
code-golf
code-golf
kolmogorov-complexity
primes
code-golf
kolmogorov-complexity
hexadecimal
code-golf
code-golf
string
code-golf
string
random
code-golf
array-manipulation
code-golf
ascii-art
kolmogorov-complexity
random
code-golf
array-manipulation
code-golf
stateful
code-golf
hello-world
code-golf
string
code-golf
interpreter
lisp
code-golf
restricted-source
quine
palindrome
code-golf
ascii-art
random
generation
challenge-writing
ascii-art
random
polyglot
maze
answer-chaining
string
cops-and-robbers
whitespace
code-golf
string
cops-and-robbers
whitespace
code-golf
number
sequence
code-golf
date
code-golf
ascii-art
decision-problem
code-golf
combinatorics
chemistry
code-golf
kolmogorov-complexity
source-layout
radiation-hardening
code-golf
ascii-art
path-finding
maze
code-golf
string
ascii-art
game
animation
code-golf
string
ascii-art
code-golf
ascii-art
kolmogorov-complexity
code-golf
restricted-source
new-years
Arnaud
źródło
źródło
Odpowiedzi:
pieprzenie mózgu, 226 bajtów
Sformatowany:
Oczekuje danych wejściowych z końcowym znakiem nowej linii lub bez i wyświetla wynik jako wartość bajtu .
Wypróbuj online.
Sprawdza każdy prefiks, aby sprawdzić, czy występuje on później w ciągu, a następnie odcina pierwszy znak i powtarza proces, aż nie pozostanie więcej znaków.
Taśma jest podzielona na 3-komórkowe węzły,
c 0 f
gdzie
c
jest znakiem danego ciągu if
jest flagą, która może być jedna, ujemna lub zero. Flagi niezerowe są umieszczane między dwoma obecnie porównywanymi znakami, a ujemne są zarezerwowane dla komórek po zakończeniu bieżącego prefiksu i przed początkiem bieżącego sufiksu (tj. Przed indeksem bieżącego potencjalnego dopasowania).Wynik jest przechowywany po lewej stronie ciągu i jest aktualizowany za każdym razem, gdy zostanie znalezione dopasowanie.
(Ciąg jest faktycznie przetwarzany w odwrotnej kolejności z
\x01
dołączonym do niego).źródło
Galaretka , 12 bajtów
Wypróbuj online!
Jak to działa
źródło
œ-Q
jest naprawdę fajnie.Perl 6 , 36 bajtów
Spróbuj
Rozszerzony:
źródło
Siatkówka ,
353230 bajtówCałkiem fajne wyzwanie.
Wypróbuj online
Wyjaśnienie:
źródło
M%`.
jako drugiego etapu.JavaScript (ES6),
796866 bajtówEdycja: Zapisano
1113 bajtów dzięki @Arnauld.źródło
Haskell , 79 bajtów
Wypróbuj online!
źródło
%
może kumulowaćaa
axayaa
a%d
jest złe, ale także niepotrzebne. Co oznacza również, że możesz użyćmax
zamiastmaximum
.a%d
to""%d
naprawia.a
jest pusty.sum[1|(x,y)<-zip a c,x==y]
można go użyć zamiasta!c
.Python 3 ,
7572 bajtówWypróbuj online!
źródło
JavaScript, 120
źródło
Łuska , 11 bajtów
Wypróbuj online!
Uwaga: Łuska jest nowsza niż to wyzwanie.
Wyjaśnienie
źródło
Perl 5 z
-p
, 40 bajtówWypróbuj online!
źródło
Mathematica,
7565 bajtów10 bajtów zapisanych dzięki @JingHwan Min .
Funkcja anonimowa. Pobiera ciąg znaków jako dane wejściowe i zwraca liczbę jako dane wyjściowe.
źródło
BlankNullSequence (___)
kiedyOverlaps->All
tam będzie.Max@StringLength@StringCases[#,a___~~___~~a___:>a,Overlaps->All]&
byłoby dobrze.StringReplace
: PPyth - 16 bajtów
Muszę w golfa przekonwertować wszystkie struny na długości i znaleźć maks.
Pakiet testowy .
źródło
Clojure, 112 bajtów
Pętle dwa razy w ciągu liczb
0
don - 1
(n
jest długość łańcucha), kroplej
znaki i dzieli pozostałą do „początku” i części „END”. Tworzy zestaw wszystkich podciągówe
długościb
i używa go jako funkcji do sprawdzenia, czyb
stamtąd zostanie znaleziony. Zwraca długość,b
jeśli znaleziono, a 0 w przeciwnym razie zwraca maksimum tych wartości.Byłoby ciekawie zobaczyć krótszą wersję.
źródło
Siatkówka , 24 bajty
Wypróbuj online!
Rozgrzewka dla mnie, aby nauczyć się nowych funkcji Retina 1.
Wyjaśnienie
Etap listy zwraca wszystkie dopasowania wyrażenia regularnego
(.*).*\1
, które pasują do dowolnego wzorca postaci „ABA”, gdzie A i B są dwoma dowolnymi podciągami (być może pustymi). Dodatkowe opcje podane dla tego etapu to:v
uwzględnianie nakładających się meczów,$
które stosują podstawienie do każdego dopasowania przed jego zwróceniem: podstawienie jest wskazane w drugim wierszu i odpowiada długości (.
) pierwszej grupy przechwytywania ( który byłby podciągiem „A” w poprzednim przykładzie).Mamy teraz wszystkie długości powtarzających się podciągów, ten etap po prostu sortuje je w kolejności numerycznej, od najkrótszego do najdłuższego.
Wreszcie, ten etap grep (
G
) zachowuje tylko ostatni-1
wynik ( ), który jest długością najdłuższego powtarzanego podłańcucha.źródło
JavaScript, 165 bajtów
Przypadki testowe
źródło
ababcabcabcabcab
, ale ciągcabcab
jest powtarzany.