To pochodzi z tego pytania (za zgodą oczywiście). Zacytuję:
Utwórz funkcję, która pobiera ciąg znaków i powinna zwracać wartość true lub false w zależności od tego, czy dane wejściowe składają się tylko z powtarzanej sekwencji znaków. Długość podanego ciągu jest zawsze większa niż 1, a sekwencja znaków musi mieć co najmniej jedno powtórzenie.
Kilka przykładów:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
W szczególności sprawdzenie łańcucha ściśle złożonego z powtarzających się podciągów ( Aktualizacja ) może wygenerować dowolną prawdziwą lub fałszywą reprezentację, ale proszę nie dać wyniku błędu. Ciągi ściśle alfanumeryczne. W przeciwnym razie standardowe zasady gry w golfa. To jest Code Golf, więc wygrywa najkrótsza odpowiedź w bajtach dla każdego języka.
code-golf
decision-problem
ouflak
źródło
źródło
Odpowiedzi:
Brachylog ,
43 bajtyWypróbuj online!
Wyjaśnienie
Program drukuje,
true.
czy ograniczenia mogą być spełnione, afalse.
jeśli nie.źródło
~j↙
lub=Ṁc
pracując, zanim zauważyłem, że opublikowałeś to godzinę temuġ=Ṁ
Ṁ
jest zmienną ograniczoną do listy dwóch lub więcej elementów)JavaScript (ES6), 22 bajty
Zwraca wartość logiczną.
Wypróbuj online!
Bez wyrażenia regularnego
3329 bajtówZwraca albo
null
(fałsz), albo obiekt (prawda).Wypróbuj online!
NB: Technicznie,s jest konwertowane na wyrażenie regularne dla match () , więc powyższy tytuł jest kłamstwem.
źródło
grep, 19
Test
Wydajność:
źródło
Japt , 6 bajtów
Oszczędność jednego bajtu dzięki @Shaggy
Wypróbuj online!
źródło
p<space>
z²
zapisać bajt.Java,
2524 bajtów-1 bajt dzięki Olivier Grégoire!
Nudna odpowiedź regularna
Wypróbuj online!
To tylko 1 bajt dłużej niż odpowiedź pytona aaaaaJestem teraz związany :)źródło
$
ponieważmatches
metoda jest dopasowaniem ścisłym, a nie dopasowaniem podłańcuchowym domyślnie.matches
dodaje własne$
do wyrażenia regularnego. Dzięki!Excel, 26 bajtów
Dane wejściowe z A1, dane wyjściowe do dowolnej komórki, w której umieścisz tę formułę.
źródło
A
) I ustawiłeś ją jako swoją wartość wejściową.A1
też „zmienną”, ponieważ zawiera wartość wejściową? :)R , 28 bajtów
Wypróbuj online!
Prosta wersja Regex. R jest (czasami) bardzo podobny do Pythona, więc jest podobny do odpowiedzi wyrażeń regularnych w Pythonie 2 TFeld, choć krótszy!
Pytanie (jeśli ktoś zna odpowiedź)
Nadal jestem zdezorientowany, dlaczego to działa, ponieważ podłańcuch może mieć dowolną długość i zawsze będzie działać, i nadal działa, gdy dodam literę z przodu prawidłowego ciągu, na przykład „cABABABABAB”. Jeśli osobiście przeczytam regex, widzę
(.+)
, że przechwytuje on dowolną grupę dowolnej długości. A następnie,\\1+$
która powtarza przechwyconą grupę dowolną liczbę razy do końca.Dlaczego więc nie przechwytuje tylko „AB” i nie stwierdza, że jest powtarzane aż do końca łańcucha, tym bardziej, że nie określono ograniczeń co do tego, gdzie może zaczynać się podłańcuch?
źródło
perl=TRUE
sprawia, że pasuje do cABABAB, jak można się spodziewać. Uruchamianiegrep -E '(.*)\1+$'
w bash również pasuje do cABABAB, nawet jeśligrep -E
używa ERE, ten sam regexowy smak R ma wspierać..+
na początku wzorca na^.+
jest ważną optymalizacją, ale jeśli.+
jest on w środku przechwytywania parens, przestaje być ważny.Siatkówka 0.8.2 , 9 bajtów
Wypróbuj online! Link zawiera przypadki testowe.
źródło
Galaretka ,
54 bajtówWidzę teraz, że optymalnym sposobem jest zastosowanie metody xnor !
Monadyczny link, który przyjmuje listę znaków i zwraca liczbę całkowitą - najkrótszą możliwą długość powtarzającego się wycinka lub zero, jeśli nie istnieje. Zauważ, że zero to falsey, podczas gdy niezerowe liczby są prawdziwe w Jelly.
Wypróbuj online!
W jaki sposób?
źródło
Perl 5
-p
, 14 bajtówWypróbuj online!
źródło
Python 2 , 24 bajty
Wypróbuj online!
Bezwstydnie skradziony z odpowiedzi Xnora na pierwotne pytanie.
Bardziej intuicyjna wersja:
Python 2 ,
595553 bajtówWypróbuj online!
Nudna wersja wyrażenia regularnego:
Python 2 , 44 bajty
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
2423 bajtyWypróbuj online!
źródło
Pyke , 4 bajty
Wypróbuj tutaj!
źródło
J ,
26 25 1514 bajtówKorzystanie z metody xnor
Wypróbuj online!
oryginalne (dwa różne podejścia)
J , 25 bajtów
Wypróbuj online!
J , 26 bajtów
Wypróbuj online!
źródło
PowerShell,
2324 bajty+1 bajt, aby w pełni dopasować reguły
Wypróbuj online!
Strasznie nudne. Na podstawie innych odpowiedzi Regex. Na szczęście PowerShell nie używa
\
jako znaku ucieczki!źródło
true
doaabcabc
C # (interaktywny kompilator Visual C #) , 70 bajtów
bezwstydna adaptacja xnora ( 46 bajtów )
Moje rozwiązanie bez Regex:
Wyjaśnienie:
Zastąp każdy możliwy podciąg rozpoczynający się od indeksu 0 pustym ciągiem. Jeśli wynikiem jest pusty ciąg, ciąg jest w całości wykonany z tego podłańcucha. Ponieważ obejmuje to ocenę całego łańcucha za pomocą samego siebie, liczba oczekiwanych wyników musi być większa niż 1.
Przykład: abcabc
Możliwe podciągi zaczynające się od indeksu 0:
Jeśli zastąpimy je pustymi ciągami
Ponieważ istnieje podciąg inny niż „abcabc”, który zwraca pusty ciąg, ciąg jest w całości wykonany z innego podłańcucha („abc”)
Wypróbuj online!
źródło
Python 3 ,
62605654 bajtów-4 bajty dzięki dla ArBo
Wypróbuj online!
źródło
f=
Można usunąć; funkcje anonimowe są ogólnie dozwolone. Ponadto, przechodząc do Pythona 2 i sprawdzając członkostwo listy zamiastany
konstrukcji, można uzyskać do 55 bajtówJapt , 10 bajtów
Zwraca liczbę dodatnią, jeśli jest prawdą, i 0, jeśli falsey. Jeśli chcesz otrzymać wynik bool, po prostu dodaj
-¡
flagęWypróbuj online!
źródło
Łuska , 6 bajtów
Wypróbuj online!
Wydaje mi się, że jest to jeden bajt więcej niż optymalny, ale nie mogłem znaleźć aranżacji, która stworzyłaby wyraźną kompozycję
ȯ
zbędna.Wyjaśnienie
źródło
€htD¹
unikaȯ
.λ€htD¹
ale nie zdawałem sobie sprawy, że lambdy zostaną dodane pośrednioMathematica 11.x, 74 bajty
gdzie w całości
#
reprezentuje ciąg wejściowy, orazznajduje podciągi ciągu wejściowego pasujące do wzorca
Ten wzorzec wymaga dopasowań,
x
musi zaczynać się na początku łańcucha i musi spełniać warunek, że (1) dopasowanie nie jest całym łańcuchem wejściowym i (2), jeśli zastąpimy wystąpienia dopasowania w łańcuchu wejściowym pustym łańcuchem otrzymujemy pusty ciąg. Wreszcie, porównując listę dopasowań z pustą listą,jest,
True
jeśli lista dopasowań nie jest pusta iFalse
jeśli lista dopasowań jest pusta.Przypadki testowe:
i
źródło
Python 3, 84 bajtów
Używa
textwrap.wrap
(dzięki tej odpowiedzi ) do podzielenia łańcucha na kawałki długości wn
celu przetestowania każdej możliwej długości powtarzającego się podłańcucha. Podzielone elementy są następnie porównywane ze sobą poprzez dodanie ich do zestawu. Jeśli wszystkie elementy są równe, a zestaw ma długość 1, łańcuch musi być ciągiem powtarzalnym. Użyłem<2
zamiast,==1
ponieważ zapisuje bajt, a długość łańcucha wejściowego była gwarantowana większa niż zero.Jeśli nie ma żadnego,
n
dla którego powtarzające się podciągi długościn
składają się na cały ciąg, to zwróć false dla całej funkcji.źródło
05AB1E , 5 bajtów
Metoda xnor z poprzedniego pytania wydaje się również optymalna w 05AB1E.
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Czysty , 73 bajty
Nie używa wyrażenia regularnego.
Wypróbuj online!
Definiuje
$ :: [Char] -> Bool
.Sprawdza, czy podany ciąg jest prefiksem powtórzenia dowolnego podciągu pobranego od końca.
źródło
C ++ (gcc) , 36 bajtów
Wypróbuj online!
Kolejny port rozwiązania xnor. Używa makra, aby rozwinąć argument do wyrażenia. Przyjmuje się, że argument jest typu
std::string
.źródło
Zmienna QlikView, 27 bajtów
Należy to zdefiniować jako zmienną, która następnie pozwala przekazać parametry, np
$1
Jako wartość wejściową.Zwraca
0
lub-1
(odpowiednikTRUE()
funkcji QlikView ).źródło
Szybki, 196 bajtów
Wypróbuj online!
źródło
Ikona , 46 bajtów
Wypróbuj online!
Kolejny port rozwiązania xnor.
źródło
K (oK) , 29 bajtów
Wypróbuj online!
źródło
Czerwony , 72 bajty
Wypróbuj online!
Zwraca
1
zaTrue
źródło
T-SQL, 47 bajtów
Używając metody @ Xnor :
Zachowując starą odpowiedź, ponieważ zawiera trochę dobrej gry w golfa (67 bajtów):
Objaśnienie: Ten skrypt wielokrotnie próbuje zastąpić wejście „@y” pierwszymi znakami „@” wejścia „@y” niczym, jednocześnie zwiększając „@”.
Ostatecznie wynik będzie pusty. Jeśli dzieje się tak, gdy zmienna pętli jest równa długości varchara, kryterium jest fałszywe / 0, ponieważ „@” = len (@y) (nie było powtarzającego się varchara).
można w to zagrać w golfa
ponieważ długość „@y” nie może wynosić 0, a „@” nigdy nie przekroczy długości @y.
Wypróbuj online
źródło