Dans cette tâche, vous allez écrire un programme / une fonction qui prend un programme Malbolge normalisé et génère le programme Malbolge résultant . (Ceci est un outil secret que tous les programmeurs Malbolge utilisent!)
Contribution
Une structure de données qui (en quelque sorte) représente un programme Malbolge normalisé.
Production
Une structure de données qui représente le programme Malbolge résultant.
Exemples
jpoo*pjoooop*ojoopoo*ojoooooppjoivvvo/i<ivivi<vvvvvvvvvvvvvoji
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.~P<<:(8&66#"!~}|{zyxwvugJ%
jjjj*<jjjj*<v
('&%#^"!~}{XE
jjjjjjjjjjjjjjjjjjjjjjj*<jjjjjjjjjjjjjjjjjjjjjjjj*<v
('&%$#"!~}|{zyxwvutsrqpnKmlkjihgfedcba`_^]\[ZYXWVT1|
Comment convertir
Itérer sur le programme Malbolge normalisé, en effectuant les étapes suivantes pour chaque personnage:
Remplacez les caractères de la chaîne
*jpovi</
par le caractère correspondant dans'(>DQbcu
. (C'est-à-dire mapper*
vers'
,j
vers(
, etc.).Soustrayez ensuite la position actuelle du compteur de programme (c'est-à-dire le nombre de caractères avant celui en cours) du code ASCII du caractère.
Si le code ASCII résultant est inférieur à 33, incrémentez-le de 94 et répétez jusqu'à ce qu'il soit au moins 33.
Ajoutez le caractère résultant à la sortie.
Règles
- Il s'agit d'un concours de code-golf ; la réponse la plus courte l'emporte.
- Pas de failles standard s'il vous plaît.
- Les méthodes d'E / S par défaut sont autorisées.
- L'entrée ne contiendra que les caractères
*jpovi</
.
*jpovi</
"?a: if ascii_code(temporary Malbolge representation) < 33: char := char + 94; goto a;
Réponses:
Gelée ,
2922 octetsEssayez-le en ligne!
Un lien monadique prenant une chaîne Jelly comme argument et renvoyant une chaîne Jelly.
Merci à @JonathanAllan pour avoir économisé 2 octets!
Explication
la source
..._J‘ịØṖḊ¤
enregistre un octet.Oị“%þV DCµ2® ‘_JịØṖḊ¤
Python 3 , 82 octets
Essayez-le en ligne!
Merci à @Joel d'avoir remplacé les vilains caractères non imprimables du bytestring par des caractères imprimables.
Je cherche une chaîne de mod à remplacer
"*jpovi<".find(c)
, mais je ne pense pas qu'il y en ait une plus courte, et une recherche par force brute non exhaustive n'a rien trouvé jusqu'à présent.82 octets
Essayez-le en ligne!
la source
b"de{#0ABT"["*jpovi<".find(c)]
si vous avez un programme pour cela.x%84%15%7
pour la moitié droite de la cartographie, mais je pense que je peux recycler un code que j'ai écrit pour un autre défi pour la recherche , y compris*
et/
termes.%
et*
(//
en Python 3 n'en vaut probablement pas la peine.) En fait, rien n'a correspondu aux 6 premières des 7 valeurs. J'espérais que cela fonctionnerait parce qu'une estimation d'entropie approximative indique qu'il y a probablement suffisamment d'expressions se terminant par% 7`, mais c'est proche. Et peut-être que ces chaînes donnent des sorties qui sont loin d'être uniformément réparties, d'autant plus qu'une fois que deux entrées se réduisent à la même valeur, aucune autre opération ne peut les séparer. Ce que j'essaie est encore bien trop stupide pour rechercher l'expression plus large, mais si vous avez des idées, allez-y.map(ord, "*jpovi<")
. Si la sortie ne préserve pas l'ordre de la plupart des entrées (c'est-àf(m)>=f(n)
- dire sim>=n
), certaines constantes soigneusement conçues pour%
et*
sont probablement nécessaires et une recherche par force brute est peu susceptible de donner un résultat positif.Malbolge Unshackled (variante de rotation de 20 trits), 7 784e6 octets
La taille de cette réponse dépasse la taille maximale du programme (eh), donc le code se trouve dans mon référentiel GitHub .
Comment faire ça?
Cela pourrait être une partie délicate, car un interprète naïf de Haskell prendra des âges pour exécuter cela. TIO a un interprète Malbogle Unshackled décent, mais malheureusement je ne pourrai pas l'utiliser (limitations).
Le meilleur que j'ai pu trouver est la variante de largeur de rotation fixe de 20 trits, qui fonctionne très bien, convertissant 0,5 caractère par seconde .
Pour rendre l'interprète un peu plus rapide, j'ai supprimé toutes les vérifications de l'interpréteur Malbolge Unshackled de Matthias Lutter.
Ma version modifiée peut fonctionner environ 6,3% plus rapidement.
Ça marche!
la source
Python 3 ,
8483 octetsEssayez-le en ligne!
Il s'agit principalement d'un problème mathématique lié à la simplification du calcul, plus un peu de golf après avoir effectué les calculs. La version non golfée du code est présentée ci-dessous.
Version non golfée, non récursive
Essayez-le en ligne!
la source
JavaScript (Node.js) , 69 octets
Essayez-le en ligne!
Comment?
la source
Perl 6 ,
65 5553 octetsEssayez-le en ligne!
Utilise l'astuce mod 11 de la réponse d' Arnaud
la source
05AB1E ,
32312322 octets-8 octets créant un portage de la réponse Jelly de NickKennedy , alors assurez-vous de lui donner une note positive !!
-1 octet grâce à @Grimy.
Sorties sous forme de liste de caractères.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce 05AB1E (section Comment compresser les grands entiers? Et Comment compresser les listes d'entiers? ) Pour comprendre pourquoi
•4¡ˆ¶ü]₁η₃•
est82767635194143615015
et•4¡ˆ¶ü]₁η₃•₃в
est[1,36,30,85,0,67,66,8,49,7,0]
.la source
•1ÃQWý₂Ýδ9•86в
->•4¡ˆ¶ü]₁η₃•₃в
Perl 5 (
-p
),53, 51 octetséconomiser 2 octets, en utilisant
de{#0ABT
au lieu de de'(>DQbcu
sorte que61
plus nécessaireTIO
la première réponse était
TIO
la source
Japt ,
2423 octetsPort of Nick's Jelly solution
Essayez-le
la source
Retina 0.8.2 , 50 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Effectuez la translittération comme décrit dans la question.
p
(décrit ci-dessous) eto
ont une signification particulière pourT
ransliter donc ils doivent être cités.Énumérez chaque caractère sur sa propre ligne, précédé d'un certain nombre d'espaces selon son index, c'est-à-dire ce que serait le compteur de programme.
Décrémentez de manière cyclique et répétée le dernier caractère de chaque ligne, en supprimant à chaque fois l'espace précédent, jusqu'à ce que tous les espaces aient été supprimés. Le
p
signifie ASCII imprimable-~
, c'est -à- dire que nous voulons que le!
mappage~
soit translittéré en premier, puis le_
provoque la.¶
suppression de l'espace dans la correspondance , tandis que les caractères restants sont translittérés un code de caractère à la fois.Regroupez tous les personnages.
la source
Fusain , 23 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Port de la réponse JavaScript de @ Arnauld. Explication:
la source
C # (Visual C # Interactive Compiler) , 62 octets
Essayez-le en ligne!
Port de @Arnaulds Réponse JavaScript. Un si les rares cas où C # est plus court!
la source
Haskell , 135 octets
Essayez-le en ligne!
la source