Défi
Le défi consiste à chiffrer une chaîne donnée, en utilisant les règles spécifiées ci-dessous. La chaîne ne contiendra que des alphabets minuscules , des chiffres et / ou des espaces vides .
Équivalent d'un personnage
Maintenant, vous devez d'abord savoir comment trouver «l'équivalent» de chaque personnage.
Si le caractère est une consonne, c'est la façon de trouver son équivalent:
1) List all the consonants in alphabetical order
b c d f g h j k l m n p q r s t v w x y z
2) Get the position of the consonant you are finding the equivalent of.
3) The equivalent is the consonant at that position when starting from the end.
par exemple: «h» et «t» sont équivalents l'un de l'autre parce que «h», «t» sont respectivement en 6e position depuis le début et la fin.
La même procédure est suivie pour trouver l'équivalent de voyelles / chiffres. Vous listez toutes les voyelles ou les chiffres (à partir de 0) dans l'ordre et trouvez l'équivalent.
Ci-dessous, la liste des équivalents de tous les caractères:
b <-> z
c <-> y
d <-> x
f <-> w
g <-> v
h <-> t
j <-> s
k <-> r
l <-> q
m <-> p
n <-> n
a <-> u
e <-> o
i <-> i
0 <-> 9
1 <-> 8
2 <-> 7
3 <-> 6
4 <-> 5
Règles de cryptage
1) Vous commencez à vous déplacer de la gauche et allez vers la droite.
2) Si le caractère est une consonne / un chiffre, alors son équivalent est pris et s'il s'agit d'un espace vide, alors un espace vide est pris.
3) Si le personnage est une voyelle, vous prenez son équivalent et commencez à vous déplacer dans la direction opposée. Par exemple, si vous vous déplacez vers la droite et rencontrez une voyelle, cryptez ce caractère, puis passez au caractère non chiffré le plus à droite et commencez à chiffrer dans la direction gauche, et vice versa.
4) Vous ne devriez pas considérer deux fois un personnage dans la même position. Les étapes doivent être suivies jusqu'à ce que tous les caractères de l'entrée soient couverts.
5) Le nombre total de caractères dans l'entrée (y compris les espaces vides) doit être égal au nombre total de caractères dans la sortie.
Veuillez noter que les caractères cryptés apparaissent dans la sortie dans l'ordre dans lequel ils ont été cryptés.
Permettez-moi maintenant de crypter une chaîne pour vous.
String = "tre d1go3t is"
Moving left to right
"t" -> "h"
"r" -> "k"
"e" -> "o"
Vowel encountered. Now moving right to left.
"s" -> "j"
"i" -> "i"
Vowel encountered. Now moving left to right.
" " -> " "
"d" -> "x"
"1" -> "8"
"g" -> "v"
"o" -> "e"
Vowel encountered. Now moving right to left.
" " -> " "
"t" -> "h"
"3" -> "6"
Output -> "hkoji x8ve h6"
Exemples
"flyspy" -> "wqcjmc"
"hero" -> "toek"
"heroic" -> "toyike"
"ae" -> "uo"
"abe" -> "uoz"
"the space" -> "htoo jmuy"
"a d1g13t" -> "uh68v8x "
"we xi12" -> "fo78i d"
"this is a code" -> "htioj ixej uy "
Vous pouvez également choisir d'utiliser des alphabets majuscules au lieu de minuscules.
Notation
C'est le code-golf , donc le code le plus court gagne!
la source
Réponses:
JavaScript (Node.js) ,
173...166156...124123 octets-28 octets Merci Arnauld
Essayez-le en ligne!
Dans la première itération, le
String
sera changé enArray
, et les itérations suivantes continueront à être utiliséesArray
. Voilà!Approche originale (166 octets):
la source
&
n'a pas fonctionné pour certains chiffres mais a&&
fonctionné. Merci.q=="0"|+q
est en fait 1 octet plus court queq>" "&&1/q
.05AB1E , 22 octets
Essayez-le en ligne! ou comme suite de tests
Explication
la source
žhžMžN)UvćXJXíJ‡D?žMsåiR
était ce que je pensais pour l'amélioration, mais je ne peux pas couperXJXiJ
assez.DJsíJ
laquelle n'était pas très efficace non plus.C, 196 octets
Essayez-le en ligne!
la source
J , 132 octets
Essayez-le en ligne!
Un verbe explicite verbeux cette fois.
Explication:
c=.(u:97+i.26)
fait une liste azv=.'aeiou'
fait une liste de voyelles-.
supprime les voyelles de la liste des lettresd=.u:48+i.10
fait une liste de chiffresg=.;"0|.
un verbe utilitaire pour créer une liste de paires encadrées de symboles de remplacementa=.''
une liste pour stocker le résultatwhile.*#y do.a=.a,{.y rplc(g c),(g d),g v
tandis que la longueur de la liste est> 0, prenez un symbole, remplacez-le et ajoutez-le au résultaty=.|.^:({:a e.v)}.y
déposez un symbole du début de la liste et si le symbole est une voyelle, inversez la listeend.
termine lawhile
bouclea
renvoie le résultatla source
Propre ,
221206198190186178 178 octetsEssayez-le en ligne!
la source
Rétine , 78 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Échangez chaque personnage avec son équivalent.
Répétez l'opération pendant qu'il reste une voyelle.
Sortez le texte jusqu'à la voyelle.
Supprimez le texte jusqu'à la voyelle.
Inverse le texte restant. Lorsqu'il n'y a plus de voyelles, elles sont ensuite implicitement sorties, mais pour les besoins des cas de test, l'en-tête sort le texte à la fin de chaque ligne.
la source
Stax , 24 octets
Exécuter
Voici la représentation ascii du même programme.
Il traduit d'abord chaque classe de caractères, puis commence une boucle while. Dans la boucle, il sort le caractère suivant et inverse conditionnellement le reste de la chaîne si une voyelle est rencontrée.
la source