Zainspirowany Czy to podwójne mówienie? , Opracowałem trudniejsze wyzwanie. Biorąc pod uwagę ciąg, określ, czy ciąg jest n-speak , dla dowolnego .
N-speak jest definiowany poprzez powtarzanie każdej litery razy. Przy ciąg Hello
jest przekształcany na HHHHeeeelllllllloooo
. Twoim celem jest ustalenie, czy dane wejściowe są prawidłowymi danymi wyjściowymi dla transformacji n-speak.
Należy zauważyć, że każde zdanie, które jest ważne n-speak, dla , jest również ważne k-speak. Zatem trudnymi częściami do rozwiązania będą nieparzyste wartości .
Wkład
Ciąg składający się z co najmniej 2 znaków. Dane wejściowe mogą być również listą znaków. W danych wejściowych rozróżniana jest wielkość liter.
Wydajność
Truthy
jeśli ciąg jest n-speak, w falsey
przeciwnym razie.
Przykłady
Prawdziwe przypadki
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Jeśli chcesz wygenerować dodatkowe prawdziwe przypadki, możesz użyć tego skryptu MathGolf . Umieść ciąg w cudzysłowie, a wartość jako dane wejściowe.
Fałszywe przypadki
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Oczywiście, ponieważ jest to kod golfowy, przygotuj się na przycięcie niektórych bajtów!
aabbab
aaaabbb
Odpowiedzi:
APL (Dyalog Unicode) , 12 bajtów
Działa z
⎕io←0
Wypróbuj online!
Grałem razem z Adamem .
Na wejściu (przykład:
"aaccccaaaaaabb"
przy użyciu""
do oznaczenia ciągu (tablicy znaków) i''
do oznaczenia znaku∊0⍞0
otaczaj zerem i spłaszczaj,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
wykonać pary nierównomierne,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
uzyskaj indeksy 0-indeksowane,0 2 6 12 14
∨/
obliczyć GCD,2
1≠
czy to nie jest równe 1?źródło
Java 10, 85 bajtów
Regex przeniesiony z odpowiedzi JavaScript @Arnauld .
Wypróbuj online.
Wyjaśnienie:
Wyjaśnienie Regex:
źródło
Galaretka , 5 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 53 bajty
Pochodzi z wyrażenia regularnego używanego przez @wastl w Czy to podwójne mówienie? .
Wypróbuj online!
Wersja rekurencyjna, 55 bajtów
Wypróbuj online!
Skomentował
źródło
05AB1E , 5 bajtów
Wypróbuj online!
źródło
Python 2 ,
73706967 bajtówWypróbuj online!
-4 bajty, dzięki Jitse
źródło
set(...)
z{...}
...1 in[...
Python 3 , 69 bajtów
Wypróbuj online!
źródło
QuadS , 16 bajtów SBCS
Wypróbuj online!
1≠
jest 1 inny niż∨/
GCD⍵
z wyniku(.)\1*
PCRE Wyszukiwanie dowolnego znaku, po którym następuje 0 lub więcej powtórzeń⊃⍵L
i zwracanie pierwszej długości dopasowania (tj. długości dopasowania)źródło
Stax , 5 bajtów
Uruchom i debuguj
Procedura:
źródło
Zapytanie T-SQL 2008, 193 bajty
Wypróbuj online
źródło
PHP ,
7675 bajtówWypróbuj online!
Pierwsza próba, nieco naiwne podejście iteracyjne.
Nie golfowany:
-1 bajt , dzięki za @ Noc2!
źródło
Perl 6 ,
302726 bajtówWypróbuj online!
Używa także sztuczki GCD, ale używa indeksu pozycji końcowej każdego przebiegu dopasowanego przez wyrażenie regularne. Zwraca liczbę ujemną (prawda), jeśli n-speak, zero (falsey) w przeciwnym razie.
źródło
Haskell , 48 bajtów
Wypróbuj online!
Bezpośredni; używa sztuczki GCD.
źródło
Czerwony , 80 bajtów
Wypróbuj online!
Więcej idiomatycznych czerwonych :
Czerwony , 81 bajtów
Wypróbuj online!
źródło
Brachylog , 5 bajtów
Wypróbuj online!
Pobiera dane wejściowe przez zmienną wejściową i dane wyjściowe w wyniku powodzenia lub niepowodzenia.
Na początku myślałem, że to rzeczywiście będzie krótsze niż moje rozwiązanie Czy to podwójne mówienie? , ale potem zdałem sobie sprawę, że
ġ
można i spróbuję grupy o długości 1.źródło
Japt
-¡
, 8 bajtówSpróbuj
źródło
Kotlin , 78 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Scala , 80 bajtów
Wypróbuj online!
PS. Oryginalne rozwiązanie było oparte na
split
funkcji, ale jest dłuższe (83 bajty).źródło
true
dane wejścioweaab
.s.
zastąpione przez,(s+s).
aby sobie z tym poradzić.aaaabb
iaabbbb
.Wolfram Language (Mathematica) , 34 bajty
Wypróbuj online!
źródło
Perl 5
-p
,83797674 bytesTry it online!
źródło
Brain-Flak, 96 bytes
Try it online!
Uses the same GCD trick that many other submissions use. Output is 0 if the input is not n-speak, and a positive integer otherwise.
źródło
Oracle SQL, 182 bytes
It works with an assumption that input data is stored in a table t(x), e.g.
źródło
K (ngn/k),
2923 bytesTry it online!
edit: removed some unnecessary colons (i know when a monadic is required but it's not always clear to me if there's ambiguity so i default to including the colon) and changed the mod
x-y*x%y
to ngn/k'sy!x
, which meant i could remove a variable assignmentźródło
APL (Dyalog Unicode),
2422 bytesSBCSAnonymous tacit prefix function.
Try it online!
⊂
enclose the string to treat map using the entire stringe.g.
"aaabbb"
⍳∘≢{
…}¨
for each of the⍳
ɩndices 1 through the tally of characters in the string:e.g.
3
⍺↑⍺
take the current number of elements from the current number, padding with 0se.g.
[3,0,0]
(≢⍵)⍴
cyclically reshape into the shape of the tally of characters in the stringe.g.
[3,0,0,3,0,0]
⍵/⍨
use that to replicate the string's characters"aaabbb"
1↓
drop the first one (n = 1)⊂∊
is the the entire string a member of that list?źródło
[1,0,0,1,0,0…]
etc. I'll be happy to teach you APL (it doesn't take long to learn). Just pop unto the APL Orchard.{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
for 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Retina 0.8.2, 28 bytes
Try it online! Link includes test cases. Explanation:
Split the text into runs of identical characters.
Replace them all with the same character.
Check whether the GCD of the lengths of the runs is greater than 1.
źródło
Japt
-mR
, 12 bytesTry it
źródło
MathGolf, 14 bytes
Try it online!
Explanation
Checks all possible divisions of the input string into equal length chunks, and checks if there is a partition in which all chunks have just one unique character.
źródło
Pyth, 7 bytes
Outputs 0 for falsy inputs or a positive integer otherwise.
Try it online!
źródło
Pyth, 8 bytes
Try it online!
źródło
Perl 5
-n
, 38 bytesTry it online!
The
print"\n"
in the footer is needed to separate the outputs.Straightforward loop through all possible
n
s. Outputs nothing for "1-speak", anything else for n-speak where n > 1.źródło