เกม
พวกเราส่วนใหญ่รู้เกี่ยวกับFroggerเกมอาร์เคดยุค 80 ที่มีวัตถุประสงค์เพื่อกระโดดกบอย่างปลอดภัยบนทางหลวงที่พลุกพล่านและบ่อที่เต็มไปด้วยอันตรายเพื่อมาถึงที่บ้านอย่างปลอดภัย
มีการออกความท้าทายเมื่อหลายเดือนก่อนเพื่อพัฒนาโคลนนิ่งของ Frogger แต่ทำไมต้องโคลนนิ่ง Frogger เมื่อคุณสามารถเล่น Frogger ได้? :)
พิจารณาตารางการเล่นที่ง่ายขึ้นดังต่อไปนี้:
XXXXXXXXXXXXXXXXXXXXXXX North Safe Zone
-----------------------
| | <<<< Express Lane West (Lane 1)
| | > Gridlock East (Lane 2)
| | << Freeflowing Traffic West (Lane 3)
| | < Gridlock West (Lane 4)
| | >>>> Express Lane East (Lane 5)
-----------------------
XXXXXXXXXXX@XXXXXXXXXXX South Safe Zone
\__________ __________/
'
23 cells horizontally
เรามีช่องทางจราจรห้าเลนกว้าง 23 เซลล์แต่ละแห่งและโซนปลอดภัยสองแห่ง (ที่กบสามารถเคลื่อนที่ไปทางซ้ายและขวาอย่างปลอดภัย) และอีก 23 เซลล์กว้าง คุณอาจเพิกเฉยต่อขอบด้านซ้ายและขวาเนื่องจากสิ่งเหล่านี้มีไว้เพื่อภาพที่ชัดเจน
กบของเราเริ่มต้นในเขตปลอดภัยทางใต้ในเซลล์กลาง (อันดับที่ 12) ตามที่ระบุ@
ในรูปด้านบน
เวลาในเกมแบ่งออกเป็นขั้นตอนไม่ต่อเนื่องที่เรียกว่าเฟรม Froggy เป็นกบที่รวดเร็วและสามารถกระโดดหนึ่งเซลล์ในทิศทางใดก็ได้ (ขึ้น, ลง, ขวา, ซ้าย) ต่อเฟรม เขาอาจเลือกที่จะอยู่นิ่งกับเฟรมใดก็ได้ การจราจรในห้าเลนจะเคลื่อนที่ด้วยความเร็วคงที่ดังต่อไปนี้:
- การจราจรในช่องทางด่วนตะวันตก (เลน 1) ย้าย 2 เซลล์ออกจากทุกเฟรม
- การจราจรใน gridlock east lane (เลน 2) เลื่อน 1 เซลล์ไปทางขวาทุก ๆ เฟรมที่สอง
- การจราจรในช่องจราจรทางตะวันตกที่ไหลเยือก (ช่อง 3) เลื่อน 1 เซลล์ออกจากทุกเฟรม
- การจราจรใน gridlock west lane (เลน 4) ย้าย 1 เซลล์ไปทางซ้ายทุกเฟรมที่สอง
- การจราจรในช่องทางด่วนตะวันออก (เลน 5) เลื่อน 2 เซลล์ไปทางขวาทุกเฟรม
การจราจรนั้นถูกกำหนดโดยไม่ซ้ำกันประมาณ 3,000 timesteps ในไฟล์ข้อความนี้ 'การจราจร' ประกอบด้วยยานพาหนะและช่องว่างระหว่างยานพาหนะ ตัวละครที่ไม่ได้เว้นวรรคนั้นเป็นส่วนหนึ่งของยานพาหนะ ไฟล์ข้อความมีห้าบรรทัดซึ่งสอดคล้องกับห้าเลนของการรับส่งข้อมูล (ที่มีลำดับเดียวกัน)
สำหรับเลนฝั่งตะวันตกที่จุดเริ่มต้นของเฟรม 0 (เริ่มเกม) เราพิจารณารถคันแรกในเลนนั้นเกินขอบด้านขวาของกริดการเล่น
สำหรับเลนทางทิศตะวันออกสตริงการจราจรควรได้รับการพิจารณาว่า "ย้อนกลับ" ในแง่ที่ว่ายานพาหนะนั้นเริ่มต้นที่จุดสิ้นสุดของสตริง ที่จุดเริ่มต้นของเฟรม 0 เราถือว่ารถคันแรกในเลนเหล่านี้อยู่เหนือขอบด้านซ้ายของสนามเด็กเล่น
พิจารณาเป็นตัวอย่าง:
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
จากนั้นตารางการเล่นจะปรากฏดังนี้:
Start of Frame 0 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 1 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 2 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 3 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
หลังจากการรับส่งข้อมูลทั้งหมดในเลนคือ "พร่อง" (เช่นสตริงหมด) เราจะพิจารณาอักขระทั้งหมดในสตริงเป็นช่องว่าง
กบของเราถูกแบนหากมีสิ่งใดสิ่งหนึ่งต่อไปนี้เกิดขึ้น:
- กบครอบครองเซลล์ที่ยานพาหนะครอบครองอยู่บนเฟรมใด ๆ
- กบยังคงอยู่กับที่ในเลนด่วนและยานพาหนะที่มีความกว้าง 1 เซลล์ผ่านเขาไปในเฟรมนั้น
- กบกระโดดไปทางตะวันออก "ผ่าน" ยานพาหนะที่มุ่งหน้าไปทางทิศตะวันตกหรือกระโดดไปทางทิศตะวันตกผ่านยานพาหนะที่มุ่งไปทางตะวันออก
- กบกระโดดออกไปข้างนอก 7 (บรรทัด) โดย 23 (เซลล์) เล่นกริดในกรอบใด ๆ
โปรดทราบว่าสิ่งเหล่านี้เป็นเงื่อนไขเดียวที่กบถูกแบน โดยเฉพาะอย่างยิ่งกบกระโดดไปตาม "กับ" การจราจรที่ได้รับอนุญาตเช่นเดียวกับที่กบกระโดดเข้าหรือออกจากเซลล์ในช่องทางด่วนที่ถูกส่งผ่านโดยยานพาหนะความกว้าง -1 ในเฟรมเดียวกัน
วัตถุประสงค์และเกณฑ์การให้คะแนน
วัตถุประสงค์ของการเขียนโปรแกรมความท้าทายคือการได้รับกบข้ามถนนได้บ่อยเท่าที่เป็นไปได้ก่อนที่รถคันสุดท้ายออกจากตารางการเล่น นั่นคือโปรแกรมจะหยุดทันทีหลังจากเสร็จสิ้นเฟรมXโดยที่ frame Xเป็นเฟรมแรกที่นำกริดไปสู่สถานะที่ไม่มียานพาหนะมากขึ้น
ผลลัพธ์ของโปรแกรมของคุณควรเป็นสตริง (หรือไฟล์ข้อความ) ที่มีลำดับการเคลื่อนไหวสำหรับกบโดยใช้การเข้ารหัสต่อไปนี้:
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
ตัวอย่างเช่นสตริง<<^.^
ระบุว่ากบเลื่อนไปทางซ้ายสองครั้งจากนั้นขึ้นแล้วหยุดชั่วขณะหนึ่งเฟรมจากนั้นเลื่อนขึ้นอีกครั้ง
มีการให้คะแนนหนึ่งคะแนนเมื่อกบข้ามจากเขตปลอดภัยใต้ไปยังโซนปลอดภัยเหนือและหนึ่งคะแนนจะถูกทำคะแนนเมื่อกบข้ามจากโซนปลอดภัยเหนือไปยังโซนเซฟใต้
กฎที่สำคัญบางประการ:
- กบจะต้องไม่ถูกบีบ
- กรุณาโพสต์วิธีแก้ปัญหาของคุณ (ลำดับของการเคลื่อนไหว) พร้อมกับรหัสโปรแกรมของคุณทั้งแบบอินไลน์หรือเป็นไฟล์ข้อความ (เช่นการใช้ pastebin.com)
- กบของเรานั้นมีสติและไม่สามารถจดจำได้ดังนั้นโปรแกรมของคุณอาจใช้ข้อมูลการจราจรใด ๆ ก็ตามในทุกเฟรมในขณะที่หาวิธีแก้ปัญหา ซึ่งรวมถึงข้อมูลสำหรับการรับส่งข้อมูลที่ยังไม่ถึงตารางการเล่น
- กริดไม่พันกัน การออกจากกริดจะทำให้กบถูกแบนและด้วยเหตุนี้จึงไม่ได้รับอนุญาต
- การรับส่งข้อมูลจะไม่มีการ "รีเซ็ต" หรือกบ "เทเลพอร์ต" การจำลองอย่างต่อเนื่อง
- กบอาจกลับไปยังเขตปลอดภัยทางใต้หลังจากออกไป แต่สิ่งนี้ไม่นับเป็นจุด เช่นเดียวกันสำหรับเขตปลอดภัยเหนือ
- ผู้ชนะการประกวดคือโปรแกรมที่สร้างลำดับการเคลื่อนย้ายที่ให้จำนวนการข้ามสูงสุด
- สำหรับคำถามหรือข้อสงสัยเพิ่มเติมโปรดอย่าลังเลที่จะถามในส่วนความเห็น
สำหรับสิ่งที่เพิ่มเข้ามาฉันจะเพิ่มค่าตอบแทน+100 ตัวแทนให้กับโปรแกรมที่ชนะเมื่อฉันสามารถทำได้
โบนัส
+ 2.5%ไปยังคะแนนฐาน * (สูงถึง + 10%) สำหรับทุกมุมของตารางการเล่นที่สัมผัสกับกบ มุมทั้งสี่ของกริดเป็นเซลล์ด้านซ้ายและขวาของโซนปลอดภัยสองโซน
+ 25%ไปยังคะแนนฐาน * หากลำดับการเคลื่อนไหวของคุณเก็บกบไว้ใน +/- 4 เซลล์ทางซ้ายหรือขวาของเซลล์เริ่มต้นสำหรับการจำลองทั้งหมด (แน่นอนว่าเขาสามารถเคลื่อนไหวได้อย่างอิสระในแนวตั้ง)
ไม่มีโบนัสให้คะแนน แต่อุปกรณ์ประกอบฉากพิเศษใน OP จะไปถึงทุกคนที่โพสต์เครื่องมือตรวจสอบความถูกต้องของวิธีแก้ปัญหาอย่างรวดเร็วเพื่อที่ฉันจะได้ไม่ต้องตั้งโปรแกรม ;) เครื่องมือตรวจสอบจะยอมรับลำดับของการเคลื่อนไหวให้แน่ใจว่าถูกต้องตามกฎหมาย (ตามกฎและไฟล์การรับส่งข้อมูล) และรายงานคะแนน (เช่นจำนวนรวมของการข้าม)
* คะแนนรวมเท่ากับคะแนนฐานบวกโบนัสปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด