Inspiré par ce défi (merci @cairdcoinheringaahing pour le titre!), Votre tâche consiste à prendre deux chaînes ASCII imprimables et à les multiplier élément par élément avec les règles suivantes.
Comment ça marche?
Étant donné deux chaînes (par exemple split
et isbn
), vous allez d'abord tronquer la plus longue de sorte qu'elles aient une longueur égale, puis déterminer leurs codes ASCII :
split -> spli -> [115, 112, 108, 105]
isbn -> isbn -> [105, 115, 98, 110]
La prochaine étape consistera à les mapper à la plage [0..94]
en soustrayant 32
chaque code:
[115, 112, 108, 105] -> [83, 80, 76, 73]
[105, 115, 98, 110] -> [73, 83, 66, 78]
Vous allez maintenant les multiplier par élément modulo 95
(pour rester dans la plage imprimable):
[83, 80, 76, 73] ⊗ [73, 83, 66, 78] -> [74, 85, 76, 89]
Ajoutez 32
pour revenir à la gamme [32..126]
:
[74, 85, 76, 89] -> [106, 117, 108, 121]
Et la dernière étape consiste à les mapper en caractères ASCII:
[106, 117, 108, 121] -> "july"
Règles
- Vous allez écrire un programme / fonction qui implémente les étapes décrites sur deux chaînes et imprime ou renvoie la chaîne résultante
- Le format d'entrée est flexible: vous pouvez prendre deux chaînes, un tuple de chaînes, une liste de chaînes, etc.
- L'entrée peut consister en une ou deux chaînes vides
- L'entrée sera constituée de caractères dans la plage imprimable (
[32..126]
) - La sortie est imprimée sur la console ou vous retournez une chaîne
- La sortie peut avoir des espaces de fin
Cas de test
"isbn", "split" -> "july"
"", "" -> ""
"", "I don't matter" -> ""
" ", "Me neither :(" -> " "
"but I do!", "!!!!!!!!!" -> "but I do!"
'quotes', '""""""' -> 'ck_iKg'
"wood", "hungry" -> "yarn"
"tray", "gzip" -> "jazz"
"industry", "bond" -> "drop"
"public", "toll" -> "fall"
"roll", "dublin" -> "ball"
"GX!", "GX!" -> "!!!"
"4 lll 4", "4 lll 4" -> "4 lll 4"
"M>>M", "M>>M" -> ">MM>"
Remarque : Les citations sont juste pour la lisibilité, dans le 6ème cas de test que j'ai utilisé à la '
place de "
.
abc, def -> [['a', 'b', 'c'], ['d', 'e', 'f']]