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`
Provalo online!
Curiosità: erano 272 byte molto prima dell'inizio della spiegazione, ora batte Java.
Uscite True
per stringhe perfettamente bilanciate e False
altro
Con mia grande soddisfazione, questo batte la noiosa versione palindromica di 2 byte, per evitare che il risultato venga stampato due volte. Ho anche mirato ad avere il minor numero di dead code possibile, tuttavia ci sono ancora alcune sezioni commentate e il codice esce con un codice di errore 1 , dopo aver stampato il valore corretto.
NB : è BF
stato corretto un bug con i comandi mentre questa risposta era in fase di sviluppo.
Come funziona
f fgf ff fgSf f (S)S
Sa b b b a a b a c c[ [ a ] , [ b b b ] , [ a a ] , [ b ] , [ a ] , [ c c ] ]ge sostituire gli elenchi secondari con il risultato della funzione.
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)
che è di 4 byte in più.
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
Quindi entriamo nel nostro ciclo while:
Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy
Un ciclo while è un costrutto in Add ++: opera direttamente sul codice, piuttosto che sulle variabili. I costrutti prendono una serie di istruzioni di codice, separate con le ,
quali operano. Le istruzioni while e if prendono anche una condizione direttamente prima della prima ,
che consistono in una singola istruzione valida, come un comando infix con variabili. Una cosa da notare: la variabile attiva non può essere omessa dalla condizione.
aa*bb
a ab by yf f (x)
`yy,$ff>xx
a a
- 1) Il nuovo valore non equivale al vecchio valore (loop mentre univoco)
- 2) Il nuovo valore non è la stringa vuota
Uno dei maggiori svantaggi di Add ++ è la mancanza di istruzioni composte, che richiede una seconda variabile di ciclo. Assegniamo le nostre due variabili:
a a : = x x ≠ y y
b b : = ¬¬( y y )
Con il codice
`aa,xx|yy,`bb,Byy
|
B
x xy yxx:yy
f fa ab b
a ax = ya ay yb ba a
Raggiungiamo quindi la nostra dichiarazione finale:
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