Haskell (avant GHC 8.4), ( 10119 7767 7626 7540 octets), score 15 14 10
(<>)(<><>)(<>)(<<>>)()=(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)(<><>)))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))<<>>((<><>)<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)(<><>))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>((<><>)<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))<<>>(((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)((<>)(<><>)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))<<>>[])))))))))))))))))))))))))))))))))))))
(<>)'y'pred(:)
Essayez-le en ligne!
La dernière ligne définit une fonction anonyme (<>)'y'pred(:)
. Appelez avec (<>)'y'pred(:)()
pour donner la chaîne.
Edit: Un grand merci à @ Ørjan Johansen pour avoir suggéré de transmettre les fonctions d’aide en tant que paramètres au lieu de les déclarer, ce qui a permis d’économiser quatre octets de score!
Les octets non-crochets sont
=
vous avez:
Comment ça marche?
Une chaîne "wxy"
en Haskell est du sucre syntaxique pour une liste de caractères ['w','x','y']
, qui est à nouveau le sucre syntaxique pour la construction ultérieure avec l'opérateur contre :
et la liste vide: 'w':'x':'y':[]
. En définissant, (<<>>)=(:)
nous produisons la même chaîne en écrivant 'w'<<>>('x'<<>>('y'<<>>[]))
.
Comme les caractères sont ordonnés, nous pouvons calculer le prédécesseur de chaque caractère avec une fonction appelée pred
. En utilisant uniquement le caractère 'y'
et pred
, la chaîne devient pred(pred 'y')<<>>(pred 'y'<<>>('y'<<>>[]))
. En définissant (<>)=pred
et, (<><>)='y'
nous pouvons représenter la chaîne en utilisant des crochets équilibrés uniquement:
(<>)((<>)(<><>))<<>>((<>)(<><>)<<>>((<><>)<<>>[]))
Cependant, au final, nous ne voulons pas d'une chaîne mais d'une fonction renvoyant une chaîne, nous définissons donc notre opérateur contre comme (<<>>) x xs ()=x:xs
. (Bien sûr avec x
et xs
remplacé par des identificateurs utilisant uniquement des crochets équilibrés:) (<<>>)(<>)(<><>)()=(<>):(<><>)
. Par ici,
((<>)((<>)(<><>))<<>>((<>)(<><>)<<>>((<><>)<<>>[])())())
est une fonction de type () -> String
et ajouter une finale ()
donne la chaîne d'origine:
((<>)((<>)(<><>))<<>>((<>)(<><>)<<>>((<><>)<<>>[])())())()
En utilisant cette méthode , nous obtenons une solution avec un score 15. Cependant, on peut condenser les trois déclarations en un seul en déclarant une fonction qui prend quatre arguments: 'z'
, pred
, (:)
et ()
pour appeler.
La fonction suivante encode
code une chaîne avec des caractères plus petits ou égaux, de la 'y'
manière suivante: (Pourquoi y
? Parce que c'est le plus gros caractère "Surprise!\nHappy Birthday, Brain-Flak!"
et donne ainsi la représentation la plus courte. Merci encore à Ørjan Johansen pour l'avoir signalé.)
c x = let l = fromEnum 'y' - fromEnum x
in "(" ++ ([1..l]>>"((<>)") ++ "(<><>)" ++ ([1..l]>>")") ++ "<<>>"
encode s = concatMap c s ++ "[]" ++ ([1..length s-1]>>")()") ++ ")"
Essayez-le en ligne!