Motywacja
W tym wyzwaniu Twoim zadaniem było pomnożenie dwóch łańcuchów, co naturalnie wprowadza sposób na pierwiastek kwadratowy z łańcucha.
Jak to działa?
Biorąc pod uwagę ciąg znaków (na przykład pub
) pierwszą rzeczą, którą musisz zrobić, jest określenie kodu ASCII dla każdego znaku:
"pub" -> [112, 117, 98]
Następnie zamapuj te kody do zakresu [0..94]
, odejmując 32
każdą wartość:
[112, 117, 98] -> [80, 85, 66]
Teraz musisz znaleźć dla każdej wartości jego moduł główny 95
(np. 40*40 % 95 = 80
Możesz również wybrać 55
):
[80, 85, 66] -> [40, 35, 16]
I w końcu zamapujesz go z powrotem na zakres [32..126]
i przekonwertujesz z powrotem na ciąg:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
Rzeczywiście, "HC0" ⊗ "HC0" = "pub"
jak można to sprawdzić za pomocą rozwiązania z innego wyzwania tutaj .
Osoby zaznajomione z arytmetyką modułową prawdopodobnie zauważyły, że moduł pierwiastkowy z kwadratem 95
nie zawsze istnieje, na przykład nie ma pierwiastka 2
. W takim przypadku pierwiastek kwadratowy ciągu nie jest zdefiniowany, a Twój program / funkcja może ulec awarii, zapętlić się w nieskończoność itp.
Dla Twojej wygody, oto lista znaków, które mają pierwiastek kwadratowy (pierwszy to spacja):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Zasady
- Napisz program / funkcję, która pobiera ciąg (lub listę znaków) jako argument i zwraca dowolny pierwiastek kwadratowy, jeśli istnieje
- Możesz założyć, że dane wejściowe zawsze mają pierwiastek kwadratowy
- Dane wejściowe mogą składać się z pustego ciągu
- Dane wejściowe będą w zakresie do wydrukowania (
[32..126]
) - Dane wyjściowe są drukowane w konsoli lub zwracany jest ciąg znaków, jeśli istnieje pierwiastek kwadratowy
- Jeśli pierwiastek kwadratowy nie istnieje, zachowanie Twojego programu / funkcji pozostaje niezdefiniowane
- Jeśli zdecydujesz się wydrukować katalog główny na konsoli, końcowe znaki nowego wiersza lub białe znaki są w porządku
Przypadki testowe
Pamiętaj, że niekoniecznie są to jedyne rozwiązania:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(to jest zakres do wydruku), to literówka - przepraszam za to.