Prouvé optimal!
((([()][()][()])))
Essayez-le en ligne!
Explication
Flak cérébrale, Cervelle flueue, Miniflak et Fλak
([()][()][()]) Push -3
( ) Copy
( ) Copy
Cela imprime:
-3
-3
-3
(Il y a un retour à la ligne)
Cerveau-Flak Classic
Brain-Flak Classic est la version originale de Brain-Flak et présente quelques différences importantes par rapport à Brain-Flak moderne. Dans BFC [...]
imprime son contenu plutôt que de le nier.
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
A la fin de l'exécution, le contenu de la pile ( 3 3 3
) est imprimé.
Cela imprime:
1
1
1
3
3
3
(Il y a un retour à la ligne)
Flakcats
Flakcats est assez différent des 4 autres flaks et je suis surpris que cela fonctionne dans Flakcats. Les trois opérateurs ici sont presque les mêmes que ceux utilisés par Brain-Flak.
La principale différence dans ce programme particulier entre Flakcats est l’ (...)
opérateur qui, dans Flakcats, est équivalent à ([{}]...)
Brain-Flak. Cependant, cela ne fait aucune différence pour nous, car il enregistre des zéros et fonctionne donc de la même manière que Brain-Flak.
Voici ce programme compilé dans Brian-Flak:
([{}]([{}]([{}][()][()][()])))
Cela imprime:
-3
-3
-3
(Il y a un retour à la ligne)
Preuve d'optimalité dans Brain-Flak et Miniflak
Ce n'est pas une preuve formelle, mais plutôt une preuve informelle qui devrait être élargie pour devenir plus rigoureuse.
En raison des restrictions, les programmes Brain-Flak doivent être une chaîne équilibrée et la longueur du programme doit être un multiple de 3, toute soumission valide doit être un multiple de 6. Cela signifie que toute solution inférieure à 18 doit avoir une longueur de 12.
En raison des sorties à la fin de la nouvelle ligne, la hauteur finale de la pile doit être un multiple de trois, sinon nous briserons les restrictions en matière de sortie.
Toute soumission valide de longueur 12 doit comporter 2 types d'accolades (en avoir moins enfreindrait les restrictions relatives au nombre de caractères distincts et plus signifierait plus de 12 caractères). Puisque le programme produit une sortie, il doit avoir un push.
Cela nous laisse choisir notre autre paire d'accolades. Les options sont:
<...>/<>
Cela échoue parce que nous devons générer une "valeur" afin de créer un nombre autre que zéro, nous devons renoncer à un ()
pour créer un nombre qui rend impossible de pousser plus de deux fois.
[...]/[]
Cela échoue pour la même raison que le dernier a échoué. Les accolades carrées sont vraiment mauvaises à faire de la valeur. La []
monade peut créer de la valeur, mais nous devons commencer par les chiffres, puis nous n'avons plus assez de parens pour pousser trois fois.
{...}/{}
Celui-ci est prometteur, nous pourrions créer une boucle et en utiliser une ()
pour appuyer plusieurs fois, mais ce n'est hélas pas possible.
Pour que la boucle se termine, il doit y avoir un zéro sur la pile à un moment donné et pour que nous ayons la sortie correcte, nous devons avoir autre chose que zéro sur la pile à la fin du programme. Puisque nous n’avons ni []
ni <>
le zéro à la fin de la boucle, il faut un zéro implicite du bas de la pile. Cela signifie que la boucle ne peut pas ajouter de nouveaux nombres à la pile, ce qui la rend inutile.
Comme aucun des choix d'accolade ne peut créer un programme de longueur 12, aucun ne peut exister.
Puisque Miniflak est un sous-ensemble de Brain-Flak, tout programme Miniflak plus court serait également un programme Brain-Flak plus court et n’existe donc pas.
Preuve d'optimalité dans Brain-Flueue
Brain-Flueue est un langage de plaisanterie basé sur Brain-Flak. Les deux sont si semblables que leurs interprètes sont identiques partout sauf deux lignes. Comme leur nom l'indique, Brain-Flueue stocke ses données dans des files d'attente, tandis que Brain-Flak stocke ses données dans des piles.
Pour commencer, nous avons les mêmes restrictions sur la taille du programme créées par Brain-Flak. Nous cherchons donc un programme de taille 12. En outre, nous aurons besoin d'un (...)
pour créer toute sortie et une autre paire. les paires <>
et []
ne fonctionnent pas dans Brain-Flueue pour la même raison, elles ne fonctionnent pas dans Brain-Flak.
Nous savons maintenant que notre programme doit être composé de caractères ((())){{{}}}
.
En utilisant les mêmes méthodes que celles utilisées dans la preuve précédente, nous pouvons démontrer qu'il doit y avoir une boucle dans le programme final.
À présent, les preuves diffèrent, car Brain-Flueue opère sur des files d'attente plutôt que sur des piles, le programme peut quitter une boucle avec des valeurs dans la file d'attente.
Pour sortir de la boucle, nous aurons besoin d'un zéro dans la file d'attente (ou d'une file vide, mais si la file est vide, nous rencontrons le même problème que Brain-Flak). Cela signifie que nous devrons ouvrir notre programme avec ({})
pour créer le zéro. Nous aurons besoin d'un appui dans la boucle pour insérer le nombre d'éléments requis dans la file d'attente. Nous devrons également indiquer un nombre différent de zéro avant la boucle pour pouvoir y entrer. cela nous coûtera au minimum absolu (())
. Nous avons maintenant utilisé plus de parens que nous avons.
Ainsi, il n'y a pas de programme Brain-Flueue pour effectuer la tâche qui est de 12 octets, et de plus notre programme est optimal.
La solution suivante est optimale dans Flakcats et Brain-Flak Classic.
((([][][])))
Explication
[][][] -3
((( ))) push 3 times
Solutions Brain-Flak alternatives sur 24 octets
(<((<((<(())>)())>)())>)
Essayez-le en ligne!
((<((<((<>)())>)())>)())
Essayez-le en ligne!
((((((()()()){}){}){})))
Essayez-le en ligne!