Ciąg znaków powtarza się, jeśli zawiera dwa kolejne podciągi, które są równoważne.
Na przykład 2034384538452
powtarza się, ponieważ zawiera 3845
dwa razy po kolei.
Dlatego Twoim wyzwaniem jest zdecydowanie, czy łańcuch zawiera powtarzający się podciąg. Możesz wziąć dane wejściowe jako ciąg znaków lub tablicę znaków.
Nigdy nie otrzymasz pustego wejścia, a długość podłańcucha (jeśli istnieje) może wynosić 1 lub więcej.
Używam 1
i 0
tutaj jako moich prawdomównych i fałszywych wartości, ale możesz używać różnych wartości, o ile są one prawdziwe i fałszywe w twoim języku.
Przykłady:
abcab -> 0
bdefdefg -> 1
Hello, World! -> 1
pp.pp/pp -> 1
q -> 0
21020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021012102012101202102012021012102012021020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020120210201210120210201202101210201210120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120 -> 0
(Ostatni przykład został wygenerowany z liczby jedynek między każdym zerem w sekwencji Thue-Morse)
Odpowiedzi:
Siatkówka , 6 bajtów
Wypróbuj online!
Pozytywna wartość dla prawdy; zero dla falsey.
Jak to działa
Zwraca liczbę dopasowań wyrażenia regularnego
/(.+)\1/g
.źródło
Brachylog , 3 bajty
Wypróbuj online!
źródło
Galaretka ,
65 bajtówTo jest pełny program. TIO nie może obsłużyć ostatniego przypadku testowego bez jego obcięcia.
Wypróbuj online! (ostatni przypadek testowy obcięty do 250 cyfr)
Jak to działa
źródło
Mathematica, 32 bajty
źródło
StringContainsQ[x__~~x__]
i!StringFreeQ[#,x__~~x__]&
oba są krótsze.Java, 27 bajtów
Prawie duplikat odpowiedzi Retina , ale nie ma mowy, żeby Java była krótsza.
źródło
05AB1E , 5 bajtów
Wypróbuj online!
Wyprowadza 1 jako wartość prawdy i 0 jako wartość fałszu
Wyjaśnienie
źródło
Python , 38 bajtów
Wypróbuj online!
Ziew, regex. Sprawdza, czy ciąg zawiera ciąg jednego lub więcej znaków,
.+
a następnie ten sam, który właśnie został przechwycony. Wyjściowym obiektem wyszukiwania jest Prawda, jeśli istnieje co najmniej jedno dopasowanie, co można sprawdzić za pomocąbool
.Użycie
compile
tutaj pozwala zaoszczędzić na pisaniu lambdy:Python , 54 bajty
Wypróbuj online!
Wyszukuje podciąg składający się z dwóch lub więcej równych ciągów połączonych, sprawdzonych przez
s in(s*2)[1:-1]
jak w tej odpowiedzi . Podciągi są generowane rekurencyjnie poprzez wybranie odcięcia pierwszego lub ostatniego znaku. Jest to wykładnicze, więc przekracza limit czasu dla dużego przypadku testowego.Niedaleko:
Pierwszy nie używa Pythona
in
do sprawdzania podciągów i dlatego może być dostosowany do innych języków.źródło
Pyth -
1098 bajtówZwraca listę wszystkich powtarzających się podciągów (która, jeśli ich nie ma, jest pustą listą, co jest fałszem)
Spróbuj
Wyjaśnienie:
źródło
f}+TTQ.:
Cheddar , 60 bajtów
Wypróbuj online!
źródło
@.test(/(.+)\1/)
PHP , 32 bajty
Wypróbuj online!
PHP , 38 bajtów
Wypróbuj online!
źródło
Python 3 ,
7366 bajtów-7 bajtów dzięki @LeakyNun
Wypróbuj online!
źródło
f=lambda s:s and(any(s[:i]*2 in s for i in range(1,len(s)))or f(s[1:]))
lambda s:any(2*s[j:i]in s for i in range(len(s))for j in range(i))
Perl 6 , 11 bajtów
Sprawdź to
Rozszerzony:
źródło
PHP, 32 bajty
Uruchom jako potok z
-F
. Przepraszam, Jörg, nie zauważyłem, że opublikowałeś to samo .wersja bez wyrażenia regularnego,
8482 bajtówkończy z kodem powrotu
0
dla powtórzenia, kończy się (i kończy się z błędem) dla braku. Uruchom jako potok z-nr
.zakłada wejście ASCII do wydruku; wymienić
~
za&
jakiegokolwiek ASCII.źródło
JavaScript (ES6), 19 bajtów
źródło
/(.+)\1/.test
?/(.+)\1/.test
siebie jako kompletne poddanie./(.+)\1/.test
jest niezwiązany (nie mathis
).f=/(.+)\1/.test;f('aa')
na przykład nie działałby. Potrzebujesz/./.test.bind(/(.+)\1/)
::/(.+)\1/.test
(15 bajtów)Pyth, 15 bajtów
Spróbuj!
źródło
V. , 6 bajtów
Wypróbuj online!
Pakiet testowy!
Program generuje
0
wartości falsey i dodatnią liczbę całkowitą dla wartości dodatnich.(Zauważ, że był mały błąd, więc musiałem zyskać 1 bajt. Teraz po poprawce będę mógł zastąpić
.«
go\x82
)Wyjaśnienie
źródło
Japt, 8
+ 1=98 bajtówWypróbuj online . Wyjścia
null
do falsy i tablica zawierająca wszystkie powtarzające się łańcuchy na truthy.Wyjaśnienie
źródło
è
do zwrócenia liczby dopasowań i upuszczenia flagi.null
, co jest fałszem.00
wysyła00
. Czy jesteś pewien, że to prawda w Japt?"00"
jest.-Q
Flag „prettyprints” wyjście, dzięki czemu można zobaczyć, że jest to tablica zawierająca pojedynczy łańcuch.Cheddar, 16 bajtów
To jest funkcja. Wypróbuj online!
źródło