TL; DR:กำหนดอาร์เรย์ของตัวอักษรและหุ่นยนต์ในตำแหน่งเริ่มต้นของอาร์เรย์เขียนอัลกอริธึมที่สามารถอ่านสตริงที่มีการเคลื่อนไหว (
F
สำหรับ "ไปข้างหน้า"R
สำหรับ "หมุน 90 องศาขวา" และL
"หมุน 90 องศา left ") และคำนวณตำแหน่งสิ้นสุดของหุ่นยนต์ รายละเอียดเพิ่มเติมในข้อความที่สมบูรณ์
เรามีอุปกรณ์ที่ตั้งโปรแกรมได้ง่าย ๆ ที่บ้านสำหรับเด็ก ๆ : ยานพาหนะขนาดเล็กที่มีปุ่มเพื่อให้รถเดินไปข้างหน้าเลี้ยวซ้าย 90 องศาหรือเลี้ยวขวา 90 องศา สิ่งที่คล้ายกับสิ่งนี้:
เรายังมีแผ่นโฟมพร้อมตัวอักษรดังนี้:
จุดประสงค์ทั้งหมดนี้คือการสอนเด็ก ๆ ทั้งตัวอักษรและพื้นฐานของการเขียนโปรแกรมทั้งหมดในครั้งเดียว
ความท้าทาย
สมมติว่าเราได้จัดเรียงแผ่นโฟมแบบสุ่มของเราดังนี้:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
สมมติว่าเราได้ปรับเปลี่ยนยานพาหนะเพื่อให้เมื่อเราตั้งโปรแกรมคำสั่ง "ไปข้างหน้า" ยานพาหนะจะเดินไปข้างหน้าขนาดหนึ่งตารางในเสื่อ ดังนั้นถ้ายานพาหนะอยู่ในU
จตุรัสและไปทางเหนือมันจะหยุดที่P
จัตุรัส
คำแนะนำทั้งหมดมอบให้กับยานพาหนะก่อนที่จะเริ่มเคลื่อนที่และนั่นคือ:
F
: ยานพาหนะก้าวไปข้างหน้าสู่จตุรัสถัดไปR
: รถยนต์หันไปทางขวา 90 องศา (ไม่มีการเคลื่อนที่ใด ๆ เพิ่มเติม)L
: รถยนต์หันไปทางซ้าย 90 องศาแทน (ไม่มีการเคลื่อนไหวเพิ่มเติม)
เมื่อได้รับคำแนะนำคุณสามารถกดปุ่ม "ไป" และส่งยานพาหนะไปยังตำแหน่งที่กำหนดเนื่องจากมันจะเป็นไปตามคำสั่งทุกอย่างในลำดับที่กำหนด ดังนั้นคุณสามารถบอกเด็กให้ใส่คำแนะนำที่จำเป็นสำหรับยานพาหนะเพื่อไปที่ตัวอักษรที่กำหนด
คุณต้องเขียนโปรแกรม / ฟังก์ชั่นที่สั้นที่สุดที่ประมวลผลstring
(พารามิเตอร์อินพุต) ด้วยชุดคำสั่งและคำนวณตัวอักษรที่ยานพาหนะจอดอยู่เหนือ (เอาต์พุตstring
)
รายละเอียด:
- ยานพาหนะจะเริ่มที่ช่องว่างด้านล่างเสมอและหันไปทางทิศเหนือ (ไปทาง
U
จัตุรัส) - สายป้อนจะมีเพียงตัวอักษร
F
,R
,L
และG
(สำหรับปุ่ม "ไป") คุณสามารถใช้ตัวอักษรพิมพ์เล็กสำหรับเสื่อและคำแนะนำหากคุณต้องการ - อัลกอริทึมจะต้องเชื่อฟังคำสั่งทุกคำสั่งในสตริงก่อน
G
คำสั่งแรก(ทุกคำสั่งหลังจากนั้นจะถูกเพิกเฉยเมื่อยานพาหนะเริ่มเคลื่อนที่) - ถ้ารถออกไปของเสื่อในขณะที่กำหนดใด ๆ (แม้ว่าสายป้อนยังไม่ได้รับการประมวลผลอย่างสมบูรณ์)
Out of mat
อัลกอริทึมต้องกลับสตริง - หากไม่เป็นเช่นนั้นอัลกอริทึมจะต้องส่งคืนตัวอักษรที่ยานพาหนะหยุดทำงาน จุดเริ่มต้นนับเป็น
ถ่าน (หรือสตริงว่าง)
ตัวอย่าง:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดสำหรับแต่ละภาษาจะชนะ!
@
เป็นตำแหน่งเริ่มต้นและช่องว่างที่อยู่นอกเสื่อดังนั้นการกำหนดค่านี้จะเป็นERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(ด้วยระยะห่างที่แตกต่างกัน SE ทำให้ยุ่งเหยิง)