แรงจูงใจ
ในความท้าทายนี้งานของคุณคือการคูณสองสายการทำเช่นนี้เป็นการแนะนำวิธีการใช้สแควร์รูทของสตริง
มันทำงานยังไง?
รับสตริง (ตัวอย่าง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(นั่นคือช่วงที่พิมพ์ได้) นั่นเป็นคำที่พิมพ์ผิด - ขอโทษด้วย