Inspirado por isso desafio (obrigado @cairdcoinheringaahing pelo título!), Sua tarefa é pegar duas seqüências ASCII imprimíveis e multiplicá-las por elementos com as seguintes regras.
Como funciona?
Dadas duas seqüências de caracteres (por exemplo split
e isbn
), você primeiro truncará a mais longa, de forma que elas tenham o mesmo comprimento e, em seguida, determine seus códigos ASCII :
split -> spli -> [115, 112, 108, 105]
isbn -> isbn -> [105, 115, 98, 110]
O próximo passo será mapeá-los para o intervalo [0..94]
, subtraindo 32
cada código:
[115, 112, 108, 105] -> [83, 80, 76, 73]
[105, 115, 98, 110] -> [73, 83, 66, 78]
Agora você os multiplicará no módulo de elementos 95
(para permanecer no intervalo imprimível):
[83, 80, 76, 73] ⊗ [73, 83, 66, 78] -> [74, 85, 76, 89]
Adicione 32
para voltar ao intervalo [32..126]
:
[74, 85, 76, 89] -> [106, 117, 108, 121]
E a etapa final é mapeá-los de volta para caracteres ASCII:
[106, 117, 108, 121] -> "july"
Regras
- Você escreverá um programa / função que implementa as etapas descritas em duas seqüências e imprime ou retorna a sequência resultante
- O formato de entrada é flexível: você pode pegar duas strings, uma tupla de strings, uma lista de strings etc.
- A entrada pode consistir em uma ou duas cadeias vazias
- A entrada terá caracteres no intervalo imprimível (
[32..126]
) - A saída é impressa no console ou você retorna uma sequência
- É permitido que a saída tenha espaços em branco à direita
Casos de teste
"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>"
Nota : As aspas são apenas para facilitar a leitura, no sexto caso de teste que usei em '
vez de "
.
abc, def -> [['a', 'b', 'c'], ['d', 'e', 'f']]