Motivação
Em deste desafio a sua tarefa era multiplicar duas cordas, isso naturalmente introduz uma maneira de tirar a raiz quadrada de um string.
Como funciona?
Dada uma sequência (por exemplo pub
), a primeira coisa que você precisa fazer é determinar o código ASCII para cada caractere:
"pub" -> [112, 117, 98]
Em seguida, você mapeia esses códigos para o intervalo [0..94]
subtraindo 32
cada valor:
[112, 117, 98] -> [80, 85, 66]
Agora você precisa encontrar para cada valor seu módulo raiz 95
(por exemplo 40*40 % 95 = 80
, você também pode escolher 55
):
[80, 85, 66] -> [40, 35, 16]
E finalmente, você o mapeará de volta para o intervalo [32..126]
e o converterá em uma sequência de caracteres:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
De fato, "HC0" ⊗ "HC0" = "pub"
como você pode verificar com uma solução do outro desafio aqui .
Os familiarizados com a aritmética modular provavelmente notaram que o módulo da raiz quadrada 95
nem sempre existe, por exemplo, não existe raiz para isso 2
. Nesse caso, a raiz quadrada de uma string não é definida e seu programa / função pode falhar, executar um loop indefinidamente etc.
Para sua conveniência, aqui está a lista de caracteres que têm uma raiz quadrada (a primeira é um espaço):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Regras
- Você escreverá um programa / função que usa uma string (ou lista de caracteres) como argumento e retorna qualquer raiz quadrada, se existir
- Você pode supor que a entrada sempre tenha uma raiz quadrada
- A entrada pode consistir em uma sequência vazia
- A entrada estará no intervalo imprimível (
[32..126]
) - A saída é impressa no console ou você retorna uma sequência se a raiz quadrada existir
- Caso a raiz quadrada não exista, o comportamento do seu programa / função é deixado indefinido
- Se você optar por imprimir a raiz no console, as novas linhas ou espaços em branco serão excelentes
Casos de teste
Observe que essas não são necessariamente as únicas soluções:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(esse é o intervalo imprimível), isso é um erro de digitação - desculpe por isso.