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`
Essayez-le en ligne!
Fait amusant: c'était 272 octets bien avant le début de l'explication, maintenant il bat Java.
Sorties True
pour cordes parfaitement équilibrées et False
autres
À ma grande satisfaction, cela bat la version ennuyeuse de palindromisation de 2 octets, pour éviter que le résultat ne soit imprimé deux fois. J'ai également cherché à avoir le moins de code mort possible, néanmoins il reste quelques sections commentées et le code se termine avec un code d'erreur de 1 , après avoir imprimé la valeur correcte.
NB : Un bug avec les BF
commandes a été corrigé pendant le développement de cette réponse.
Comment ça marche
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 ] ]get remplacez les sous-listes par le résultat de la fonction.
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)
qui est de 4 octets de plus.
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
Ensuite, nous entrons dans notre boucle while:
Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy
Une boucle while est une construction dans Add ++: elle opère directement sur le code, plutôt que sur les variables. Les constructions prennent une série d'instructions de code, séparées avec ,
lesquelles elles opèrent. Les instructions while et if prennent également une condition directement avant la première ,
qui consiste en une seule instruction valide, telle qu'une commande infixe avec des variables. Une chose à noter: la variable active ne peut pas être omise de la condition.
aa*bb
a ab by yF f (x)
`yy,$ff>xx
a a
- 1) La nouvelle valeur n'est pas égale à l'ancienne valeur (boucle unique)
- 2) La nouvelle valeur n'est pas la chaîne vide
L'un des plus gros inconvénients d'Add ++ est le manque d'instructions composées, ce qui nécessite d'avoir une deuxième variable de boucle. Nous attribuons nos deux variables:
a a : = x x ≠ y y
b b : = ¬¬( y y )
Avec le code
`aa,xx|yy,`bb,Byy
|
B
x xy yxx:yy
f fa ab b
a ax = ya ay yb ba a
Nous arrivons ensuite à notre déclaration 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 seF a l se
- a a = F a l s eb b = T r u eT r u e
bbbbT r u eF a l s e