เมื่อให้ลูกเต๋าสองรายการสำหรับการต่อสู้ใน Risk โปรแกรมหรือฟังก์ชันของคุณจะต้องแสดงจำนวนกองทหารที่ผู้เล่นแต่ละคนแพ้
พื้นหลัง
คุณไม่จำเป็นต้องอ่านสิ่งนี้เพราะมันเป็นเพียงพื้นหลัง ข้ามไปยังหัวข้อย่อย "งาน" เพื่อดำเนินการต่อไปคงที่
ในเกมแห่งความเสี่ยงผู้เล่นคนหนึ่งสามารถโจมตีผู้เล่นอื่นได้ (ในความเป็นจริงมันเป็นสิ่งจำเป็นที่จะชนะ) ผลลัพธ์ของการต่อสู้จะพิจารณาจากการทอยลูกเต๋า การต่อสู้ทุกครั้งเกิดขึ้นเนื่องจากการต่อเนื่องของการรบย่อยซึ่งผู้เล่นแต่ละคนสามารถแพ้ได้2
ชิ้นส่วนของกองทัพ
ในการต่อสู้ย่อยผู้พิทักษ์และผู้โจมตีแต่ละคนทอยลูกเต๋าหลายลูกซึ่งจำนวนอาจแตกต่างกันไปตามสถานการณ์ที่ไม่เกี่ยวข้องกับความท้าทายนี้ ค่าสูงสุดของผู้โจมตีนั้นเทียบกับค่าสูงสุดของผู้พิทักษ์ หากผู้โจมตีเสียชีวิตสูงกว่าผู้พิทักษ์ตายฝ่ายป้องกันเสียหนึ่งชิ้น มิฉะนั้นผู้โจมตีสูญเสียหนึ่งชิ้น
จากนั้นหากผู้เล่นทั้งสองมีอย่างน้อยสองลูกเต๋าลูกเต๋าที่มีมูลค่าสูงสุดอันดับสองของผู้เล่นทั้งสองจะถูกเปรียบเทียบ อีกครั้งถ้าผู้โจมตีตายมากกว่าผู้พิทักษ์ฝ่ายตายผู้พิทักษ์เสียชิ้นเดียว มิฉะนั้นผู้โจมตีสูญเสียหนึ่งชิ้น
(Defender ชนะการผูกหากทั้งผู้พิทักษ์และผู้โจมตีกลิ้ง a 4
ผู้โจมตีจะแพ้ชิ้น)
ในการต่อสู้ย่อยจากบทความ Wikipedia ลูกเต๋าของผู้โจมตีเป็นสีแดงและลูกเต๋าของผู้พิทักษ์เป็นสีขาว สูงสุดของลูกเต๋าโจมตีเป็นและสูงสุดของการมีกองหลังของ4
3
เนื่องจากผู้โจมตีสูงขึ้นผู้พิทักษ์จึงเสียส่วนหนึ่ง อันดับสอง3
สำหรับผู้โจมตีและ2
ผู้พิทักษ์ เนื่องจากผู้โจมตีสูงขึ้นอีกครั้งผู้พิทักษ์จึงเสียอีกชิ้นหนึ่ง ดังนั้นในการรบย่อยนี้ผู้โจมตีไม่ต้องเสียชิ้นใดเลยและผู้พิทักษ์ก็สูญเสีย2
ชิ้นส่วนไป
โปรดทราบว่าชิ้นส่วนที่สามที่สูงที่สุดจะไม่ถูกเปรียบเทียบ นี่เป็นเพราะผู้พิทักษ์ไม่มีลูกเต๋ามากกว่าสองครั้งในการรบย่อยครั้งเดียวดังนั้นจึงไม่มีการเปรียบเทียบชิ้นที่สามที่สูงที่สุดเท่าที่เคยมีมา
งาน
ให้ลูกเต๋าที่ไม่ได้เรียง (จำนวนเต็มในช่วง 1 ถึง 6 รวม) ของทั้งผู้โจมตีและผู้ปกป้องการรบย่อยของความเสี่ยงในรูปแบบที่สะดวกสบายใด ๆ ส่งออกจำนวนชิ้นส่วนกองทัพที่ผู้เล่นแต่ละคนแพ้ เอาต์พุตอาจอยู่ในรูปแบบที่สะดวกใด ๆ ตราบใดที่มีเอาต์พุตต่างกันเพื่อระบุความเป็นไปได้ทั้งห้า คุณต้องระบุว่าอะไรคือผลลัพธ์ที่แตกต่างกันในคำถามของคุณ
เอาท์พุทจะถูกกำหนดดังนี้เริ่มต้นด้วยและdef=0
ถ้าค่าที่ยิ่งใหญ่ที่สุดของรายการของลูกเต๋าม้วนโจมตีที่มีค่ามากกว่าค่ามากที่สุดของรายการของลูกเต๋าม้วนของกองหลังที่เพิ่มขึ้นแล้วatk=0
มิฉะนั้นการเพิ่มขึ้นdef
atk
หากทั้งสองรายการของลูกเต๋าม้วนมีความยาวอย่างน้อย2
แล้ว: ถ้าค่าที่สองที่ยิ่งใหญ่ที่สุดของรายการของลูกเต๋าม้วนโจมตีมากกว่าที่สองที่ยิ่งใหญ่ที่สุดมูลค่าของรายการแล้วเพิ่มขึ้นdef
และอื่น ๆ atk
เพิ่มขึ้น
ท้ายที่สุดโปรแกรมหรือฟังก์ชั่นจะต้องส่งออกตัวระบุที่ไม่ซ้ำกันสำหรับความเป็นไปได้ของผลลัพธ์ 5 รายการต่อไปนี้
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
ตัวอย่าง
กองหลัง: [3, 2]
โจมตี: [2, 4, 1]
แม็กซ์ของผู้พิทักษ์เป็นและสูงสุดของการโจมตีคือ3
ดังนั้น
สองกองหลังที่เป็นและที่สองของการโจมตีคือ ดังนั้น ผลลัพธ์ก็คือ4
4>3
def=1
2
2
Not(2>2)
atk=1
[1,1]
กรณีทดสอบ
Defender
Attacker
Output (as [def,atk])
-----
[1]
[1]
[0,1]
-----
[6,6]
[1,1,1]
[0,2]
-----
[1,2]
[5,2,3]
[2,0]
-----
[5]
[3,4]
[0,1]
-----
[4]
[4,5]
[1,0]
-----
[1,3]
[1,2,3]
[1,1]
-----
[4]
[4,5,6]
[1,0]
-----
[4,5]
[6,2]
[1,1]
-----
[5]
[6,1,3]
[1,0]
-----
[5,5]
[4,4,1]
[0,2]
-----
[2,5]
[2,2]
[0,2]
-----
[6,6]
[4,4,3]
[0,2]
-----
[2,1]
[4,3]
[2,0]
-----
[4]
[1,5]
[1,0]
-----
[1]
[5,2]
[1,0]
-----
[6,2]
[4]
[0,1]
-----
[4,2]
[2,5,5]
[2,0]
-----
[2]
[6,6,2]
[1,0]
-----
[6]
[2,6]
[0,1]
-----
[3,1]
[1]
[0,1]
-----
[6,2]
[3,5,2]
[1,1]
-----
[4,2]
[1,1]
[0,2]
-----
[4,3]
[5,4,1]
[2,0]
-----
[5,6]
[1,2]
[0,2]
-----
[3,2]
[4,4]
[2,0]
-----
[2]
[6,3,4]
[1,0]
-----
[1,4]
[6,2,4]
[2,0]
-----
[4,2]
[2,5,4]
[2,0]
-----
[5]
[6,2,1]
[1,0]
-----
[3]
[2,5,4]
[1,0]
-----
[5,4]
[2]
[0,1]
-----
[6,3]
[2,6,5]
[1,1]
-----
[3,1]
[4]
[1,0]
-----
[4]
[6,6,5]
[1,0]
-----
[6,3]
[4,2]
[0,2]
-----
[1,6]
[5,4]
[1,1]
-----
[3,6]
[4,4]
[1,1]
-----
[5,4]
[5,1,1]
[0,2]
-----
[6,3]
[5,4]
[1,1]
-----
[2,6]
[1,2]
[0,2]
-----
[4,2]
[3,5,5]
[2,0]
-----
[1]
[1,2,1]
[1,0]
-----
[4,5]
[1,6]
[1,1]
-----
[1]
[3,5,1]
[1,0]
-----
[6,2]
[6,2]
[0,2]
การใช้งานตัวอย่าง
Python 2 หรือ 3
def risk(atk_rolls,def_rolls):
# set the rolls in descending order, e.g. [5,3,2]
atk_rolls = sorted(atk_rolls,reverse = True)
def_rolls = sorted(def_rolls,reverse = True)
# minimum length.
minlen = min(len(atk_rolls),len(def_rolls))
atk_lost = 0
def_lost = 0
# compare the highest-valued rolls
if atk_rolls[0]>def_rolls[0]:
def_lost += 1
else:
atk_lost += 1
if minlen == 2:
# compare the second-highest-valued rolls
if atk_rolls[1] > def_rolls[1]:
def_lost += 1
else:
atk_lost += 1
return [def_lost, atk_lost]
ข้อมูลจำเพาะ
- อินพุตอาจถูกนำมาเป็นรูปแบบใด ๆ ที่เข้ารหัสเฉพาะม้วนของผู้พิทักษ์และม้วนของผู้โจมตี
- เอาต์พุตอาจอยู่ในรูปแบบใด ๆ ที่ให้เอาต์พุตที่ไม่ซ้ำกันสำหรับแต่ละความเป็นไปได้ห้าประการที่กล่าวไว้ข้างต้น
- ม้วนพิทักษ์มีรายการ
1
หรือจำนวนเต็มในชุด2
[1,2,3,4,5,6]
ม้วนโจมตีเป็นรายการ1
ที่จะจำนวนเต็มในชุด3
[1,2,3,4,5,6]
- เนื่องจากนี่คือcode-golfดังนั้นรหัสที่สั้นที่สุดในแต่ละภาษาจึงชนะ! ไม่ได้ให้คำตอบในภาษากอล์ฟกีดกันคุณจากคำตอบโพสต์ในภาษาอื่น ๆ