ค้นหาผลลัพธ์ของเกมแห่งสงคราม
เมื่อฉันอยู่ในโรงเรียนประถมมีเกม "Rock-Paper-Scissors" ที่เราเล่นในระหว่างการชุมนุมเมื่อรออาจารย์ของเราที่พักผ่อน ฯลฯ เราเรียกมันว่า "สงคราม" หลังจากที่บางค้นหา แต่ก็จะเปิดออกนี้เป็นตัวแปรที่ง่ายมากของ"ปืนลูกซองเกม" (ตาม wikiHow) ฉันจะเรียกมันว่า "สงคราม" เนื่องจากกฎแตกต่างกันเล็กน้อย:
2 คนนั่งตรงข้ามกัน เป้าหมายของเกมคือการ "ฆ่า" ผู้เล่นคนอื่น ทุกเทิร์นคุณสามารถเล่นหนึ่งใน 3 ท่าเคลื่อนไหว:
โหลดใหม่ : คุณมีปืนที่บรรจุกระสุนนัดเดียว ต้องโหลดใหม่ก่อนจึงจะสามารถยิงได้ในแต่ละครั้ง โหลดซ้ำเมื่อคุณมีกระสุนถูกกฎหมาย แต่ไม่ทำอะไรเลย โหลดเป็นสัญลักษณ์โดยการแตะวัดของคุณด้วยมือทั้งสอง ผู้เล่นแต่ละคนเริ่มต้นด้วย 0 กระสุน
Guard : การเคลื่อนไหวที่ปลอดภัยเพียงอย่างเดียว หากคุณถูกยิงขณะเฝ้าระวังคุณจะไม่ตาย การปกป้องเป็นสัญลักษณ์โดยการกางแขนโอบหน้าอก
ไฟ : ยิงปืนของคุณ ในการยิงสำเร็จคุณจะต้องโหลดซ้ำตั้งแต่นัดสุดท้าย หากฝ่ายตรงข้ามกำลังโหลดใหม่คุณจะชนะ หากพวกเขายิงด้วยและคุณทั้งคู่มีกระสุนมันเป็นเรื่องเสมอ หากพวกเขากำลังปกป้องอยู่คุณก็สูญเสียกระสุนไป ในขณะที่การยิงโดยไม่มีกระสุนนั้นเป็นการเคลื่อนไหวที่ถูกกฎหมายมันไม่ทำอะไรเลยและทำให้คุณอ่อนแอเหมือนการโหลดซ้ำ การยิงถูกทำสัญลักษณ์โดยชี้ไปที่ผู้เล่นอื่น
มันเล่นคล้ายกับ RPS โดยที่ผู้เล่นแต่ละคนเลือกที่จะโยนลงไปพร้อมกัน (เราเคาะขาของเราสองครั้งในระหว่างรอบเพื่อให้เข้าจังหวะกัน แต่นั่นไม่สำคัญสำหรับความท้าทาย)
ความท้าทาย:
งานของคุณคือการค้นหาผลลัพธ์ของเกมสงคราม มันสามารถเป็นฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ
อินพุต
ตัวเลือกผู้เล่นแต่ละคนเลือกแต่ละเทิร์นจะถูกแสดงด้วยตัวละคร / สตริง:
r : โหลดซ้ำ
g : การ์ด
f : ไฟ
อินพุตจะเป็นรายการของคู่, สตริงที่มีการคั่น / ไม่ จำกัด หรือสิ่งอื่น ๆ ตามบรรทัดเหล่านี้
ตัวอย่างอินพุตใน Python อาจเป็น[("r", "g"), ("f", "r")]
ความหมายในเทิร์นแรกที่ผู้เล่นคนแรกรีโหลดและผู้เล่นคนที่สองที่ได้รับการปกป้อง ในเทิร์นที่สองผู้เล่นคนแรกยิงขึ้นในขณะที่ผู้เล่นคนที่สองรีโหลด ผู้เล่นคนหนึ่งชนะเกมนี้ การป้อนข้อมูลเดียวกันอาจเลือกที่จะแสดงเป็น"r g f r"
, "rgfr"
, "rg fr"
"rg-fr"
...
คุณสามารถสมมติสิ่งต่อไปนี้:
ข้อมูลที่ป้อนจะตรงกับรูปแบบที่คุณเลือกและจะมีเพียงอักขระที่ถูกต้องเท่านั้น
บางคนจะตายภายใน 100 ตา
อย่างไรก็ตามคุณไม่สามารถสรุปได้ว่าการตายจะเกิดขึ้นเมื่อมีคนตาย
เอาท์พุต
ค่าที่ระบุว่าใครจะชนะ (หรือใครชนะก่อน*
) คุณสามารถเลือกสิ่งที่จะส่งออกสำหรับแต่ละสถานการณ์ แต่ต้องบัญชีต่อไปนี้:
ผู้เล่น 1 ชนะ
ผู้เล่น 2 ชนะ
พวกเขาฆ่ากัน (วาด)
ผลลัพธ์แต่ละรายการจะต้องมีค่าเขตและจะต้องเหมือนกันสำหรับแต่ละสถานการณ์
ตัวอย่างเช่นคุณสามารถแสดงผล1
เมื่อผู้เล่น 1 ชนะ2
เมื่อผู้เล่น 2 ชนะและ0
ในกรณีที่เสมอ จากนั้นคุณจะต้องแสดงผลออกมาเสมอ1
เมื่อผู้เล่น 1 ชนะ2
เมื่อผู้เล่น 2 ชนะและ0
ในกรณีที่เสมอ
สามารถส่งคืนหรือพิมพ์ไปยัง stdout ช่องว่างต่อท้ายเป็นเรื่องปกติ
สถานการณ์ที่นำไปสู่การเสมอคือถ้าผู้เล่นทั้งสองยิงและทั้งคู่มีกระสุน
*
เนื่องจากในการท้าทายนี้การเลี้ยวอาจดำเนินต่อไปหลังจากมีคนเสียชีวิตมันเป็นไปได้ที่ผู้เล่นมากกว่า 1 คนอาจชนะในที่สุด คุณจำเป็นต้องค้นหาผู้ชนะก่อนตามอินพุท
กรณีทดสอบ (สมมติว่า1
เมื่อ P1 ชนะ2
เมื่อ P2 ชนะและ0
เสมอ):
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
นี่คือรหัสกอล์ฟดังนั้นจำนวนไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ!
หมายเหตุตามที่กรณีทดสอบแสดงคุณต้องจัดการการเคลื่อนไหว "โง่" มันใช้ได้อย่างสมบูรณ์แบบสำหรับผู้เล่นที่พยายามยิงเมื่อไม่มีกระสุนหรือโหลด 2 รอบติดต่อกัน (และสะสมกระสุนเพียงนัดเดียว)
{"rff","rgf"}
?