แรงบันดาลใจจากความท้าทายนี้ (ขอบคุณ @cairdcoinheringaahing สำหรับชื่อเรื่อง!) งานของคุณคือการใช้สาย ASCII สองสายที่พิมพ์ได้และคูณองค์ประกอบด้วยกฎต่อไปนี้
มันทำงานยังไง?
รับสองสาย (ตัวอย่างsplitและisbn) คุณจะแรกตัดทอนให้ยาวขึ้นเพื่อให้มีความยาวเท่ากันจากนั้นกำหนดรหัส ASCIIของพวกเขา:
split -> spli -> [115, 112, 108, 105]
isbn  -> isbn -> [105, 115,  98, 110]
ขั้นตอนต่อไปคือการแมปไปยังช่วง[0..94]โดยการลบ32แต่ละรหัส:
[115, 112, 108, 105] -> [83, 80, 76, 73]
[105, 115,  98, 110] -> [73, 83, 66, 78]
ตอนนี้คุณจะคูณโมดูโลแบบองค์ประกอบ95(เพื่อให้อยู่ในช่วงที่พิมพ์ได้):
[83, 80, 76, 73] ⊗ [73, 83, 66, 78] -> [74, 85, 76, 89]
เพิ่ม32เพื่อกลับไปที่ช่วง[32..126]:
[74, 85, 76, 89] -> [106, 117, 108, 121]
และขั้นตอนสุดท้ายคือการแมปกลับไปที่อักขระ ASCII:
[106, 117, 108, 121] -> "july"
กฎระเบียบ
- คุณจะเขียนโปรแกรม / ฟังก์ชั่นที่ใช้ขั้นตอนที่อธิบายไว้ในสองสายและพิมพ์หรือส่งคืนสตริงผลลัพธ์
- รูปแบบอินพุตมีความยืดหยุ่น: คุณสามารถรับได้สองสาย, tuple ของสตริง, รายการของสตริงเป็นต้น
- อินพุตอาจประกอบด้วยสตริงว่างหนึ่งหรือสองสตริง
- อินพุตจะเป็นอักขระในช่วงที่สามารถพิมพ์ได้ ( [32..126])
- เอาต์พุตถูกพิมพ์ไปที่คอนโซลหรือคุณส่งคืนสตริง
- การส่งออกได้รับอนุญาตให้มีช่องว่างต่อท้าย
กรณีทดสอบ
"isbn", "split"                  -> "july"
"", ""                           -> ""
"", "I don't matter"             -> ""
"             ", "Me neither :(" -> "             "
"but I do!", "!!!!!!!!!"         -> "but I do!"
'quotes', '""""""'               -> 'ck_iKg'
"wood", "hungry"                 -> "yarn"
"tray", "gzip"                   -> "jazz"
"industry", "bond"               -> "drop"
"public", "toll"                 -> "fall"
"roll", "dublin"                 -> "ball"
"GX!", "GX!"                     -> "!!!"
"4 lll 4", "4 lll 4"             -> "4 lll 4"
"M>>M", "M>>M"                   -> ">MM>"
หมายเหตุ : คำพูดนี้เป็นเพียงสำหรับการอ่านในกรณีทดสอบที่ 6 ผมใช้แทน'"
abc, def -> [['a', 'b', 'c'], ['d', 'e', 'f']]