Lassen Sie uns eine Funktion , die einen String nimmt und alle Paare benachbarter identischer Zeichen entfernt. Beispielsweise
Beachten Sie, dass bei Überlappung zweier Paare nur eines entfernt wird.
Wir werden einen String als perfekt gepaart bezeichnen, wenn eine wiederholte Anwendung den leeren String ergibt. Zum Beispiel ist die Zeichenfolge über nicht perfekt gepaart, da wir bei immer noch . Ein String wie ist jedoch perfekt gepaart, denn wenn wir dreimal anwenden, erhalten wir den leeren Stringf ein b ein e ein b b c c ein d d e f
Ihre Aufgabe ist es, perfekt gepaarten Computercode zu schreiben, der eine Zeichenfolge (aus druckbarem ASCII) verwendet und entscheidet, ob diese perfekt gepaart ist. Der Bytestring Ihrer Quelle muss selbst ein perfekt gepaarter String sein , obwohl Ihr Code nicht unbedingt auf druckbares ASCII beschränkt sein muss.
Sie können zwei unterschiedliche Werte ausgeben: einen für den Fall, dass die Eingabe perfekt gepaart ist, und einen anderen für den Fall, dass dies nicht der Fall ist.
Dies ist eine Code-Golf- Frage, daher werden die Antworten anhand der Größe in Bytes ihrer Quelle bewertet, wobei weniger Bytes besser sind.
Testfälle
quelle
Antworten:
Haskell,
146124 BytesKeine Kommentare. Gibt entweder
True
oder zurückFalse
.Probieren Sie es online!
Edit: -22 Bytes dank @Cat Wizard
quelle
Python 2 , 94 Bytes
Probieren Sie es online!
Der gesamte Aktualisierungsschritt
ss=[cc+ss,ss[1:]][cc==ss[:1]]
bricht auf einfach ab=[+,[
.quelle
05AB1E ,
26 24 22 2018 Bytes-2 Bytes dank ovs . Gibt 0 aus, wenn der String perfekt gepaart ist, andernfalls 1 .
Probieren Sie es online!
Vorherige Versionen
Dieser basiert ausschließlich auf undefiniertem Verhalten (es gibt also keinen "toten Code") und gibt [['0'] für perfekt gepaarte Zeichenfolgen und [['1'] für nicht perfekt passende Zeichenfolgen aus:
Und die 22-Byte-Version, erklärt, die genau das oben genannte ist, aber UB nicht missbraucht und vernünftige Werte liefert .
quelle
Cubix , 54 Bytes
Gibt nichts aus, wenn der String perfekt gepaart ist
1
.Probieren Sie es hier aus
Cubified
Erläuterung
Die meisten Zeichen sind Füllzeichen, die zum perfekten Koppeln des Codes erforderlich sind. Ersetzen
.
wir diese durch (no-op), erhalten wirDies kann in drei Schritte unterteilt werden:
i
und die?
).quelle
V ,
20, 18 BytesProbieren Sie es online!
Hexdump:
Gibt 0 für wahr, 1 für falsch aus. Vielen Dank an nmjcman101 für die indirekte Einsparung von 2 Bytes.
quelle
^$
mit.
und Rück 0 für truthy, etwas anderes für falsy? Ich bin ein bisschen neblig in Bezug auf die Regeln, nachdem ich dies für eine Weile nicht getan habe.R ,
142126 BytesEngere Logik und einige Kommentar-Bytes, die von @ Giuseppe gespielt wurden
Probieren Sie es online!
Original:
Probieren Sie es online!
Rekursive Detektorfunktion, gefolgt von einem Kommentar mit allen Zeichen in der Funktion in umgekehrter Reihenfolge.
quelle
APL (Dyalog) , 38 Bytes
Probieren Sie es online!
quelle
Retina ,
2826 BytesProbieren Sie es online!
Ausgaben
`C1\).(`+0`C1\).(`+
für falsche und`C1\).(`+1`C1\).(`+
für wahrheitsgemäße Fälle.quelle
Brain-Flak ,
228200 BytesProbieren Sie es online!
Dies ist ein bisschen ein Proof of Concept. Es könnte wahrscheinlich kürzer sein. Es werden jedoch keine Kommentare verwendet.
Gibt aus,
0,0
ob der Eingang perfekt gepaart ist und0,1
nicht.quelle
sed 4.2.2 , 34 Bytes
Probieren Sie es online!
Gepaarte Strings geben leere, ungepaarte Strings geben
ct:
Die triviale palindromische Version ist bei 32
:;ss(.)\1ss;t;/./cc/./;t;1\).(;:
. Alte Lösung wurde:;ss((..??\??))\1ss1;t;;/./cc/./t:
(geändert , weil aktuelle missbrauchtc
weniger, edit: yay jetzt gibt es nur 1 Zeichen nachc
: D)(Beachten Sie, dass dies
;
das Anweisungstrennzeichen ist.):
deklariert ein leeres Etikett:t
deklariert das Etikettt
ss((..??\??))\1ss1
eine Substitution ist, in sed Sie das Trennzeichen auf eine Substitution ändern können, und das ist , was ich , indem es tats
, so wie dies tut , ist die erste ersetzen (wie durch die bezeichnet ist1
am Ende)Spiel von
((..??\??))\1
.
irgendein Charakter.??
gefolgt von einem optionalen optionalen Zeichen\??
und ein optionales?
mit nichts
Jetzt wird diese Ersetzung mit sich selbst gepaart, so dass die
;
s davor und danach ebenfalls gelöscht werdent
und kehren Sie zum Etikett zurück, bis keine erfolgreichen Substitutionen mehr vorhanden sind/..?/
if.
(Platzhalter) gefolgt von.?
einem optionalen Zeichen stimmt übereincc
Ändern Sie den Puffer inc
quelle
Brain-Flak ,
112 110108 BytesProbieren Sie es online!
Dies basiert auf meiner Antwort von Stimmen die Klammern überein? .
Versuchte, keine Kommentare zu verwenden, blieb aber beim Versuch hängen, das
{}
Paar pop nilads ( ) zusammenzubringen. Das Problem besteht darin, ein Paar von Klammern am einfachsten in einem anderen Paar derselben Art zu umgeben. Während dies für andere Niladen einfach ist, erzeugt die{...}
Monade Schleifen. Um die Schleife zu verlassen, müssen Sie eine 0 drücken, aber sobald Sie die Schleife verlassen haben, müssen Sie die 0 platzieren, was das Problem verschärft.Die vorgepaarte 66-Byte-Lösung ist:
Probieren Sie es online!
Ausgänge
1
oder1,0
wenn der Eingang eine perfekte Paarung ist,0,0
wenn nicht.Keine Kommentarversion, 156 Bytes
Probieren Sie es online!
Wie der Cat-Assistent hervorhob, funktioniert die erste Antwort nicht für alle Dolmetscher, da nicht alle
#
Kommentare verarbeiten. Diese Version enthält keine Kommentare.quelle
Japt,
2422 BytesAusgänge
false
für Wahrheit undtrue
Falschheit.Versuch es
quelle
«e"(.)%1
funktionieren«
Laufen bringen kann.Brain-Flak , 96 Bytes
Probieren Sie es online!
Gibt nichts aus, wenn der Eingang perfekt gepaart ist,
0
andernfalls.Nicht perfekt gepaarte (Original-) Version:
Probieren Sie es online!
quelle
Haskell , 66 Bytes
Probieren Sie es online!
Cat Wizard sparte 6 Bytes.
quelle
Add ++ , 146 Bytes
Probieren Sie es online!
Witzige Tatsache: Das waren 272 Bytes, lange bevor die Erklärung gestartet wurde, jetzt schlägt es Java.
Ausgänge
True
für perfekt ausbalancierte Saiten undFalse
sonstZu meiner großen Zufriedenheit übertrifft dies die langweilige Palindromize-Version um 2 Bytes, um zu verhindern, dass das Ergebnis zweimal gedruckt wird. Ich habe auch versucht, so wenig toten Code wie möglich zu haben, es gibt jedoch noch einige auskommentierte Abschnitte, und der Code wird mit einem Fehlercode von 1 beendet , nachdem der richtige Wert gedruckt wurde.
NB : Ein Fehler mit den
BF
Befehlen wurde behoben, während diese Antwort in der Entwicklung war.Wie es funktioniert
*
BF
^
D,ff,@^^,
;;
€
{...}
{...}
Das ist 4 Bytes länger.
`
xx:?
aa:1
Dann geben wir unsere while-Schleife ein:
Eine while-Schleife ist ein Konstrukt in Add ++: Sie arbeitet direkt mit Code und nicht mit Variablen. Konstrukte verwenden eine Reihe von Code-Anweisungen, mit
,
denen sie getrennt arbeiten. While- und If-Anweisungen erhalten auch eine Bedingung direkt vor der ersten,,
die aus einer einzigen gültigen Anweisung besteht, z. B. einem Infix-Befehl mit Variablen. Eines ist zu beachten: Die aktive Variable kann in der Bedingung nicht weggelassen werden.aa*bb
Einer der größten Nachteile von Add ++ ist das Fehlen zusammengesetzter Anweisungen, für die eine zweite Schleifenvariable erforderlich ist. Wir ordnen unsere beiden Variablen zu:
Mit dem Code
|
B
xx:yy
Wir kommen dann zu unserer endgültigen Aussage:
quelle
JavaScript (ES6), 76 Byte
Gibt einen Booleschen Wert zurück.
Probieren Sie es online!
Vorgeschlagen von @Shaggy: 58 Bytes durch Zurückgeben einer leeren Zeichenfolge für perfektes Pairing oder Auslösen eines Fehlers ansonsten.
quelle
Wolfram Language (Mathematica) ,
7064 BytesProbieren Sie es online!
Ohne Kommentare 92 Bytes
Probieren Sie es online!
quelle
Lua , 178 Bytes
Probieren Sie es online!
Dies ist zwar eine furchtbar lange Lösung, nutzt jedoch Lua-spezifische Macken in erheblichem Maße aus. Dies ist tatsächlich ein minimierter Brute-Force-Stack-Algorithmus. Das Programm wird durch die Tatsache kompliziert, dass Luas Muster das Ersetzen von Paaren nicht erlauben und Regex nicht eingebaut ist.
Erläuterung:
quelle
Gol> <> , 30 Bytes
Probieren Sie es online!
Alles nach dem ersten
B
ist überschüssiger Code und wird nicht ausgeführt. Eine Funktion, die den Anfang des Stapels zurückgibt, als1
wäre die Eingabe0
ansonsten eine perfekte Paarung .Erläuterung:
quelle
Cubix , 30 Bytes
Probieren Sie es online!
Gibt aus,
1
ob der String perfekt gepaart ist und sonst nichts.Cubified
Vereinfacht
Die Logik und die allgemeine Struktur sind die gleichen wie in der Antwort von Mnemonic, jedoch ohne eine explizite Überprüfung der leeren Zeichenfolge.
quelle
Haskell , 92 Bytes
Probieren Sie es online!
@ Nimis Antwort ist ziemlich cool, es werden keine Kommentare verwendet. Dieser ist kürzer, verwendet aber einen Kommentar.
@ xnors Antwort ist auch ziemlich cool, sie verwendet Kommentare und ist kürzer als diese.
quelle
Python 2 , 114 Bytes
Probieren Sie es online!
Gibt andernfalls
True
für perfekt gepaarte Zeichenfolgen zurückFalse
.(
(.)
Kann sich selbst nicht verifizieren, da die Zeilenumbrüche im Code nicht übereinstimmen. @Cat Wizard hat dies jedoch als in Ordnung eingestuft, da Zeilenumbrüche keine druckbaren ASCII-Zeichen sind und mein Programm sie daher nicht verarbeiten muss.)Dies ist eine perfekt gepaarte Version von:
Wofür eine "faulere" Perfektionierung
code + '##' + f(code[::-1])
120 Bytes ergeben würde. (Das heißt, das Umbenennen der Variablen usw., um mehr reduzierte Paare in die Kommentarhälfte des Codes einzuführen, sparte 6 Bytes.)quelle
Jelly ,
26 2422 BytesProbieren Sie es online!
Seltsamerweise scheint es zu funktionieren, ohne den Rückwärtscode auf einen nicht verwendeten Link zu verschieben.
Gibt 0 zurück, wenn der Eingang perfekt gepaart ist, andernfalls 1 .
Aktiv-Code:
quelle
Attache , 82 Bytes
Probieren Sie es online!
Nichts Unglaubliches hier.
Fixpoint
Eine Funktion, die aufeinanderfolgende Paare entfernt.quelle
Java 8,
158156154 BytesGibt einen Booleschen Wert (
true
/false
) zurück.-2 Bytes dank @raznagul .
Probieren Sie es online aus.
Erläuterung:
quelle
s
inn
und Hinzufügen eines zweiten Leerzeichensreturn s.isEmpty
können Sies n
aus dem Kommentar entfernen und insgesamt 2 Bytes einsparen.