แรงจูงใจ
ในความท้าทายนี้งานของคุณคือการคูณสองสายการทำเช่นนี้เป็นการแนะนำวิธีการใช้สแควร์รูทของสตริง
มันทำงานยังไง?
รับสตริง (ตัวอย่างpub) สิ่งแรกที่คุณต้องทำคือการกำหนดรหัส ASCIIสำหรับตัวละครแต่ละตัว:
"pub" -> [112, 117, 98]
ถัดไปคุณจับคู่รหัสเหล่านี้กับช่วง[0..94]โดยการลบ32แต่ละค่า:
[112, 117, 98] -> [80, 85, 66]
ตอนนี้คุณต้องค้นหาค่าแต่ละค่าของมันโมดูโล95(เช่น40*40 % 95 = 80คุณสามารถเลือกได้55):
[80, 85, 66] -> [40, 35, 16]
และในที่สุดคุณจะแมปมันกลับเป็นช่วง[32..126]และแปลงกลับเป็นสตริง:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
อันที่จริง"HC0" ⊗ "HC0" = "pub"ในขณะที่คุณสามารถตรวจสอบกับการแก้ปัญหาจากความท้าทายอื่น ๆที่นี่
คนที่คุ้นเคยกับการคำนวณแบบแยกส่วนอาจสังเกตว่ามอดูโลรากที่สอง95นั้นไม่มีอยู่เสมอตัวอย่างเช่นไม่มีรู2ท ในกรณีเช่นนี้รากที่สองของสตริงจะไม่ถูกกำหนดและโปรแกรม / ฟังก์ชั่นของคุณอาจทำงานล้มเหลววนซ้ำไปเรื่อย ๆ
เพื่อความสะดวกของคุณนี่คือรายการตัวอักษรที่มีรากที่สอง (อันแรกคือช่องว่าง):
 !$%&)+03489:>CDGLMQVW]`bjlpqu
กฎระเบียบ
- คุณจะเขียนโปรแกรม / ฟังก์ชั่นที่รับสตริง (หรือรายการตัวอักษร) เป็นอาร์กิวเมนต์และส่งกลับสแควร์รูทใด ๆหากมีอยู่
 - คุณอาจสมมติว่าอินพุตมีรากที่สองเสมอ
 - อินพุตอาจประกอบด้วยสตริงว่าง
 - อินพุตจะอยู่ในช่วงที่สามารถพิมพ์ได้ ( 
[32..126]) - เอาต์พุตถูกพิมพ์ไปที่คอนโซลหรือคุณส่งคืนสตริงหากสแควร์รูทมีอยู่
 - ในกรณีที่ไม่มีรากที่สองพฤติกรรมของโปรแกรม / ฟังก์ชั่นของคุณจะถูกทิ้งไว้ไม่ได้กำหนด
 - หากคุณเลือกที่จะพิมพ์รูทไปยังบรรทัดใหม่ของการขึ้นบรรทัดใหม่หรือช่องว่างนั้นใช้ได้
 
กรณีทดสอบ
โปรดทราบว่าสิ่งเหล่านี้ไม่ได้เป็นทางออกที่จำเป็นเท่านั้น:
''              -> ''
'pub'           -> 'HC0'
'pull!'         -> 'HC33!'
'M>>M'          -> '>MM>'
'49'            -> '4%'
'64'            -> undefined
'Hello, World!' -> undefined
          0-94(นั่นคือช่วงที่พิมพ์ได้) นั่นเป็นคำที่พิมพ์ผิด - ขอโทษด้วย