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 splitet 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 32chaque 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 32pour 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']]