Défi: implémenter ROT-47 dans un code qui fonctionne à la fois lui-même et en tant que version ROT-47 de lui-même.
Notation:
Votre score est calculé en pourcentage des octets éligibles ROT-47 utilisés au total des deux versions du programme divisé par le nombre total d'octets (tous les caractères) des deux versions .
Un octet éligible ROT-47 utilisé est tout caractère qui serait converti par le chiffrement ROT-47 qui ne fait pas partie d'un commentaire ou ignoré par le compilateur / interprète. Par exemple, tout caractère d'un programme brainfuck qui ne l'est pas +-<>[],.
n'est pas considéré comme un octet utilisé et tout caractère d'un programme C incluant et après //
ou à l'intérieur /* */
n'est pas considéré comme un octet utilisé. Tous les symboles spéciaux dans APL ne sont pas considérés comme utilisés, de même que tous les caractères d'un programme Espaces (désolé).
Les égalités seront rompues par le programme avec le plus de votes positifs. S'il y a toujours égalité, le programme le plus court l'emporte.
Exemple de notation:
C: 62/64 = 96,875%
Notez qu'il y a un espace dans ce programme. Évidemment aussi, ce programme n'est pas une entrée valide car il ne compile même pas, mais je voulais montrer comment fonctionne la notation.
main(){printf("Hello World!");}
la source
>2:?WXLAC:?E7WQw6==@ (@C=5PQXjN
compilé?Réponses:
Ruby, 100% (74 caractères)
Entrée sur STDIN, sortie sur STDOUT.
La deuxième ligne est la première ligne ROT-47'd. Par conséquent, lorsque ROT-47ing l'ensemble du programme, il devient:
Ma stratégie repose ici sur le fait que:
V
est'
quand ROT-47'dj
est;
quand ROT-47'dPar conséquent, se
Vj=...Vj;
transforme en';l...';
, qui est essentiellement un no-opVj=...Vj;
peut prendre en charge l'exécution de n'importe quel code comme vous pourriez le faireVj=0;{INSERT ANY CODE};Vj;
, et cela deviendra'...';
lorsque ROT-47. Vous devez juste faire attention à ne pas l'utiliserV
dans ce code, car cela le briserait.Une logique similaire peut être utilisée à l'envers pour produire la seconde moitié (
jV
au lieu deVj
)la source
C - 54,6%
Lorsque ROT-47-traduit, nous obtenons
Les deux programmes compilent et ROT-47-traduit le premier argument:
la source
GolfScript, 120/120 octets = 100%
ou, dans ROT-47:
Aucun commentaire ou abus de chaîne. La commande non définie
LiUUbamUUZadckYLfZfZhcTbbZNYNT
(qui équivaut au reste du code dans ROT-47) est un no-op, mais elle est toujours exécutée par l'interpréteur, donc je pense qu'elle compte comme utilisée.C'était en fait un défi assez facile dans GolfScript. La principale difficulté était d'éviter le chiffre
1
, qui est mappé par ROT-47 dans la commande GolfScript`
. Les commandes.
,-
,,
,\
,[
,/
,]
et^
devaient également être évité, mais était assez facile dans ce cas, puisque la tâche requise aucun bâtiment de tableau.Prime:
Voici une quine GolfScript période-2 (c'est-à-dire un programme qui imprime un deuxième programme qui imprime à nouveau le premier programme) où les deux programmes sont les transformations ROT-47 l'une de l'autre:
Ce programme sort lui-même encodé ROT-47, ce qui donne un autre programme GolfScript:
qui, à son tour, sort également lui-même codé ROT-47, ce qui donne à nouveau le programme précédent. Ainsi, ce programme est également une quine tournante .
la source
A
dans brainfuck compterait dans le numérateur mais pas dans le dénominateur. Est-ce la même chose ou différent?LiUUbamUUZadckYLfZfZhcTbbZNYNT
est un identifiant valide dans GolfScript, et sera exécuté comme une commande. Cependant, ce n'est pas l'une des commandes intégrées , ni une signification par le programme, donc par défaut, il ne fait rien.python, 96,1% (?)
Selon votre définition, les chaînes comptent comme du code utilisé?
la source