Motivation
Dans ce défi, votre tâche consistait à multiplier deux chaînes, ce qui introduit naturellement un moyen de prendre la racine carrée d'une chaîne.
Comment ça marche?
Étant donné une chaîne (par exemple pub
), la première chose que vous devez faire est de déterminer le code ASCII pour chaque caractère:
"pub" -> [112, 117, 98]
Ensuite, vous mappez ces codes à la plage [0..94]
en soustrayant 32
chaque valeur:
[112, 117, 98] -> [80, 85, 66]
Maintenant, vous devez trouver pour chaque valeur son module racine 95
(par exemple 40*40 % 95 = 80
, vous pouvez également choisir 55
):
[80, 85, 66] -> [40, 35, 16]
Et enfin, vous allez le mapper à la plage [32..126]
et le reconvertir en chaîne:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
En effet, "HC0" ⊗ "HC0" = "pub"
comme vous pouvez le vérifier avec une solution de l'autre défi ici .
Ceux qui connaissent l'arithmétique modulaire ont probablement remarqué que la racine carrée modulo 95
n'existe pas toujours, par exemple il n'y a pas de racine pour 2
. Dans un tel cas, la racine carrée d'une chaîne n'est pas définie et votre programme / fonction peut se bloquer, boucler indéfiniment, etc.
Pour votre commodité, voici la liste des caractères qui ont une racine carrée (la première est un espace):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Règles
- Vous écrirez un programme / fonction qui prend une chaîne (ou une liste de caractères) comme argument et renvoie toute racine carrée si elle existe
- Vous pouvez supposer que l'entrée a toujours une racine carrée
- L'entrée peut être constituée d'une chaîne vide
- L'entrée sera dans la plage imprimable (
[32..126]
) - La sortie est imprimée sur la console ou vous retournez une chaîne si la racine carrée existe
- Dans le cas où la racine carrée n'existe pas, le comportement de votre programme / fonction n'est pas défini
- Si vous choisissez d'imprimer la racine sur la console, les sauts de ligne ou les espaces blancs sont corrects
Cas de test
Notez que ce ne sont pas nécessairement les seules solutions:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(c'est la plage imprimable), c'est une faute de frappe - désolé.