Le César de César est un chiffre de substitution très simple où chaque lettre est décalée d'un décalage fixe (boucle autour de Z vers A). De même, nous pouvons également utiliser un chiffre César pour l'ensemble des caractères ASCII imprimables. Ce sont les 95 caractères des points de code 0x20 à 0x7E. Pour un décalage donné d
, nous mappons le point de code C
sur
(C - 32 + d) % 95 + 32
qui décale tous les caractères par un d
et fait une boucle dans l' ~
espace. Les caractères en dehors de cette plage (les caractères de contrôle comme les sauts de ligne, les tabulations et les caractères en dehors de la plage ASCII) ne sont pas affectés.
Vous devez écrire deux programmes ou fonctions (potentiellement dans des langues différentes), qui prennent un décalage d
et une chaîne. Le premier programme doit retourner ou imprimer le chiffre César de l'entrée. Le deuxième programme devrait retourner ou imprimer le chiffre César inverse (c'est-à-dire en utilisant l'offset -d
). Vous pouvez saisir des données via STDIN, un argument de ligne de commande ou un argument de fonction.
Pour rendre les choses plus intéressantes, le deuxième programme doit être un chiffre César du premier programme. Autrement dit, si vous passez le code source du premier programme à lui-même, pour certains décalages non nuls d
, la sortie doit être le deuxième programme.
Les deux programmes, ainsi que les chaînes d'entrée, ne doivent contenir que des caractères ASCII imprimables, des nouvelles lignes et des tabulations. Aucun programme ne peut contenir de commentaires ou lire son propre code source, nom de fichier ou ID de processus directement ou indirectement.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte. Étant donné que les deux programmes doivent avoir la même taille, vous ne devez le compter qu'une seule fois.
la source
Python 2, 147
Clairement, je n'ai pas trop réfléchi à celui-ci, car ce serait inutile en Python. Il y a simplement deux programmes séparés, celui inutilisé étant enfermé dans une chaîne.
Le décalage entre les deux programmes est de 39.
Vers l'avant
Définit la fonction Z acceptant une chaîne Unicode et un décalage.
Inverse
Définit la fonction que j'accepte une chaîne Unicode et un décalage.
la source
Python 3 - 248 octets
Mon objectif était de le faire en tant que monoplace Python. Succès de l'objectif, mais maintenant je ne peux pas être dérangé par le golf.
Crypter:
Déchiffrer:
Modifier: corrigé pour ne pas affecter les caractères en dehors de la plage ASCII imprimable
Le décalage de crypter à décrypter est de 20. À utiliser en entrant d'abord le décalage, puis la chaîne,
Explication
Les transformations suivantes sont la clé:
Le premier autorise l'utilisation de
or
, tandis que le second ignore une chaîne par des points-virgules.Notez que
"".__doc__[2]
renvoie la chaîner
(tirée destr
). Cela est nécessaire pour empêcher la chaîne entre guillemets simples dans le programme de déchiffrement d'avoir des guillemets parasites au milieu.la source
Rubis,
131125 octetsVoici ma propre soumission (que j'avais écrite plus tôt comme preuve de concept, mais j'ai réussi à violer mes propres règles d'une manière ou d'une autre). Je ne réutilise aucun code entre les deux soumissions (je veux que vous battiez cela, après tout), mais à la place, il se compose de deux lignes, dont l'une est transformée en chaîne avec du charabia.
Cypher avant:
Chiffre inverse:
Les deux extraits définissent une fonction (appelée
Y
dans la première etJ
dans la seconde), qui prend un entier et une chaîne et imprime la chaîne transformée dans STDOUT. Le décalage entre les deux morceaux de code est40
.la source
oOo CODE ,
750744 octets, tout le code utilisé dans les deux programmesTrop long mais c'est probablement le bon outil pour faire ça ...
Crypter:
Déchiffrer:
Traductions de Brainfuck:
oOo CODE est une variante de Brainfuck où seul le cas des lettres compte.
Il prend le premier octet et utilise son code de caractère comme
d
(donc une nouvelle ligne signifie d = 10). Le reste de l'entrée est la chaîne. EOF est 0.la source
GolfScript,
9564 octets, tout le code utilisé dans les deux programmesCrypter:
Déchiffrer:
Format d'entrée:
Explication
Déchiffrer:
Crypter:
la source
Javascript (ES7 Draft) -
167165 octetsEmprunt de l'utilisation des chaînes par @feersum et de l'utilisation des points-virgules par @MartinButtner;)
Crypter:
Déchiffrer:
Décalage à utiliser: 55
la source
or <empty string> and <function>
plutôt que seulementor <function>
.> <> (Poisson) , 467 octets
Crypter:
Déchiffrer:
Les deux programmes sont décalés de 3 et prennent la forme:
Le décalage doit être de 2 chiffres, donc un décalage de 5 doit être entré comme
05
.Il s'agit d'une longue soumission, mais presque tous les caractères non remplisseurs sont utilisés par les deux programmes . Il y a beaucoup d'espaces qui peuvent certainement être joués au golf, mais je pensais que le programme serait plus intéressant de cette façon.
Cette image met en évidence les caractères utilisés par les deux programmes.
Explication
La construction principale qui rend cela possible est
_{} -> b~!
, qui permet de sauter arbitrairement des caractères dans le programme de déchiffrement. Comment?Dans l'ensemble, le programme de cryptage ne fait rien, mais le programme de décryptage ignore l'instruction suivante. Cela peut ensuite être étendu à
_{}! -> b~!$
, ce qui permet à la place de sauter arbitrairement des caractères dans le programme de chiffrement .En dehors de cela, la plupart du reste du programme consiste à pousser les numéros, à effectuer des opérations sur ces numéros, puis à trouver des moyens de les faire apparaître. Par exemple, une construction utile est
~~ -> ""
, qui affiche deux valeurs pour le programme de chiffrement, mais ne pousse rien dans le programme de déchiffrement.> <>, 149 octets
Voici la version la moins intéressante, qui utilise le fait que les instructions non transmises sont en fait des commentaires en langage 2D.
Crypter:
Déchiffrer:
Les deux programmes sont décalés de 84 et prennent les entrées de la même manière que ci-dessus. La première instruction décide quelle moitié du programme exécuter, avec
i
(entrée) maintenant le flux du programme vers la droite dans le programme de cryptage et^
redirigeant le flux du programme vers le haut (en boucle et en revenant par le bas) dans le programme de décryptage.Explication
Pour la moitié pertinente du programme de cryptage (le programme de décryptage est similaire):
Outil de codage
Ce n'est pas lié au reste du post ci-dessus, mais je pensais que je posterais ceci parce que je dois l'utiliser: P
la source
Perl - 131
Il prend l'entrée des arguments de ligne de commande.
Le décaler de 26 donne l'autre:
la source