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