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 Truepour cordes parfaitement équilibrées et Falseautres
À 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 BFcommandes 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:11x 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*bba 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