KOTH อสมมาตร: จับแมว
UPDATE : ไฟล์ gist-update แล้ว (รวมถึง submisisons ใหม่) เนื่องจาก Controller.java ไม่พบข้อยกเว้น (ข้อผิดพลาดเท่านั้น) ตอนนี้มันตรวจจับข้อผิดพลาดและข้อยกเว้นแล้วพิมพ์ออกมา
ความท้าทายนี้ประกอบด้วยสองหัวข้อนี้เป็นหัวข้อจับด้ายแมวสามารถพบได้ที่นี่
ควบคุมสามารถดาวน์โหลดได้ที่นี่
นี่คือความไม่สมดุล KOTH: การส่งแต่ละคนเป็นทั้งแมวหรือจับ มีเกมระหว่างแมวและแมวจับแต่ละคู่ แมวและมือปราบมารมีอันดับแยกกัน
สิ่งที่จับ
มีแมวอยู่บนตะแกรงหกเหลี่ยม งานของคุณคือการจับมันให้เร็วที่สุด ทุกเทิร์นคุณสามารถวางถังน้ำบนเซลล์กริดเดียวเพื่อป้องกันไม่ให้แมวไปที่นั่น แต่แมวไม่ได้เป็นใบ้ (และบางที) เป็นใบ้และเมื่อใดก็ตามที่คุณวางถังแมวจะย้ายไปที่เซลล์กริดอื่น เนื่องจากกริดนั้นเป็นรูปหกเหลี่ยมแมวจึงสามารถไปได้ 6 ทิศทาง เป้าหมายของคุณคือล้อมรอบแมวด้วยที่เก็บน้ำได้เร็วขึ้นดีกว่า
แมว
คุณรู้ว่าผู้จับต้องการจับคุณโดยการวางถังน้ำรอบตัวคุณ แน่นอนว่าคุณพยายามหลบเลี่ยง แต่ในขณะที่คุณเป็นแมวขี้เกียจ (ในฐานะที่เป็นแมว) คุณต้องก้าวไปทีละขั้น หมายความว่าคุณจะไม่สามารถอยู่ในที่เดียวกันกับคุณได้ แต่คุณต้องย้ายไปยังหนึ่งในหกจุดโดยรอบ เมื่อใดก็ตามที่คุณเห็นว่าผู้จับวางถังน้ำใหม่คุณจะไปที่เซลล์อื่น แน่นอนคุณพยายามหลบเลี่ยงให้นานที่สุด
ตะแกรง
กริดนั้นเป็นรูปหกเหลี่ยม แต่เนื่องจากเราไม่มีโครงสร้างข้อมูลแบบหกเหลี่ยมเราจึงใช้11 x 11
อาร์เรย์ 2d ของสี่เหลี่ยมและเลียนแบบ 'พฤติกรรม' หกเหลี่ยมที่แมวสามารถเคลื่อนที่ได้ใน 6 ทิศทาง:
โทโพโลยีคือ toroidal ซึ่งหมายความว่าถ้าคุณเหยียบเซลล์ 'นอก' ของอาร์เรย์คุณจะถูกโอนไปยังเซลล์ที่เกี่ยวข้องในอีกด้านหนึ่งของอาร์เรย์
เกม
แมวเริ่มต้นที่ตำแหน่งที่กำหนดในตาราง ผู้จับสามารถทำการเดินครั้งแรกจากนั้นแมวและการจับการเคลื่อนไหวแบบอื่น ๆ จนกว่าแมวจะถูกจับ จำนวนขั้นตอนคือคะแนนสำหรับเกมนั้น แมวพยายามที่จะได้รับคะแนนที่ดีที่สุดเท่าที่เป็นไปได้ที่จับพยายามที่จะได้รับคะแนนที่ต่ำที่สุด ผลรวมเฉลี่ยของทุกเกมที่คุณเข้าร่วมจะเป็นคะแนนการส่งของคุณ มีการจัดอันดับแยกกันสองรายการสำหรับแมวหนึ่งรายการสำหรับมือปราบมาร
ตัวควบคุม
คอนโทรลเลอร์ที่กำหนดถูกเขียนใน Java ในฐานะที่เป็น catcher หรือ cat คุณแต่ละคนจะต้องใช้คลาส Java (มีตัวอย่างดั้งเดิมอยู่แล้ว) และวางไว้ในplayers
แพ็คเกจ (และอัปเดตรายชื่อ cat / catchers ในคลาส Controller) แต่คุณอาจเขียน ฟังก์ชันเพิ่มเติมภายในคลาสนั้น คอนโทรลเลอร์มาพร้อมกับตัวอย่างการทำงานสองอย่างของคลาส cat / catcher แบบง่าย ๆ
เขตข้อมูลนั้นเป็นอาร์เรย์ 2 11 x 11
มิติint
ที่เก็บค่าสถานะปัจจุบันของเซลล์ ถ้ามือถือเป็นที่ว่างเปล่ามันจะมีค่า0
ถ้ามีแมวมันมีค่าและถ้ามีถังมี-1
1
มีฟังก์ชั่นบางอย่างที่คุณสามารถใช้ได้: isValidMove()
/ isValidPosition()
ใช้สำหรับตรวจสอบว่าการเคลื่อนไหวของคุณ (cat) / ตำแหน่ง (catcher) นั้นถูกต้อง
ทุกครั้งที่ถึงตาคุณtakeTurn()
จะมีการเรียกฟังก์ชั่นของคุณ อาร์กิวเมนต์ประกอบด้วยสำเนาของกริดปัจจุบันที่มีวิธีการเช่นread(i,j)
อ่านเซลล์ที่(i,j)
และisValidMove()/ isValidPosition()
ตรวจสอบความถูกต้องของคำตอบของคุณ สิ่งนี้ยังจัดการการตัดทอพอโลยีโทโพโลยีซึ่งหมายความว่าแม้ว่ากริดมีเพียง 11 x 11 คุณยังสามารถเข้าถึงเซลล์ (-5,13)
วิธีควรคืนค่าint
อาร์เรย์ของสององค์ประกอบซึ่งเป็นตัวแทนของการเคลื่อนไหวที่เป็นไปได้ สำหรับแมวเหล่านี้เป็นซึ่งเป็นตัวแทนของตำแหน่งสัมพัทธ์ของแมวที่อยากจะไปและปราบมารกลับพิกัดที่แน่นอนของที่พวกเขาต้องการที่จะวางถัง{-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
{i,j}
หากวิธีการของคุณสร้างการย้ายที่ไม่ถูกต้องการส่งของคุณจะถูกตัดสิทธิ์ การย้ายนั้นถือว่าไม่ถูกต้องหากที่ปลายทางของคุณเป็นที่เก็บข้อมูลอยู่แล้วหรือการย้ายนั้นไม่ได้รับอนุญาต / ปลายทางถูกครอบครองอยู่แล้ว (เป็นแมว) หรือหากมีการฝากข้อมูล / แมว (เป็นตัวจับ) อยู่แล้ว คุณสามารถตรวจสอบว่าก่อนมือด้วยฟังก์ชั่นที่กำหนด
ข้อมูลที่คุณส่งควรจะทำงานเร็วพอสมควร หากวิธีการของคุณใช้เวลานานกว่า 200ms สำหรับแต่ละขั้นตอนมันจะถูกตัดสิทธิ์ด้วย (โดยเฉพาะอย่างยิ่งน้อย ... )
โปรแกรมได้รับอนุญาตให้จัดเก็บข้อมูลระหว่างขั้นตอน
การส่ง
- คุณสามารถส่งได้มากเท่าที่คุณต้องการ
- โปรดอย่าแก้ไขการส่งที่คุณส่งมาอย่างมีนัยสำคัญ
- โปรดส่งแต่ละคำตอบด้วยคำตอบใหม่
- การส่งแต่ละครั้งควรมีชื่อที่ไม่ซ้ำกัน
- การส่งควรประกอบด้วยรหัสของชั้นเรียนของคุณเช่นเดียวกับคำอธิบายที่บอกเราถึงวิธีการทำงานของคุณ
- คุณสามารถเขียนบรรทัดสำหรับ
<!-- language: lang-java -->
ซอร์สโค้ดของคุณเพื่อรับการเน้นไวยากรณ์โดยอัตโนมัติ
เกณฑ์การให้คะแนน
แมวทั้งหมดจะแข่งขันกับผู้จับทั้งหมดในจำนวนเท่าเดิม ฉันจะพยายามอัปเดตคะแนนปัจจุบันบ่อยครั้งผู้ชนะจะถูกตัดสินเมื่อกิจกรรมลดลง
ความท้าทายนี้ได้รับแรงบันดาลใจจากเกมแฟลชเก่า
ขอบคุณ @PhiNotPi สำหรับการทดสอบและให้ข้อเสนอแนะที่สร้างสรรค์
คะแนนปัจจุบัน (100 เกมต่อการจับคู่)
Name Score Rank Author
RandCatcher 191674 8 flawr
StupidFill 214246 9 flawr
Achilles 76820 6 The E
Agamemnon 74844 5 The E
CloseCatcher 54920 4 randomra
ForwordCatcher 94246 7 MegaTom
Dijkstra 46500 2 TheNumberOne
HexCatcher 48832 3 randomra
ChoiceCatcher 43828 1 randomra
RandCat 77928 7 flawr
StupidRightCat 81794 6 flawr
SpiralCat 93868 5 CoolGuy
StraightCat 82452 9 CoolGuy
FreeCat 106304 3 randomra
RabidCat 77770 8 cain
Dijkstra's Cat 114670 1 TheNumberOne
MaxCat 97768 4 Manu
ChoiceCat 113356 2 randomra
PRINT_STEPS = true
รายละเอียดเพิ่มเติมในไฟล์MyFrame.java
) แล้วฉันบันทึกนี้กับLICEcapและแก้ไขมันด้วยGIMP หากคุณมีคำถามเพิ่มเติมเพียงแค่ถาม!