Motivasyon
Gelen bu meydan senin görevin bu doğal bir dize karekökünü almak için bir yol sunar, iki dizeyi çoğalmaya oldu.
O nasıl çalışır?
Bir dize (örneğin pub
) yapmanız gereken ilk şey, her karakter için ASCII kodunu belirlemektir :
"pub" -> [112, 117, 98]
Daha sonra , her bir değeri [0..94]
çıkararak bu kodları aralıkla eşlersiniz 32
:
[112, 117, 98] -> [80, 85, 66]
Şimdi her bir değer için kök modulo'unu bulmanız gerekir 95
(örneğin 40*40 % 95 = 80
, ayrıca seçebilirsiniz 55
):
[80, 85, 66] -> [40, 35, 16]
Ve son olarak, onu tekrar aralığa eşleyecek [32..126]
ve bir dizeye geri dönüştüreceksiniz:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
Nitekim "HC0" ⊗ "HC0" = "pub"
diğer meydan gelen bir solüsyon ile doğrulayabilir olarak burada .
Modüler aritmetiğe aşina olanlar muhtemelen kare kök modulo'nun 95
her zaman mevcut olmadığını fark etmişlerdir, örneğin kök yoktur 2
. Böyle bir durumda, bir dizenin karekökü tanımlanmamıştır ve programınız / fonksiyonunuz çökebilir, süresiz döngü yapabilir.
Size kolaylık sağlamak için, karekökü olan karakterlerin listesi (birincisi boşluktur):
!$%&)+03489:>CDGLMQVW]`bjlpqu
kurallar
- Bir dizeyi (veya karakter listesini) bağımsız değişken olarak alan ve varsa herhangi bir karekökü döndüren bir program / işlev yazacaksınız.
- Girdinin her zaman bir kare kökü olduğunu varsayabilirsiniz.
- Giriş boş bir dizeden oluşabilir
- Giriş yazdırılabilir aralıkta olacaktır (
[32..126]
) - Çıktı konsola yazdırılır veya kare kök varsa bir dize döndürürsünüz
- Karekök yoksa, programınızın / fonksiyonunuzun davranışı tanımlanmamış olarak kalır
- Kökleri konsola yazdırmayı seçerseniz satır sonları veya boşluklar iyi
Test senaryoları
Bunların mutlaka tek çözüm olmadığını unutmayın:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(yazdırılabilir aralık), bu bir yazım hatası - bunun için üzgünüm.