ลองสร้างแบบจำลองสำหรับแง่มุมในเกมไพ่ซึ่งโดยส่วนตัวแล้วฉันรู้จักชื่อชาวดัตช์ 'Oorlog' (แปลเป็น 'สงคราม')
'Oorlog' ทำงานอย่างไร
ไพ่สองสำรับ (รวมถึง Jokers สองอัน) แบ่งเท่า ๆ กันระหว่างจำนวนผู้เล่นที่เล่น ผู้เล่นแต่ละคนจะสับไพ่ของตนเองวางคว่ำหน้าพวกเขาและผู้เล่นทุกคนเปิดไพ่ใบแรกของหุ้นในเวลาเดียวกัน
ผู้ชนะของ 'การต่อสู้' นั้นถูกกำหนดโดยค่าของไพ่ตามกฎเหล่านี้: Joker / Ace เอาชนะ King; กษัตริย์เอาชนะราชินี ราชินีเอาชนะแจ็ค; แจ็คเอาชนะ 10; 10 เอาชนะ 9; .... นอกจากนี้ทั้ง 2 และ 3 ยังสามารถเอาชนะ Ace / Joker กฎสุดท้ายอาจนำไปสู่รอบที่ 2 หรือ 3 ชนะ Ace หรือ Joker, Ace หรือ Joker ชนะการ์ดอื่น ๆ ซึ่งจะชนะ 2 หรือ 3 ในกรณีนี้ 2 หรือ 3 ชนะการต่อสู้
(สูทไม่เกี่ยวข้องในเกมไพ่นี้)
เมื่อผู้เล่นสองคนขึ้นไปมีไพ่สูงสุดเท่ากันพวกเขาจะมี 'สงคราม' นี่หมายความว่าพวกเขาวางการ์ดคว่ำหนึ่งใบแล้วแต่ละใบก็เปิดการ์ดใหม่จากสต็อคของพวกเขาอีกครั้งเพื่อดูว่าใครมีบัตรสูงสุด สิ่งนี้จะดำเนินต่อไปจนกระทั่งผู้เล่นคนเดียวชนะการต่อสู้ทั้งหมด
(ไพ่ทุกใบของการต่อสู้นั้นไปที่กองทิ้งของผู้เล่นที่ชนะการต่อสู้จากนั้นทุกคนก็เปิดไพ่ใหม่เมื่อสต็อกของผู้เล่นหมดไพ่พวกเขาก็หันกองทิ้งของพวกเขาคว่ำลง สิ่งนี้จะดำเนินต่อไปจนกว่าผู้เล่นจะออกจากการ์ดของเขา / เธอทั้งหมดจากนั้นผู้เล่นที่มีจำนวนไพ่สูงสุดชนะ)
ตัวอย่าง 'การต่อสู้' กับผู้เล่นสามคน:
- 4, 8, แจ็ค:
แจ็คชนะ - 7, เอซ, ราชินี:
เอซชนะ - 10, 10, King:
King ชนะ - 3, Joker, 2:
3 ชนะ - Ace, Joker, 2:
2 ชนะ - 3, Queen, Ace:
3 ชนะ - Queen, Queen, 9:
Queen & Queen กำลังมี 'สงคราม' ดังนั้นจึงดำเนินการต่อด้วยไพ่ใหม่สองใบ: 4, 8;
8 ชนะ - 4, 4, 4:
ทุกคนมี 'สงคราม' ดังนั้นมันจะดำเนินต่อไปด้วยไพ่ใหม่สามใบ: 8, Ace, 2;
2 ชนะ - แจ็ค, 5, แจ็ค:
แจ็ค & แจ็คกำลังมี 'สงคราม' ดังนั้นจึงยังคงมีไพ่ใหม่สองใบ: 5, 5;
5 & 5 ก็เท่ากันดังนั้น 'สงคราม' จะดำเนินต่อไปอีกครั้งด้วยไพ่ใหม่สองใบ: 10, คิง;
กษัตริย์ชนะ - Joker, Joker, Ace:
ทุกคนมี 'สงคราม' ดังนั้นจึงดำเนินการต่อด้วยการ์ดใหม่สามใบ: 9, 7, 9;
9 & 9 ก็เท่ากันดังนั้น 'สงคราม' จะดำเนินต่อไปด้วยไพ่ใหม่สองใบ: แจ็ค, 3;
แจ็คชนะ
ดังนั้นเข้าสู่ความท้าทายรหัส:
การป้อนข้อมูล:
STDIN พร้อมกับอาร์เรย์หรือสตริงที่จำลองอาร์เรย์ (การโทรของคุณ - แม้ว่าภาษาของคุณจะสนับสนุนอาร์เรย์) อาเรย์นี้มีไพ่ของการต่อสู้ตามลำดับเหตุการณ์ (ดูกรณีทดสอบเพื่อความเข้าใจที่ชัดเจนยิ่งขึ้น)
เอาท์พุท:
STDOUT ดัชนีของผู้เล่นที่ชนะการต่อสู้
คุณสามารถเลือกได้ว่าคุณต้องการให้เป็นศูนย์การจัดทำดัชนี (เช่น0
, 1
หรือ2
) หรือหนึ่งในการจัดทำดัชนีผลผลิต (เช่น1
, 2
, 3
)
กฏท้าทาย:
- อินพุตจะเป็นอาร์เรย์ / สตริงเดี่ยวที่แทนอาร์เรย์ ดังนั้นคุณไม่สามารถมีอาร์เรย์ของอาร์เรย์เพื่อทำให้มันง่ายขึ้น คุณไม่สามารถมีรายการตัวแทนสำหรับการ์ดที่ไม่ได้มีส่วนร่วมในสงคราม
- เราใช้สัญลักษณ์ตัวเลขสำหรับหน้าการ์ดแทนที่จะเป็นตัวอักษร ดังนั้น Ace / Joker =
1
; แจ็ค =11
; ราชินี =12
; และพระมหากษัตริย์13
= - ในความท้าทายนี้เราสามารถสมมติว่าเราเล่นกับผู้เล่น 3 คนเสมอ
- สามตัวแรกแสดงถึงการเริ่มต้นของ 'การต่อสู้' เมื่อผู้เล่นสองคนขึ้นไปมี 'สงคราม' ไพ่ต่อเนื่องในอาเรย์จะระบุการต่อสู้ของพวกเขา (ดูกรณีทดสอบเพื่อความเข้าใจที่ชัดเจนยิ่งขึ้น)
กฎทั่วไป:
- นี่คือการติดแท็กรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในไบต์ชนะ
นี่ไม่ได้หมายความว่าไม่ควรป้อนภาษาที่ไม่ใช่การเล่นกอล์ฟ ลองคิดคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรมทุกภาษา - โปรดระบุการจัดทำดัชนี (ที่เป็นศูนย์หรือหนึ่งดัชนี) ที่คุณใช้สำหรับการส่งออก
กรณีทดสอบ:
Test case 1: [4, 8, 11] -> 2 (or 3)
Test case 2: [7, 1, 12] -> 1 (or 2)
Test case 3: [10, 10, 13] -> 2 (or 3)
Test case 4: [3, 1, 2] -> 0 (or 1)
Test case 5: [1, 1, 2] -> 2 (or 3)
Test case 6: [3, 12, 1] -> 0 (or 1)
Test case 7: [12, 12, 9, 4, 8] -> 1 (or 2)
Test case 8: [4, 4, 4, 8, 1, 2] -> 2 (or 3)
Test case 9: [11, 5, 11, 5, 5, 10, 13] -> 2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3] -> 0 (or 1)
Test case 11: [13, 13, 4, 1, 3] -> 1 (or 2)
Test case 12: [13, 4, 13, 2, 3] -> 2 (or 3)