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. Mais voici le premier à commencer.
Un chiffrement informatique chiffrera le texte donné en groupes de caractères «aléatoires» d'un donné length
. Si un tel groupe contient un chiffre, il utilisera ce chiffre pour indexer dans son propre groupe le caractère chiffré. Si aucun chiffre n'est présent dans le groupe, cela signifie que le premier caractère est utilisé.
Par exemple, disons que nous voulons chiffrer le texte this is a computer cipher
avec une longueur donnée de 5
. Il s'agit d'une sortie potentielle (remarque: les nombres sont indexés 1 dans l'exemple ci-dessous):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Prenons quelques groupes comme exemples pour expliquer comment déchiffrer le groupe:
qu5dt
: Ce groupe contient un chiffre5
, de sorte que le 5 (1-indexé) caractère de ce groupe est le caractère utilisé pour le texte déchiffré:t
.hprit
: Ce groupe ne contient pas de chiffres, de sorte que le premier caractère de ce groupe est utilisé implicitement pour le texte déchiffré:h
.osyw2
: Ce groupe contient un chiffre2
, de sorte que le (1-indexé) 2e caractère de ce groupe est le caractère utilisé pour le texte déchiffré:s
.
Défi:
Étant donné un entier length
et une chaîne word_to_encipher
, sortez une chaîne chiffrée aléatoire comme décrit ci-dessus.
Vous n'avez qu'à chiffrer étant donné le length
et word_to_encipher
, donc pas besoin de créer un programme / fonction de déchiffrement également. Cependant, je pourrais faire un défi de partie 2 pour le déchiffrement à l'avenir.
Règles du défi:
- Vous pouvez supposer que le
length
sera dans la plage[3,9]
. - Vous pouvez supposer que le
word_to_encipher
test ne contiendra que des lettres. - Vous pouvez utiliser des minuscules ou des majuscules (veuillez indiquer celui que vous avez utilisé dans votre réponse).
- Vos sorties, chaque groupe et les positions des chiffres dans un groupe (le cas échéant) doivent être uniformément aléatoires . Ainsi, toutes les lettres aléatoires de l'alphabet ont les mêmes chances de se produire; la position de la lettre chiffrée dans chaque groupe a les mêmes chances de se produire; et la position du chiffre a les mêmes chances de se produire (sauf lorsqu'il s'agit du premier caractère et qu'aucun chiffre n'est présent; et il ne peut évidemment pas être à la même position que le caractère chiffré).
- Vous êtes également autorisé à utiliser des chiffres indexés de 0 au lieu de 1 indexés. Veuillez indiquer laquelle des deux vous avez utilisée dans votre réponse.
- Le chiffre
1
(ou0
lorsqu'il est indexé 0) ne sera jamais présent dans la sortie. Ceb1ndh
n'est donc pas un groupe valide pour chiffrer le caractère «b». Toutefois,b4tbw
est valable, où les4
chiffre leb
à la position 4 (1-indexé), et les autres personnagesb
,t
,w
sont aléatoires (qui par coïncidence contient également unb
). D' autres groupes possibles valides delength
5 à Chiffrer le caractère « b » sont:abcd2
,ab2de
,babbk
,hue5b
, 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 non-golfeur 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:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2
, ab2de
, babbk
tout de même? Est également b1akk
valide?
b1akk
moi, je dirais non. Le modifiera dans la description du défi pour clarifier. Si le premier caractère est le chiffre chiffré, aucun chiffre ne doit être présent.
"a??"
a 676 résultats possibles, mais "1a?"
, "?a1"
, "2?a"
, "?2a"
, a only104 résultats. Donc, si j'essaye de choisir un résultat parmi tous ces 780 résultats, la distribution de la "position de la lettre chiffrée" est 13: 1: 1, pas 1: 1: 1. Et je considérerais cela comme un fonctionnement "uniformément aléatoire".