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`
Pruébalo en línea!
Dato curioso: esto fue 272 bytes mucho antes de que se iniciara la explicación, ahora supera a Java.
Salidas True
para cuerdas perfectamente equilibradas, y de lo False
contrario
Para mi gran satisfacción, esto supera la aburrida versión de palindromize en 2 bytes, para evitar que el resultado se imprima dos veces. También he tratado de tener el menor código muerto posible, sin embargo, todavía hay algunas secciones comentadas, y el código sale con un código de error de 1 , después de imprimir el valor correcto.
NB : Se solucionó un error con los BF
comandos mientras esta respuesta estaba en desarrollo.
Cómo funciona
f fsolf ff fsolSf f (S)S
Sa b b b a a b a c c[ [ a ] , [ b b b ] , [ a a ] , [ b ] , [ a ] , [ c c ] ]sol, y reemplace las sublistas con el resultado de la función.
sol2X[ a ][ b b ][ c c c ]
[ a ] ⇒ [ a , 1 ]
[ b b ] ⇒ [ b , b , 0 ]
[ c c c ] ⇒ [ c , c , c , 1 ]
Xx > 2x - 2X*
sol( s )sBF
^
D,ff,@^^,
solrr;;
f fsolf f
- x xf f
- y yf f
- a a
- b by y
solx y a bsol
€
a b c{...}
sol{...}
g gf fsol
D,gg,@~~,L2_|*;;*|_2L,@D (NB: -2 bytes)
D,ff,@^^,BG€{gg}BF;;FB}gg{€GB,@D?: (NB: +6 bytes)
que es 4 bytes más largo.
x = 5x = 15
x+10 ; Explicit argument
+10 ; Implicit argument, as x is active
X`
f fsolx xxx:?
x xa aaa:1
1x xb b
`bb
Bxx
b bx xa a : = 1b b : = ¬¬ x x
Luego ingresamos a nuestro ciclo while:
Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy
Un ciclo while es una construcción en Add ++: opera directamente en código, en lugar de variables. Las construcciones toman una serie de sentencias de código, separadas con ,
las que operan. Las sentencias while y if también toman una condición directamente anterior a la primera, ,
que consiste en una única declaración válida, como un comando infijo con variables. Una cosa a tener en cuenta: la variable activa no se puede omitir de la condición.
aa*bb
a ab by yf f (x)
`yy,$ff>xx
a a
- 1) El nuevo valor no es igual al valor anterior (bucle mientras único)
- 2) El nuevo valor no es la cadena vacía
Uno de los mayores inconvenientes de Add ++ es la falta de declaraciones compuestas, lo que requiere tener una segunda variable de bucle. Asignamos nuestras dos variables:
a a : = x x ≠ y y
b b : = ¬¬( y y )
Con el código
`aa,xx|yy,`bb,Byy
|
B
x xy yxx:yy
f fa ab b
a ax = ya ay yb ba a
Luego llegamos a nuestra declaración final:
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