D,g,@~~,L2_|*;;*|_2L,@,g,D
D,ff,@^^,BG€gBF;;FBg€GB,@D1:?:
xx:?
aa:1
`bb
Bxx;;B
Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy
O;;O:,B,`,|,`,>$,`,*W`
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 und False
sonst
Zu 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
f fGf ff fGSf f (S)S
Sa b b b a a b ein C c[ [ a ] , [ b b b ] , [ a a ] , [ b ] , [ a ] , [ c c ] ]G, und ersetzen Sie die Unterlisten durch das Ergebnis der Funktion.
G2x[ a ][ b b ][ c c c ]
[ a ] ⇒ [ a , 1 ]
[ b b ] ⇒ [ b , b , 0 ]
[ c c c ] ⇒ [ c , c , c , 1 ]
xx > 2x - 2x*
G( s )sBF
^
D,ff,@^^,
Grr;;
f fGf f
- x xf f
- y yf f
- a a
- b by y
Gx y a bG
€
a b c{...}
G{...}
g gf fG
D,gg,@~~,L2_|*;;*|_2L,@D (NB: -2 bytes)
D,ff,@^^,BG€{gg}BF;;FB}gg{€GB,@D?: (NB: +6 bytes)
Das ist 4 Bytes länger.
x = 5x = 15
x+10 ; Explicit argument
+10 ; Implicit argument, as x is active
x`
f fGx xxx:?
x xa aaa:1
1x xb b
`bb
Bxx
b bx xa a : = 1b b : = ¬¬ x x
Dann geben wir unsere while-Schleife ein:
Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy
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
a ab by yf f (x)
`yy,$ff>xx
a a
- 1) Der neue Wert entspricht nicht dem alten Wert (Schleife solange einzigartig)
- 2) Der neue Wert ist nicht die leere Zeichenfolge
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:
a a : = x x ≠ y y
b b : = ¬¬( y y )
Mit dem Code
`aa,xx|yy,`bb,Byy
|
B
x xy yxx:yy
f fa ab b
a ax = ya ay yb ba a
Wir kommen dann zu unserer endgültigen Aussage:
O
b b
- a a =1b b = F a l s eF a l s e
- a a = T r u eb b = F a l s eF a l s e
- a a = F a l s eb b = T r u eT r u e
b bb bT r u eF a l s e