Inspiriert von Sprechen Sie doppelt? Ich habe mir eine schwierigere Herausforderung ausgedacht. Bestimmen Sie bei einer gegebenen Zeichenfolge, ob die Zeichenfolge für ein beliebiges n-speak ist .
N-speak wird definiert, indem jeder Buchstabe mal wiederholt wird . Mit wird der String in transformiert . Ihr Ziel ist es, herauszufinden, ob die Eingabe eine gültige Ausgabe für eine N-Speak-Transformation ist.Hello
HHHHeeeelllllllloooo
Es ist zu beachten, dass jeder Satz, der für ist, auch k-sprachig ist. Somit sind die zu lösenden harten Teile ungerade Werte von .
Eingang
Eine Zeichenfolge, die aus mindestens 2 Zeichen besteht. Die Eingabe kann auch eine Liste von Zeichen sein. Die Eingabe unterscheidet zwischen Groß- und Kleinschreibung.
Ausgabe
Truthy
wenn der String n-speak ist, falsey
sonst.
Beispiele
Wahre Fälle
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Wenn Sie zusätzliche Wahrheitsfälle generieren möchten, können Sie dieses MathGolf-Skript verwenden . Platzieren Sie die Zeichenfolge in Anführungszeichen und den Wert von als Eingabe.
Falsche Fälle
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Natürlich, da dies Codegolf ist, machen Sie sich bereit, einige Bytes zu kürzen!
aabbab
aaaabbb
Antworten:
APL (Dyalog Unicode) , 12 Byte
Läuft mit
⎕io←0
Probieren Sie es online!
Golf zusammen mit Adám .
In der Eingabe (Beispiel:
"aaccccaaaaaabb"
Verwenden von""
, um einen String (ein Array von Zeichen) und ein Zeichen''
zu bezeichnen)∊0⍞0
mit 0en umgeben und abflachen,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
paarweise ungleich ausführen,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
Holen Sie sich die 0-indizierten Indizes,0 2 6 12 14
∨/
GCD berechnen,2
1≠
ist das nicht gleich 1?quelle
Java 10, 85 Bytes
Regex wurde aus der JavaScript-Antwort von @Arnauld portiert .
Probieren Sie es online aus.
Erläuterung:
Regex Erklärung:
quelle
Gelee , 5 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 53 Byte
Abgeleitet von dem regulären Ausdruck, der von @wastl in Is it double speak verwendet wird. .
Probieren Sie es online!
Rekursive Version, 55 Bytes
Probieren Sie es online!
Kommentiert
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
quelle
Python 2 ,
73706967 BytesProbieren Sie es online!
-4 Bytes, danke an Jitse
quelle
set(...)
durch{...}
...1 in[...
Python 3 , 69 Bytes
Probieren Sie es online!
quelle
QuadS , 16 Byte SBCS
Probieren Sie es online!
1≠
ist 1 verschieden von∨/
der GCD⍵
des Ergebnisses von(.)\1*
PCRE Suche nach einem beliebigen Zeichen, gefolgt von 0 oder mehr Wiederholungen⊃⍵L
und Rückgabe der ersten der Matchlängen (dh der Länge des Matchs)quelle
Stax , 5 Bytes
Führen Sie es aus und debuggen Sie es
Verfahren:
quelle
T-SQL 2008-Abfrage, 193 Byte
Probieren Sie es online aus
quelle
PHP ,
7675 BytesProbieren Sie es online!
Erster Versuch, ein etwas naiver iterativer Ansatz.
Ungolfed:
-1 Byte , Danke an @ Night2!
quelle
Perl 6 ,
302726 BytesProbieren Sie es online!
Verwendet auch den GCD-Trick, verwendet jedoch den Index der Endposition jedes Laufs, der mit dem regulären Ausdruck übereinstimmt. Gibt eine negative Zahl (wahr) zurück, wenn n-speak, andernfalls null (falsch).
quelle
Haskell , 48 Bytes
Probieren Sie es online!
Einfach; benutzt den GCD-Trick.
quelle
Rot , 80 Bytes
Probieren Sie es online!
Mehr idiomatisches Rot :
Rot , 81 Bytes
Probieren Sie es online!
quelle
Brachylog , 5 Bytes
Probieren Sie es online!
Übernimmt die Eingabe über die Eingabevariable und gibt sie über Erfolg oder Misserfolg aus.
Zuerst dachte ich, das wäre tatsächlich kürzer als meine Lösung für Ist es doppelt gesprochen? , aber dann wurde mir klar, dass
ġ
ich eine Gruppenlänge von 1 probieren kann und werde.quelle
Japt
-¡
, 8 BytesVersuch es
quelle
Kotlin , 78 Bytes
Probieren Sie es online!
Erläuterung
quelle
Scala , 80 Bytes
Probieren Sie es online!
PS. Die ursprüngliche Lösung basierte auf der
split
Funktion, war jedoch länger (83 Byte).quelle
true
zur Eingabe zurückgegebenaab
.s.
ersetzt mit(s+s).
, um das zu handhaben.aaaabb
und versagtaabbbb
.Wolfram Language (Mathematica) , 34 Byte
Probieren Sie es online!
quelle
Perl 5
-p
,83797674 BytesProbieren Sie es online!
quelle
Brain-Flak , 96 Bytes
Probieren Sie es online!
Verwendet denselben GCD-Trick, den viele andere Einreichungen verwenden. Die Ausgabe ist 0, wenn die Eingabe nicht n-sprachig ist, und andernfalls eine positive Ganzzahl.
quelle
Oracle SQL, 182 Byte
Es wird davon ausgegangen, dass die Eingabedaten in einer Tabelle t (x) gespeichert sind, z
quelle
K (NGN / k) ,
2923 BytesProbieren Sie es online!
edit: einige unnötige Doppelpunkte entfernt (ich weiß, wann eine Monade erforderlich ist, aber es ist mir nicht immer klar, ob es Unklarheiten gibt, so dass ich standardmäßig den Doppelpunkt
x-y*x%y
einbeziehe ) und den Mod auf ngn / ks geändert habey!x
, was bedeutete, dass ich eine variable Zuweisung entfernen konntequelle
APL (Dyalog Unicode) ,
2422 Bytes SBCSAnonyme implizite Präfixfunktion.
Probieren Sie es online!
⊂
Schließen Sie die Zeichenfolge ein, um die Karte mit der gesamten Zeichenfolge zu behandeln,z
"aaabbb"
⍳∘≢{
...}¨
für jede der⍳
ɩ ndices 1 durch die Strichliste der Zeichen in der Zeichenkette:zB
3
⍺↑⍺
nimm die aktuelle Anzahl der Elemente aus der aktuellen Anzahl, fülle sie mit 0s auf,z
[3,0,0]
(≢⍵)⍴
zyklisch r eshape in die Form der tally der Zeichen in der ZeichenkettezB
[3,0,0,3,0,0]
⍵/⍨
Verwenden Sie dies, um die Zeichen der Zeichenfolge zu replizieren"aaabbb"
1↓
lass den ersten fallen ( n = 1)⊂∊
Ist die gesamte Zeichenfolge Mitglied dieser Liste?quelle
[1,0,0,1,0,0…]
usw. Ich werde Ihnen gerne APL beibringen (es dauert nicht lange zu lernen). Kommen Sie einfach zum APL-Obstgarten .{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
für 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Retina 0.8.2 , 28 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Teilen Sie den Text in Läufe mit identischen Zeichen auf.
Ersetze sie alle mit dem gleichen Charakter.
Prüfen Sie, ob der GCD der Lauflängen größer als 1 ist.
quelle
Japt
-mR
, 12 BytesVersuch es
quelle
MathGolf , 14 Bytes
Probieren Sie es online!
Erläuterung
Überprüft alle möglichen Unterteilungen der Eingabezeichenfolge in gleichlange Abschnitte und prüft, ob es eine Partition gibt, in der alle Abschnitte nur ein einziges Zeichen haben.
quelle
Pyth , 7 Bytes
Ausgänge 0 für falsy Eingänge oder eine positive Ganzzahl anders.
Probieren Sie es online!
quelle
Pyth , 8 Bytes
Probieren Sie es online!
quelle
Perl 5
-n
, 38 BytesProbieren Sie es online!
Das
print"\n"
in der Fußzeile wird benötigt, um die Ausgänge zu trennen.Einfache Schleife durch alle möglichen
n
s. Gibt nichts für "1-speak" aus, alles andere für n-speak, wobei n> 1 ist.quelle