หมายเหตุ: สปอยเลอร์เล็กน้อยสำหรับชาวอังคารกำลังท้าทาย อ่านล่วงหน้าด้วยความระมัดระวัง
อังคารเป็นนิยายวิทยาศาสตร์นวนิยายเกี่ยวกับมนุษย์อวกาศและนักพฤกษศาสตร์วิสามัญมาร์คมาร์กนีย์ผู้ซึ่งติดอยู่บนดาวอังคารโดยบังเอิญ เมื่อถึงจุดหนึ่งในหนังสือมาร์คพยายามสื่อสารกับ NASA แต่วิธีการสื่อสารเดียวที่พวกเขามีคือกล้อง Mark ส่งข้อความโดยการเขียนลงบนบัตรดัชนีและเนื่องจาก NASA สามารถหมุนกล้องได้ 360 องศา NASA จึงส่งคำตอบกลับโดยหันกล้องไปที่การ์ดที่มีป้ายกำกับว่า "ใช่" หรือ "ไม่"
เนื่องจากข้อมูลเพียงอย่างเดียวที่นาซ่าสามารถส่งได้คือทิศทางที่กล้องหันเข้าหามาร์คจึงมาพร้อมกับระบบที่พวกเขาสามารถชี้ไปที่การ์ดที่มีตัวอักษรตัวอักษรเพื่อพิมพ์ข้อความ แต่การใช้ตัวอักษร 'az' จะไม่สามารถทำได้ หากต้องการอ้างอิงหนังสือ (จากคำตอบนี้มีให้ที่ scifi.se):
เราจะต้องพูดเร็วกว่าใช่ / ไม่ใช่คำถามทุกครึ่งชั่วโมง กล้องสามารถหมุนได้ 360 องศาและฉันมีชิ้นส่วนเสาอากาศมากมาย ใช้เวลาในการทำตัวอักษร แต่ฉันไม่สามารถใช้ตัวอักษร A ถึง Z. ตัวอักษรยี่สิบหกบวกบัตรคำถามของฉันจะเป็นยี่สิบเจ็ดบัตรรอบแลนเดอร์ แต่ละอันจะได้ส่วนโค้งที่ 13 องศาเท่านั้น แม้ว่า JPL จะชี้กล้องอย่างสมบูรณ์แบบ แต่ก็มีโอกาสดีที่ฉันจะไม่รู้ว่าตัวอักษรนั้นหมายถึงอะไร
ดังนั้นฉันจะต้องใช้ ASCII นั่นเป็นวิธีที่คอมพิวเตอร์จัดการกับตัวละคร ตัวละครแต่ละตัวมีรหัสตัวเลขระหว่าง 0 ถึง 255 ค่าระหว่าง 0 ถึง 255 สามารถแสดงเป็นเลขฐานสิบหก 2 หลัก โดยให้เลขฐานสิบหกแก่ฉันพวกเขาสามารถส่งอักขระใด ๆ ที่พวกเขาชอบรวมถึงตัวเลขเครื่องหมายวรรคตอนและอื่น ๆ
...
ดังนั้นฉันจะทำบัตรสำหรับ 0 ถึง 9 และ A ถึง F ที่ทำให้ 16 บัตรเพื่อวางรอบกล้องรวมทั้งการ์ดคำถาม เจ็ดใบมีความหมายมากกว่า 21 องศาในแต่ละใบ ง่ายต่อการจัดการกับ
เป้าหมายของคุณในวันนี้ในฐานะหนึ่งในวิศวกรซอฟต์แวร์ชั้นนำของ NASA คือการเขียนโปรแกรมเพื่อเข้ารหัสมุมต่าง ๆ ของกล้อง ไพ่เจ็ดใบที่มาร์คมีให้สำหรับคุณที่จุดคือ (ตามลำดับ):
?0123456789ABCDEF
และแต่ละบัตรเหล่านี้คือ 21 องศาออกจากกันเพื่อที่จะหมุนกล้องจาก?
ไป0
คุณควรหมุนกล้อง 21 องศาและ2
จะ1
เป็น -21 องศา (ไม่ใช่21 อย่างแน่นอนแต่เราจะปัดให้เรียบง่ายขึ้น) ค่านี้ล้อมรอบดังนั้นจากF
ไปถึง3
คือ 105 องศา (5 รอบ 5 * 21 = 105) ซึ่งมีประสิทธิภาพมากกว่าการไป -252 เนื่องจากกล้องไม่ต้องเคลื่อนที่ไปไกล
นี่คือสิ่งที่โปรแกรมหรือฟังก์ชั่นของคุณต้องทำ
ใช้สตริงเป็นอินพุต เราจะเรียกสายนี้s เพื่อให้ง่ายเราจะบอกว่าการป้อนข้อมูลจะสามารถพิมพ์ได้ ASCII เท่านั้น สำหรับตัวอย่างของเราสมมุติว่าอินพุตนั้น
STATUS
แปลงอักขระแต่ละตัวให้เป็นตัวแทนเลขฐานสิบหก สิ่งนี้จะแปลง
STATUS
เป็น53 54 41 54 55 53
ไปพิมพ์หรือย้อนกลับในระดับที่ต่อเนื่องหันกล้องจะต้องทำเพื่อที่จะชี้ไปที่การ์ดแต่ละใบและกลับไปที่ "บัตรคำถาม" สำหรับตัวอย่างของเราสิ่งนี้จะเป็น:
6 * 21 = 126 (?-5) -2 * 21 = -42 (5-3) 2 * 21 = 42 (3-5) -1 * 21 = -21 (5-4) 0 * 21 = 0 (4-4) -3 * 21 = -63 (4-1) 4 * 21 = 84 (1-5) -1 * 21 = -21 (5-4) 1 * 21 = 21 (4-4) 0 * 21 = 0 (5-5) 0 * 21 = 0 (5-5) -2 * 21 = -42 (5-3) -4 * 21 = -84 (3-?)
หรือในรูปแบบอาร์เรย์:
[126, -42, 42, -21, 0, -63, 84, -21, 21, 0, 0, -42, -84]
โปรดทราบว่าคุณจะต้องหมุนน้อยที่สุดเท่าที่จะทำได้ ดังนั้นถ้าอินพุทคือNO
ซึ่งก็คือ4E 4F
คุณควรเอาท์พุท:
5 * 21 = 105
-7 * 21 = -147
7 * 21 = 147
-6 * 21 = -126
1 * 21 = 21
ค่อนข้างมากกว่า:
5 * 21 = 105
10 * 21 = 210
-10 * 21 = -210
11 * 21 = 231
-16 * 21 = -336
นี่คือตัวอย่างการทำงานเพิ่มเติม:
Input: CROPS?
ASCII: 43 52 4F 50 53 3F
Worked Example:
5 * 21 = 105
-1 * 21 = -21
2 * 21 = 42
-3 * 21 = -63
2 * 21 = 42
-6 * 21 = -126
7 * 21 = 147
-5 * 21 = -105
5 * 21 = 105
-2 * 21 = -42
0 * 21 = 0
-5 * 21 = -105
1 * 21 = 21
Result: [105 -21 42 -63 42 -126 147 -105 105 -42 0 -105 21]
Input: DDD
ASCII: 44 44 44
Worked Example:
5 * 21 = 105
0 * 21 = 0
0 * 21 = 0
0 * 21 = 0
0 * 21 = 0
0 * 21 = 0
-5 * 21 = -105
Result: [105, 0, 0, 0, 0, 0, -105]
Input: Hello world!
ASCII: 48 65 6c 6c 6f 20 77 6f 72 6c 64 21
Worked example:
5 * 21 = 105
4 * 21 = 84
-2 * 21 = -42
-1 * 21 = -21
1 * 21 = 21
6 * 21 = 126
-6 * 21 = -126
6 * 21 = 126
-6 * 21 = -126
-8 * 21 = -168
4 * 21 = 84
-2 * 21 = -42
7 * 21 = 147
0 * 21 = 0
-1 * 21 = -21
-8 * 21 = -168
-8 * 21 = -168
-5 * 21 = -105
4 * 21 = 84
6 * 21 = 126
-6 * 21 = -126
-2 * 21 = -42
-2 * 21 = -42
-1 * 21 = -21
-2 * 21 = -42
Result: [105 84 -42 -21 21 126 -126 126 -126 -168 84 -42 147 0 -21 -168 -168 -105 84 126 -126 -42 -42 -21 -42]
เนื่องจาก NASA ภาคภูมิใจในประสิทธิภาพเป้าหมายของคุณคือการเขียนรหัสที่สั้นที่สุดเท่าที่จะเป็นไปได้ ช่องโหว่มาตรฐานใช้ ตอนนี้พาเขากลับบ้าน!