Cubically est trop fastidieux pour écrire manuellement un code. Votre défi est de traduire le texte ASCII en code source Cubically.
Cubiquement
Ce n'est qu'un rapide aperçu de Cubically; le référentiel a un guide et des détails plus complets.
Cubically est un esolang que j'ai écrit il y a quelque temps, conçu pour être pénible à utiliser. Il contient deux morceaux de mémoire, un Rubik's Cube 3x3x3 et un registre appelé "bloc-notes".
Mémoire
Le Rubik's Cube interne est initialisé comme ceci:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Après avoir effectué un virage à 90 ° dans le sens horaire sur la face droite, le cube mémoire ressemblerait à ceci:
002
002
002
111225333044
111225333044
111225333044
554
554
554
Commandes
Un caractère non entier définit la commande par défaut. Pour chaque entier avant que la commande par défaut ne soit à nouveau définie, la commande est exécutée avec cet entier. Par exemple, x524y312
exécuter la commande x
avec 5, puis avec 2, puis avec 4, puis exécuter la commande y
avec 3, puis avec 1, puis avec 2.
Les entiers utilisés par les commandes représentent des index de faces. Il en x0
serait de même x
pour la face UP (indexée 0). x1
se produirait x
sur la face GAUCHE (indexée à 1), et ainsi de suite.
L'exécution d'une commande avec 6
exécutera cette commande sur la valeur du bloc-notes. L'exécution d'une commande avec un entier supérieur à 6 entraînera une erreur.
Voici quelques exemples de commandes:
R1
- tournez la face DROITE dans le sens des aiguilles d'une montre de 90 ° pour que le cube interne ressemble au deuxième exemple ci-dessusR11
- tourner deux fois la face DROITE dans le sens des aiguilles d'une montre de 90 °, identique àR2
+0
- ajouter toutes les valeurs de la face UP au bloc-notes+000
- ajouter trois fois toutes les valeurs de la face UP au bloc-notes@6
- imprimer la face inexistante indexée en 6e (mémoire) en tant que caractère%4
- imprimer la somme de toutes les valeurs sur la face arrière sous forme d'entier
Une liste complète des commandes et de la syntaxe est disponible dans le référentiel .
Défi
Vous prendrez du texte ASCII en entrée et imprimerez un programme cubique en sortie.
Exemples (volés d' ici et ici ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Règles
- Votre programme peut ne pas contenir de dictionnaire contenant les traductions des 100 tests.
- Votre programme doit se terminer en moins de 180 secondes (aucun programme de force brute qui prend des semaines).
- Votre programme doit générer un code cubique valide qui se termine en moins de 180 secondes.
- Votre programme prendra la saisie via la saisie standard, sauf si vous voulez jouer avec le pilote de test.
- Votre programme doit produire du code cubique qui ne produit rien d'autre que l'entrée de votre programme lors de son exécution. ಠ_ಠ
Notation
Vous testerez votre programme avec 100 chaînes pseudo-aléatoires de longueur pseudo-aléatoire. (Un script bash est fourni qui fera cela pour vous.) Voici comment vous allez marquer:
- Soit la longueur du programme de sortie égale à o .
- Soit la longueur de la chaîne d'entrée l .
- Soit une variable r le résultat de o / l .
- Trouvez la moyenne de tous les r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Testez avec ce script. Vous devrez le modifier comme indiqué. Notez que le programme ne vérifie pas si la sortie est un code cubique valide. Si vous ne pouvez pas faire fonctionner le script, je peux vous aider. Ping moi dans la salle de chat Cubically .
@6
- imprimer la somme de la face inexistante indexée 6 (bloc-notes) en tant que caractère" serait plus précis? Est-ce %4
aussi une somme? Les +
commandes font-elles face à la somme puis ajoutent cela à toutes les valeurs ou ...?
@6
/ %6
imprime directement la valeur du bloc-notes sous forme de caractère / entier. @x
/ %x
(où x est une face existante) ajoute toutes les valeurs sur la x
face -indexée et imprime la somme sous forme de caractère / entier. +
ajoute toutes les valeurs de la face spécifiée au registre.