Motivación
En este desafío, su tarea consistía en multiplicar dos cadenas, esto naturalmente introduce una forma de sacar la raíz cuadrada de una cadena.
¿Como funciona?
Dada una cadena (por ejemplo pub
), lo primero que debe hacer es determinar el código ASCII para cada carácter:
"pub" -> [112, 117, 98]
A continuación, asigna estos códigos al rango [0..94]
restando 32
cada valor:
[112, 117, 98] -> [80, 85, 66]
Ahora necesita encontrar para cada valor su módulo raíz 95
(por ejemplo 40*40 % 95 = 80
, también podría elegir 55
):
[80, 85, 66] -> [40, 35, 16]
Y finalmente lo volverá a asignar al rango [32..126]
y lo convertirá de nuevo en una cadena:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
En efecto "HC0" ⊗ "HC0" = "pub"
como puede verificar con una solución del otro desafío aquí .
Los que están familiarizados con la aritmética modular. probablemente notaron que el módulo de raíz cuadrada 95
no siempre existe, por ejemplo, no hay raíz 2
. En tal caso, la raíz cuadrada de una cadena no está definida y su programa / función puede fallar, repetirse indefinidamente, etc.
Para su comodidad, aquí está la lista de caracteres que tienen una raíz cuadrada (el primero es un espacio):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Reglas
- Escribirás un programa / función que tome una cadena (o lista de caracteres) como argumento y devuelva cualquier raíz cuadrada si existe
- Puede suponer que la entrada siempre tiene una raíz cuadrada
- La entrada puede consistir en una cadena vacía
- La entrada estará en el rango imprimible (
[32..126]
) - El resultado se imprime en la consola o devuelve una cadena si existe la raíz cuadrada
- En caso de que la raíz cuadrada no exista, el comportamiento de su programa / función se deja sin definir
- Si elige imprimir la raíz en la consola, las líneas nuevas o espacios en blanco finales están bien
Casos de prueba
Tenga en cuenta que estas no son necesariamente las únicas soluciones:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(ese es el rango imprimible), es un error tipográfico, lo siento.