Introduction:
J'ai des tas de chiffrements différents stockés dans un document que j'ai compilé quand j'étais enfant, j'ai choisi quelques-uns de ceux que je pensais être les mieux adaptés aux défis (pas trop triviaux et pas trop difficiles) et les ai transformés en défis. La plupart d'entre eux sont toujours dans le bac à sable, et je ne sais pas encore si je vais tous les poster, ou seulement quelques-uns. Voici le deuxième (le chiffre informatique a été le premier que j'ai publié).
Pour le chiffre Trifid (sans utiliser de mot clé), l'alphabet (et un caractère générique supplémentaire) est divisé en trois tableaux 3 par 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Un texte que nous voulons chiffrer est le premier caractère par caractère codé en nombres table-ligne-colonne. Par exemple, le texte this is a trifid cipher
devient:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Nous avons ensuite tout rangé par rang dans le tableau ci-dessus par groupes de trois:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
Et ceux-ci sont transformés en caractères en utilisant les mêmes tables:
s y y z a g d d y y u i q u z w u u h u y o
Une chose à noter, la longueur d'entrée doit être coprime à 3. Donc, si la longueur est un multiple de 3, nous ajoutons un ou deux espaces de fin pour que la longueur d'entrée ne soit plus un multiple de 3.
Défi:
Étant donné une chaîne sentence_to_encipher
, chiffrez-la comme décrit ci-dessus.
Vous n'avez qu'à chiffrer étant donné le sentence_to_encipher
, donc pas besoin de créer de programme / fonction de déchiffrement également. Cependant, je pourrais faire un défi de partie 2 pour le déchiffrement à l'avenir (même si j'ai le sentiment que c'est trop trivial / similaire au processus de chiffrement).
Règles du défi:
- Vous pouvez supposer que le
sentence_to_encipher
testament ne contiendra que des lettres et des espaces. - Vous pouvez utiliser des minuscules ou des majuscules (veuillez indiquer celui que vous avez utilisé dans votre réponse).
- Vous pouvez choisir d'ajouter un ou deux espaces de fin lorsque la longueur d'entrée est 3 pour ne plus en faire un multiple de 3.
- Les E / S sont flexibles. L'entrée et la sortie peuvent être une chaîne, une liste / un tableau / un flux de caractères, etc.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)
Réponses:
Gelée ,
292625 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸y
peut supprimer leµ
si c'est acceptable pour 24.Fusain , 39 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Python 2 ,
180176174 174165163 octetsEssayez-le en ligne!
L'entrée peut être supérieure ou inférieure. La sortie est en majuscule
la source
Pyth,
3433 octetsProgramme complet. L'entrée est attendue en minuscules, la sortie est un tableau de caractères. Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .
Solution alternative à 34 octets:
sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3
- plutôt que +27 et queue, utilise un.[03
pad avec 0 à la longueur 3. Peut être 33 si l'interlignes
est supprimé.Modifier: enregistré un octet en supprimant l'interlignage
s
car les tableaux de caractères sont une sortie validela source
Rubis ,
153145138131 131 octetsEssayez-le en ligne!
Une approche rapide et naïve, fonctionne avec du texte en minuscules. Entrées et sorties tableaux de caractères.
la source
Java (JDK) , 192 octets
Essayez-le en ligne!
Approche très naïve. Prend une minuscule
char[]
en entrée mais sort aString
.Explications
Crédits
la source
Integer.valueOf
versByte.valueOf
etR+=c<26?(char)(c+97):' ';
versR+=(char)(c<26?c+97:32);
R , 145 octets
Essayez-le en ligne!
E / S sous forme de chaînes; ajoute un espace. La répétition étrange de
[,3:1]
est parce que l'indexation de tableau naturel de R est quelque peu différente.la source
APL + WIN, 102 octets
Explication:
Exemple de capture d'écran du scénario de test:
la source
SAS, 305 octets
Un «oof» copieux pour cette monstruosité SAS. Il y a beaucoup de formatages de chaînes aléatoires que je pensais pouvoir éviter d'entrer dans ceci; Je suis sûr qu'il existe de meilleures façons de le faire.
La saisie est entrée sur les nouvelles lignes après le relevé des cartes, comme ceci:
Génère un ensemble de données contenant la sortie dans la variable
f
, ainsi qu'un ensemble de variables d'aide / valeurs de tableau.Non golfé / explication:
la source
JavaScript (Node.js) ,
146 141 139 139136 octetsLes E / S sont en minuscules.
Essayez-le en ligne!
Commenté
la source
(o=...,++i)%3
fonctionne à nouveau JS? Est-ce(o,i)
un tuple ou quelque chose, et les deux entiers internes sont convertis en leur modulo-3? En tant que développeur Java, cela me rend encore un peu confus(a,b)%c
. Belle réponse cependant! J'aime la façon dont vous convertissez tous les trois chiffres, puis supprimez les deux premiers octets nuls. +1 de moi.++i
.05AB1E , 25 octets
Comme personne n'a encore posté de réponse 05AB1E, j'ai pensé publier ma propre solution. Je vois maintenant que c'est très similaire à la réponse Jelly de @ Dennis ♦ , même si je l'ai trouvée indépendamment avant de poster le défi.
Entrée sous forme de chaîne, sortie sous forme de liste de caractères. Ajoute un espace si la longueur est divisible par 3.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Japt , 42 octets
Essayez-le en ligne!
Le cœur de cette réponse provient d'une réponse supprimée par Shaggy, mais il n'est jamais revenu pour gérer des entrées de longueur divisible par 3, il s'agit donc d'une version fixe .
Explication:
la source
C # (compilateur interactif Visual C #) , 178 octets
Essayez-le en ligne!
Moins de golf ... C'est toujours déroutant :)
la source