Votre défi est de transformer le texte d'entrée en code de flak de cerveau qui produira le texte.
Tutoriel tiré d' ici avec autorisation ici
Brain-Flak a deux piles, appelées «gauche» et «droite». La pile active commence à gauche. Si une pile vide est sautée, elle retournera 0. C'est tout. Pas d'autres variables. Lorsque le programme démarre, chaque argument de ligne de commande est poussé vers la pile active.
Les seuls caractères valides d'un programme Brain-Flak le sont ()[]{}<>
et ils doivent toujours être équilibrés. Il existe deux types de fonctions: Nilades et Monades . Un nilad est une fonction qui prend 0 arguments. Voici toutes les nilades:
()
Évalue à un.[]
Évalue à la hauteur de la pile actuelle.{}
Pop la pile active. Évalue la valeur sautée.<>
Basculez la pile active. Évalue à zéro.
Ceux-ci sont concaténés ensemble lorsqu'ils sont évalués. Donc, si nous avions un «3» au-dessus de la pile active, cet extrait de code:
()(){}
évaluerait 1 + 1 + active.pop()
qui évaluerait à 5.
Les monades prennent un argument, un morceau de code Brain-Flak. Voici toutes les monades:
(n)
Appuyez sur 'n' sur la pile active.[n]
Évalue à «n» négatif{foo}
Bien que zéro ne soit pas au sommet de la pile, faites-le.<foo>
Exécutez foo, mais évaluez-le à 0.
Ces fonctions renverront également la valeur à l'intérieur d'eux, donc
(()()())
Poussera 3 mais
((()()()))
Poussera 3 fois .
L' {}
évaluera à la somme de tous les runs. Donc, si nous avions «3» et «4» en haut de la pile:
{{}}
serait évalué comme 7.
Une fois le programme exécuté, chaque valeur restante sur la pile active est imprimée, avec une nouvelle ligne entre. Les valeurs de l'autre pile sont ignorées.
Règles
- Vous pouvez supposer que le Brain-Flak est exécuté avec ascii out. (
-A
) - Le code brain-flak ne doit PAS nécessiter d'entrée
- Toutes les règles standard s'appliquent
- Le code doit s'exécuter dans 1 minute pour toute entrée jusqu'à 1024 octets sur TIO. (Si aucune sortie TIO n'est disponible, fournissez un interprète et je l'exécuterai sur ma machine (ma machine devrait pouvoir s'approcher de TIO)).
- Vous devez prendre en charge la saisie de longueur arbitraire.
- Vous pouvez prendre des entrées à partir d'un fichier.
- L'optimisation pour les cas de test n'est pas autorisée
- Une sortie déterministe est requise
- Les programmes n'ont pas besoin d'être propres
Cas de test (essayez votre code sur ceux-ci, les textes de notation réels seront publiés dans les 1-2 semaines après la publication du défi)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
The meaning of brain-flak is to flak your brain with pain.
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
To be, or not to be, that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
And by opposing end them. To die-to sleep,
No more; and by a sleep to say we die
<your brain-flak code here>
The fitness pacer test is a multi stage test. Avacado Avacado Avacadad Avacadad carrot.bat carrot.jar carrot.carrot Quack Quack Quack Quack Quack Quack Quack Quack Quack downgoat doawngoat down down gaot
This challenge came from a online program that turned text into brain-fuck. However brain-fuck has limitations and it is not nearly as cool as brain-flak. I really am looking forward to cool programs :) I am glad you took the time to read this and look forward to seeing your answer.
Gagnant
Pour gagner, vous devez donner la longueur totale du code brain-flak donné par chacun des cas de test qui sera publié 1 à 2 semaines après la date du post. La longueur totale la plus courte l'emporte.
REMARQUE!!!!!!:
Ce n'est pas du code-golf , la longueur de votre code n'affectera en aucun cas votre score final. Faire du code lisible est apprécié. Merci!
<your brain-flak code here>
moins de 1000 est récompensée par la prime. Que je ne peux pas poster pour un autre jour, oups; n'a pas remarqué à quel point c'était nouveau.Réponses:
Brain-Flak , 130 octets
Essayez-le en ligne!
Sortie pour
<your brain-flak code here>
: 5045 octetsEssayez-le en ligne!
la source
Python 3 , 17744 octets
Edit: J'ai ajouté quelques options pour aider le golf dans des situations de stack sécurisé.
Essayez-le en ligne!
Une solution récursive
simpleque je continuerai d'améliorer encore. Cela fonctionne très bien avec des entrées plus petites, mais perd la réponse Ruby de MegaTom pour des entrées plus longues.Remarques:
[]
deviennent inutiles (bien qu'elles puissent être désactivées en commentant quelques lignes, et elles ne l'améliorent que d'environ 100 octets).un peu).Comme il s'agit d'un algorithme récursif, cela prendra plus de temps pour les caractères avec de grandes valeurs. Par exemple, le caractère ÿ (valeur 255) prend 9 secondes à évaluer, où chaque cas de test prend à la fois 1,6 seconde.Cache implémenté![]
)-
. Cela a coupé quelques octets, et beaucoup de temps étant donné la valeur de ce tiret em était 8212: o.Exemples de sorties:
<your brain-flak code here>
(312 octets):Essayez-le en ligne!
Hello, World!
( 142 octets [Remarque: le meilleur précédentactuelétait de 148 octets , et est maintenant de 136 octets]):Essayez-le en ligne!
la source
Ruby , 17398 octets pour tous les (nouveaux) cas de test
Essayez-le en ligne!
<your brain-flak code here>
,362358 octetsEssayez-le en ligne!
la source
Must run under 1 minute for inputs up to 1024 bytes
règle (bien que ce soit beaucoup plus rapide maintenant)cache
, notcash
; pPython 3 , 16222 octets
Essayez-le en ligne!
Premier en dessous de 1000 pour
<your brain-flak code here>
: DBrain-Flak , 448 octets
Essayez-le en ligne!
(à l'origine 827 pour
<your brain-flak code here>
)la source
05AB1E , trop d'octets (Mon premier BF quoi que ce soit)
Essayez-le en ligne!
Tentative extrêmement simple de jouer au golf en utilisant un code Brain-flak prédéfini de "multiplication". Tout cela ne fait que trouver la paire de diviseurs la plus petite somme pour chaque point de code ASCII, puis pousse ces deux paires de diviseurs sous forme de nombres. Le code Brainflak
({}<>)({<({}[()])><>({})<>}{}<><{}>)
est ensuite ajouté et exécuté en boucle jusqu'à ce que toutes les valeurs se trouvent sur la pile alternative.Liste des personnes que je remercie:
(()())(()()())
=((()())())
(-252 bytes
)-927 bytes
).Exemple de golf
<your brain-flak code here>
à347032182291 octets:Brain-Flak , 2291 octets
Essayez-le en ligne!
Chaque ligne représente un personnage en cours de golf, ce qui bat la solution de base que j'ai publiée de 60% , et en sachant littéralement rien sur Brainflak, je pense que c'est une bonne ligne de base de ce qu'il ne faut pas faire. Je vais marquer la réponse dans un petit moment, au milieu de quelque chose d'autre et je suis sûr que je peux améliorer cela. (J'inclus les nouvelles lignes dans le nombre d'octets parce que je ne m'attends pas à ce que cela gagne).
la source
(()()()())(()()()()())
et((()()()())())
2) La multiplication par une constante peut être beaucoup plus courte quepush(); multiply();
. Par exemple, pour doubler un nombre, vous pouvez faire(({}){})
plutôt que(()())({}<>)({<({}[()])><>({})<>}{}<><{}>)
. Mais ce n'est pas une terrible référence. Si vous voulez plus d'informations, je suis toujours heureux de discuter dans la troisième pileBrain-Flak
Essayez-le en ligne!
Sortie pour
<your brain-flak code here>
, 582 octets:la source