บทนำ
Skatเป็นเกมไพ่เยอรมันแบบดั้งเดิมสำหรับผู้เล่น 3 คน สำรับประกอบด้วย 32 ใบ: Ace, King, Queen, Jack, 10, 9, 8, 7 ในทั้งหมด 4 ชุด (Clubs, Spades, Hearts, Diamonds)
ในทุก ๆ รอบมีผู้เล่นคนเดียวเล่นคนเดียวในขณะที่อีกสองคนเล่นกับเขา ในช่วงเริ่มต้นของรอบผู้เล่นแต่ละคนจะได้รับไพ่ 10 ใบส่วนที่เหลืออีก 2 ใบเรียกว่าskatและวางคว่ำลงตรงกลาง ผู้เล่นเดี่ยวจะถูกกำหนดโดยขั้นตอนการเสนอราคา นี่เป็นส่วนหนึ่งของเกมที่คุณจะต้องจัดการกับความท้าทายนี้โดยมีรายละเอียดเพิ่มเติมด้านล่างนี้
ผู้เล่นที่ชนะช่วงประมูลจะกลายเป็นผู้เล่นเดี่ยว เขาหยิบรองเท้าสเก็ตแล้วหยดการ์ดสองใบ (ซึ่งอาจเหมือนกันทีมอื่นไม่รู้) หยิบชุดทรัมป์และเริ่มรอบ
หนึ่งรอบประกอบด้วยสิบเทคนิค ผู้เล่นที่ชนะเคล็ดลับนำไปสู่คนต่อไปจนกว่าจะเล่นไพ่ทั้งหมด ฉันจะไม่อธิบายกฎที่นี่ แต่คุณควรรู้ว่าการมีไพ่คนดีมาก หากคุณต้องการเรียนรู้เกี่ยวกับกฎตรวจสอบบทความ Wikipedia ที่ฉันเชื่อมโยงในตอนต้นของโพสต์นี้ แต่มันไม่จำเป็นสำหรับความท้าทายนี้
ความท้าทาย
คุณต้องการสอนลูกสองคนถึงวิธีการเล่นสเกต กฎนั้นไม่ยากดังนั้นพวกเขาจึงรีบเข้าไป สิ่งเดียวที่ทำให้พวกเขาลำบากคือการประมูลโดยเฉพาะการคำนวณมูลค่าเกมในมือของพวกเขา ดังนั้นคุณตัดสินใจที่จะเขียนโปรแกรมขนาดเล็กซึ่งแสดงมูลค่าของเกมสูงสุดที่พวกเขาสามารถเสนอราคาได้เมื่อมือนั้น
การคำนวณมูลค่าของเกม
ทุกมือมีค่าเกมที่แน่นอน มันถูกกำหนดโดยปริมาณของแจ็คตามลำดับที่คุณมีและชุดที่คุณต้องการเลือกเป็นคนดี เริ่มจากปัจจัยแรกแจ็ค!
ปัจจัยแจ็ค
แจ็คมักจะเป็นคนที่กล้าหาญไพ่และพวกเขาเอาชนะทุกคนที่กล้าหาญ ลำดับความแข็งแกร่งระหว่างแจ็คทั้งสี่คือ:
- Jack of Clubs (สูงสุด)
- แจ็คโพดำ
- แจ็คออฟฮาร์ตส์
- Jack of Diamonds (ต่ำสุด)
ในคำอธิบายเพิ่มเติมฉันจะอ้างถึงพวกเขาด้วยตัวเลขที่ฉันได้รับพวกเขาที่นี่
คุณจำได้ไหมว่ามีปัจจัยบางอย่างที่คุณได้รับจากแจ็คในมือของคุณซึ่งเป็นส่วนหนึ่งของมูลค่าของเกม? ที่ดี! นี่คือวิธีที่คุณได้รับ:
แจ็คตัวคูณนี้คือจำนวนแจ็คยอดนิยม (ดูลำดับด้านบน) ตามลำดับบวก 1 ดังนั้นถ้าคุณมีแจ็คทั้งหมด 4 ตัวมันคือ 4 + 1 = 5 หากคุณมีแจ็คแรกเพียง 2 ตัวนั่นคือ 2 + 1 = 3
อีกทางหนึ่งเพื่อให้สิ่งต่าง ๆ มีความซับซ้อนยิ่งขึ้นแจ็คแฟคเตอร์อาจเป็นจำนวนแจ็คอันดับสูงสุดตามลำดับที่คุณหายไปบวก 1 ดังนั้นหากคุณพลาดอันดับแรกก็คือ 1 + 1 = 2 หากคุณ หายไปตอนแรกเขาที่ 3 คือ 3 + 1 = 4 นี่คือตัวอย่างบางส่วนโดยใช้ตัวเลขด้านบน:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
นั่นเป็นปัจจัยแรก นี่คือวิธีที่คุณจะได้รับอันดับที่สอง:
ปัจจัย Trump Suit
อันนี้ง่ายกว่ามาก ปัจจัยที่สองถูกกำหนดโดยชุดทรัมป์ที่ผู้เล่นเดี่ยวเลือกโดยใช้การแมปต่อไปนี้:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
นั่นเป็นเรื่องง่ายใช่มั้ย
คุณค่าของเกม
มูลค่าของเกมเป็นผลคูณของสองปัจจัย ค่อนข้างง่ายที่คุณคิด ไม่ถูกต้อง! ในขณะที่แจ็ค - แฟคเตอร์ได้รับการแก้ไขแล้ว ชุดที่คุณเลือกเก็บท้ายที่สุดคือทรัมป์ขึ้นอยู่กับปริมาณของปั้นและมูลค่าของการ์ดที่ไม่ใช่ของทรัมป์ในมือของคุณ มันจะซับซ้อนเกินไปที่จะอธิบายว่ามือที่ดีนั้นเป็นอย่างไรดังนั้นคุณจะใช้อัลกอริทึมต่อไปนี้:
อัลกอริทึมแบบไหนที่ต้องทำเลือก
คุณไม่จำเป็นต้องมีส่วนร่วมในการเสนอราคา หากคุณตัดสินใจว่ามือของคุณแย่เกินกว่าจะเล่นเดี่ยวคุณก็สามารถผ่านได้ มือของคุณจะต้องตรงกับเกณฑ์ต่อไปนี้เพื่อให้สามารถเล่นได้:
มีไพ่อย่างน้อย 6 ใบ (ไพ่ของทรัมป์ที่คุณเลือก + จำนวนแจ็ค) หากเป็นไปได้สำหรับชุดสูทมากกว่าหนึ่งชุดให้เลือกชุดที่จะส่งผลให้มีไพ่ดีกว่า หากยังมีเน็คไทให้เลือกสูทที่มีคะแนนสูงสุดตามที่ระบุไว้ด้านบน
จากไพ่ที่ไม่ใช่ของทรัมป์มีอย่างน้อย 1 เอซ
หากมือของคุณไม่ตรงกับเกณฑ์ทั้งสองนี้คุณจะผ่าน ถ้าเป็นเช่นนั้นคุณจะส่งออกมูลค่าเกมที่คำนวณได้และชุดทรัมป์ที่เลือก
บันทึกย่อ: แน่นอนว่านี่เป็นอัลกอริทึมที่ง่ายมาก มีกลยุทธ์และประสบการณ์มากเกินไปในการตัดสินมือเกินกว่าที่เราจะสามารถรับมือกับความท้าทายเช่นนี้
อินพุต
บัตรทุกใบมีตัวระบุที่ไม่ซ้ำกัน ส่วนแรกคือชุดสูท ( C lubs, S pades, H earts, D iamonds) ส่วนที่สองคือค่าที่ได้จากการทำแผนที่นี้:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
ทั้งสองส่วนรวมกันเป็นการ์ดใบเดียว ค่ามาก่อนแล้วจึงมาสูท คุณสามารถนำไพ่ในรูปแบบใดก็ได้ตามที่คุณต้องการ
เอาท์พุต
หากมือสามารถเล่นได้ให้ส่งออกมูลค่าของเกมและชุดทรัมป์ที่หยิบ (ลำดับไม่สำคัญ) ถ้าไม่ใช่ให้เอาท์พุท "pass"
กฎระเบียบ
- ตามที่กล่าวไว้คุณสามารถรับอินพุตในรูปแบบที่สะดวกที่สุดสำหรับคุณ ตัวอย่างดูด้านล่างในกรณีทดสอบ
- อินพุตอาจมีให้โดยอาร์กิวเมนต์บรรทัดคำสั่งอินพุตของผู้ใช้หรืออาร์กิวเมนต์ของฟังก์ชัน
- อาจให้เอาท์พุทเป็นค่าตอบแทนหรืออาจจะพิมพ์บนหน้าจอ
- การ์ดในอินพุตอาจไม่สามารถสั่งซื้อได้ไม่ว่าด้วยวิธีใด โปรแกรมของคุณจะต้องสามารถจัดการกับการสั่งซื้อบัตรแบบสุ่มใด ๆ
- การนับจำนวนไบต์ที่ต่ำที่สุด!
Testcases
อินพุตในกรณีทดสอบจะเป็นรายการของ 2-char Strings
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
คำอธิบาย:
- แจ็คสองตัวติดต่อกันกับสโมสรในฐานะคนที่กล้าหาญ ดังนั้นมูลค่าของเกมคือ 3 x 12 = 36
- สามแจ็คในแถวหายไปโดยมี Spades เป็นคนดี ดังนั้นมูลค่าของเกมคือ 4 x 11 = 44
- มีการ์ดทรัมป์สูงสุด 4 ใบเท่านั้นดังนั้นคุณจะผ่านได้
- ไพ่ทรัมป์หกใบที่มีโพดำ แต่ไม่มีเอซที่ไม่ใช่คนที่กล้าหาญดังนั้นคุณจะผ่าน
หากกฎบางอย่างไม่ชัดเจนให้ไปข้างหน้าและแสดงความคิดเห็น ฉันโตมากับเกมนี้มันจึงยากสำหรับฉันที่จะตัดสินว่าฉันอธิบายทุกอย่างในรายละเอียดเพียงพอ
และตอนนี้ ... Happy Coding!
แก้ไข:ตามที่ฉันเห็นในความคิดเห็น (ขอบคุณ isaacg) มีกฎที่นับยอดปั้นต่อไปนี้หลังจาก 4 Jacks เป็น "Jack-factor" ดังนั้นมันจึงสามารถสูงถึง 11 เพื่อให้ความท้าทายนี้ง่าย และเพื่อไม่ให้ผู้คนสับสนกฎที่ฉันเสนอไว้ในตอนแรกจะยังคงเหมือนเดิม ดังนั้นปัจจัยสูงสุดอยู่ที่ 5