Écrivez un programme qui prend deux lignes d'entrée et utilise la première comme une phrase clé pour crypter la seconde selon la technique de cryptage Playfair.
Wikipedia décrit le cryptage Playfair en détail , mais pour éviter toute ambiguïté, voici un bref résumé:
1. Générez un tableau clé:
Remplacez toutes les occurrences de J
dans la phrase clé par I
, puis supprimez tous les caractères non alphabétiques et les caractères répétés. Insérez dans une table de cryptage 5 × 5, remplissant les cellules restantes avec le reste de l'alphabet (sauf J
; nous n'aimons pas J
).
Exemple:
S T A C K
O V E R F
Stack Overflow --> STACKOVERFLW --> L W B D G
H I M N P
Q U X Y Z
2. Préparez le message à chiffrer
Remplacez-les J
par un I
, supprimez tous les caractères non alphabétiques et divisez-les en paires, en utilisant un X
pour séparer deux fois les paires contenant la même lettre. Si vous vous retrouvez avec un nombre impair de lettres, ajoutez X
à la fin. (Note: numéraux doivent être précisées en pleine - ONE
, TWO
, THREE
, etc. - mais vous pouvez supposer cela a déjà été fait pour vous.)
Exemple:
In:
The cat crept into the crypt, crapped, and crept out again.
Out:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
3. Cryptage
Chiffrez chaque paire de lettres à tour de rôle. S'ils se trouvent dans des lignes et des colonnes différentes de la table des clés, remplacez chacun par la lettre de la même ligne dans la colonne où se trouve l'autre lettre (par exemple, VM
⇒ EI
, LZ
⇒ GQ
). S'ils sont dans la même ligne (ou colonne), choisissez les deux caractères immédiatement à droite (ou en dessous), en les enroulant si nécessaire (par exemple, OE
⇒ VR
, ZG
⇒ KP
).
Exemple:
In:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
Out:
SI RA CA RD FM VU IC VS MO RD ZN AK EC MZ MF BC YN RD FM SV TV KB TM MY
La chaîne produite par ce processus est le message chiffré, que votre programme doit sortir.
Règles:
- Le texte et la clé d'entrée peuvent être obtenus à partir d'
stdin
arguments de ligne de commande ou d'autres sources similaires. L'entrée codée en dur n'est pas autorisée. - Votre programme doit accepter les majuscules et les minuscules pour la phrase de passe et le message.
- La sortie chiffrée peut être en majuscule ou en minuscule.
- Votre programme doit accepter des phrases clés d'au moins 64 caractères et des textes de message d'au moins 16 Ko.
- Vous n'êtes pas obligé de gérer les entrées non ASCII.
- Vous pouvez ignorer la possibilité que la paire de lettres
XX
se produise pendant le cryptage. - Il n'est pas nécessaire d'ajouter des espaces à la sortie du programme.
- Votre réponse doit inclure un exemple de message, de phrase clé et de sortie chiffrée produite par votre programme.
- Il s'agit d'un défi de golf de code, donc la réponse avec le code le plus court (en octets) gagnera.
REMARQUE: N'oubliez pas que vous ne devez couper les lettres consécutives que si elles apparaissent dans la même paire . Ainsi, par exemple,
MASSACHUSETTS
devrait être chiffré commeMA SX SA CH US ET TS
- le doubleS
doit être divisé, mais pas le doubleT
.
J
" Avez-vous des sentiments similaires à propos de l'APL?