Motivasi
Dalam tantangan ini, tugas Anda adalah mengalikan dua string, ini secara alami memperkenalkan cara untuk mengambil akar kuadrat dari string.
Bagaimana cara kerjanya?
Diberikan string (misalnya pub
) hal pertama yang perlu Anda lakukan, adalah menentukan kode ASCII untuk setiap karakter:
"pub" -> [112, 117, 98]
Selanjutnya Anda memetakan kode-kode ini ke kisaran [0..94]
dengan mengurangi 32
setiap nilai:
[112, 117, 98] -> [80, 85, 66]
Sekarang Anda perlu menemukan untuk setiap nilai modulo root-nya 95
(mis. 40*40 % 95 = 80
, Anda juga bisa memilih 55
):
[80, 85, 66] -> [40, 35, 16]
Dan akhirnya Anda akan memetakannya kembali ke rentang [32..126]
dan mengubahnya kembali menjadi string:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
Memang "HC0" ⊗ "HC0" = "pub"
Anda bisa memverifikasi dengan solusi dari tantangan lain di sini .
Yang akrab dengan aritmatika modular mungkin memperhatikan bahwa modulo root kuadrat 95
tidak selalu ada, misalnya tidak ada root untuk 2
. Dalam kasus seperti itu, akar kuadrat dari suatu string tidak didefinisikan dan program / fungsi Anda mungkin crash, loop tanpa batas dll.
Untuk kenyamanan Anda, inilah daftar karakter yang memiliki akar kuadrat (yang pertama adalah spasi):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Aturan
- Anda akan menulis sebuah program / fungsi yang mengambil string (atau daftar karakter) sebagai argumen dan mengembalikan setiap akar kuadrat jika ada
- Anda dapat berasumsi bahwa input selalu memiliki akar kuadrat
- Input dapat terdiri dari string kosong
- Input akan berada dalam kisaran yang dapat dicetak (
[32..126]
) - Outputnya dicetak ke konsol atau Anda mengembalikan string jika akar kuadrat ada
- Jika akar kuadrat tidak ada, perilaku program / fungsi Anda dibiarkan tidak terdefinisi
- Jika Anda memilih untuk mencetak root ke konsol, baris baru atau spasi putih tidak apa-apa
Uji kasus
Perhatikan bahwa ini bukan satu-satunya solusi:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(itu kisaran yang dapat dicetak), itu salah ketik - maaf tentang itu.