Le problème:
Deux agents secrets ennemis ont conçu une merveilleuse méthode de communication (pour vous)!
Voici comment fonctionne le processus de cryptage:
1) Prenez les équivalents ascii de chaque lettre. (Aucun espace, chiffre ou ponctuation n'est envoyé)
2) Pour chaque lettre du message, l'équivalent ascii de celle-ci et la lettre qui la suit (si elle existe, si ce n'est pas le cas, elle doit être considérée comme 0), sont multipliées (ce produit est stocké dans un tableau / liste) et additionné (ce nombre est également stocké dans une liste différente).
3) Les deux listes (des sommes et des produits) sont réunies (la liste des sommes, puis la liste des multiples, dans le même tableau) et transmises.
Vous devez écrire le plus petit programme capable d'inverser ce processus et de décrypter les messages envoyés dans ce format!
Exemples de paires d'entrée et de sortie:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
Il s'agit de code-golf , donc la plus petite solution en octets l'emporte.
Les messages d'erreur sont autorisés.
Votre programme peut recevoir soit une liste / un tableau unidimensionnel, soit une chaîne séparée par des virgules, si vous le spécifiez dans votre soumission. La valeur par défaut est un tableau / liste.
la source
Réponses:
Husk ,
76 octetsEssayez-le en ligne! Selon la documentation, le début
m
ne devrait pas être nécessaire, mais il semble y avoir un bogue actuellement.Edit: -1 octet grâce à Zgarb!
Explication:
la source
`-
possible≠
. Le comportement dec
ressemble en effet à un bug.brainfuck , 66 octets
L'entrée est la chaîne chiffrée. Suppose des cellules de taille infinie et 0 sur EOF.
Comment ça fonctionne:
la source
Haskell ,
4535 octetsEssayez-le en ligne!
Explication
fst.span(<245)
prend tous les nombres du début de la liste qui sont inférieurs à 245. Ce ne sont que les nombres de la partie de sommation, car la plus grande sommation possible estz + z = 122 + 122 = 244
et le plus petit produit possible estA * A = 65 * 65 = 4225
.scanr1(-)
prend la dernière valeur de la liste et l'utilise comme accumulateur initial. D'arrière en avant, chaque élément de la liste est soustrait par l'accumulateur actuel et le résultat est utilisé comme accumulateur suivant et ajouté à une liste.map toEnum
remplace chaque numéro de la liste par le caractère correspondant pour recréer la chaîne.la source
Gelée , 9 octets
Essayez-le en ligne! ou Vérifiez les deux cas de test.
Alternative.
Explication
la source
Python 2 , 72 octets
Essayez-le en ligne!
la source
Python 2 , 92 octets
Essayez-le en ligne!
la source
Gelée , 11 octets
Un lien monadique prenant une liste d'entiers et renvoyant une liste de caractères.
Essayez-le en ligne!
Comment?
la source
Pyt , 60 octets
Prend une liste d'entiers et renvoie une chaîne de caractères.
Explication:
Essayez-le en ligne!
la source
JavaScript (ES6), 80 octets
Afficher l'extrait de code
la source
Script VB -
7471 octets(J'ai réussi à réduire de 74 à 71 en utilisant While..Wend au lieu de Do..Loop)
L'entrée est dans un tableau a (), la sortie est dans la chaîne d
Explication
J'ai testé cela dans un fichier vbscript avec le code ci-dessus enveloppé comme une fonction:
la source
Nettoyer ,
96817877 octetszero
est le caractère nul.Je pourrais enregistrer un autre octet si Clean n'était pas aussi pointilleux sur les valeurs nulles littérales dans le fichier source.
Essayez-le en ligne!
la source
f=
.f=
c'est l'affectation la plus courte, donc une invocation minimale en ajoute deux de toute façon.Perl 5 , 39 + 2 (
-ap
) = 41 octetsEssayez-le en ligne!
la source
C (gcc) ,
9089 octetss+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Essayez-le en ligne!
la source
ML standard (MLton) ,
858482 octetsEssayez-le en ligne!
Non golfé:
Essayez-le en ligne!
la source
Perl 6 ,
43 3935 octetsEssaye-le
Testez-le (fait la même chose que ci-dessus)
Essaye-le
Essaye-le
Explication:
la source
05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
J
huile.ç
ne transforme pas implicitement la liste de caractères en chaîne. Si je comprends bien le problème, le programme doit produire une chaîne et non une liste de caractères.Japt, 12 octets
Il doit y avoir un moyen plus court pour obtenir la première moitié du tableau ...
Essayez-le
la source
Python 2 , 70 octets
Essayez-le en ligne!
la source