เมื่อไม่นานมานี้ฉันซื้อกระเป๋าเงินใหม่ซึ่งสามารถถือไพ่ได้ 8 ใบ (ทั้งสี่ด้าน) อย่างไรก็ตามดูเหมือนว่าฉันจะมีการ์ดมากกว่านั้นและฉันต้องเลือกสิ่งที่ฉันต้องการพกพาไปด้วย การ์ดบางใบที่ฉันใช้บ่อยกว่าการ์ดอื่น ๆ แต่การ์ดที่ฉันชอบพกติดตัวไม่จำเป็นต้องเป็นการ์ดที่ฉันใช้บ่อยที่สุด
ความท้าทาย
ให้สแต็คการ์ดคืนเลย์เอาท์ของกระเป๋าเงินของฉันด้วยวิธีที่ดีที่สุดที่เป็นไปได้ โครงร่างควรเป็นดังนี้:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
ขณะนี้ฉันมีการ์ดต่อไปนี้ - สแต็คจะประกอบด้วยตัวเลือกจากสิ่งเหล่านี้เสมอ:
- 1บัตรประจำตัวประชาชน ( ID )
- 1ใบขับขี่ ( DL )
- 2บัตรเครดิต ( CC )
- 5เดบิตการ์ด ( DC )
- 1บัตรขนส่งสาธารณะ ( PC )
- บัตรเข้ายิม1ใบ ( GC )
- บัตรสมาชิก9ใบจากร้านค้าและคลังสินค้าแบบสุ่ม ( MC )
ฉันมีความต้องการและข้อ จำกัด บางประการ:
- การ์ดเรียงตามลำดับความสำคัญ: ID, DL, CC, DC, PC, GC, MC
- การ์ดที่เรียงตามความถี่ในการใช้งาน: CC, DC, PC, GC, MC, ID, DL
- เพื่อเหตุผลด้านความปลอดภัยจำนวนบัตรเดบิตและบัตรเครดิตทั้งหมดในกระเป๋าของฉันอาจมากกว่า 1 ผลรวมของบัตรอื่น ๆ ทั้งหมดที่จะไปในกระเป๋าของฉัน ( N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1)
- ถ้ามีแสดงบัตรประจำตัวประชาชนและใบขับขี่ของฉันควรเข้าแถวที่ 1 เสมอซึ่งไม่ได้หมายความว่าการ์ดอื่น ๆ อาจไม่อยู่ในตำแหน่งที่ 1
- การ์ดที่ใช้บ่อยที่สุดจากสแต็คควรอยู่ในแถวที่ 4 เสมอ
กฎระเบียบ
- ไม่มีไพ่ 2 ใบสามารถครอบครองจุดเดียวกัน
- บัตรที่มีลำดับความสำคัญสูงกว่ามักต้องการบัตรที่มีลำดับความสำคัญต่ำกว่ายกเว้นข้อ จำกัด DC / CC จะเริ่มขึ้น
- ID / DL ที่แถว 1 ลบล้างกฎความถี่: หากมีเพียง ID ที่ระบุไว้รหัสนั้นจะไปในแถวที่ 1 และแถวที่ 4 จะว่างเปล่า!
- การจัดรูปแบบอินพุตสามารถทำได้ในแบบที่คุณต้องการตราบใดที่คำสั่งของสแต็กอินพุตยังคงอยู่ เช่น
ID,CC,PC,MC,MC,MC,DL
อาจจะมีการจัดเป็นเช่นหรือ1ID 1CC 1PC 3MC 1DL 0DC 0GC
ID CC PC MC MC MC DL
การจัดรูปแบบผลลัพธ์มีข้อ จำกัด เล็กน้อย: แถวทั้งหมดต้องเริ่มต้นที่บรรทัดใหม่คอลัมน์จะต้องคั่นด้วยวิธีใดวิธีหนึ่ง อาจแสดงจุดที่ว่างเปล่าตามที่คุณต้องการตราบใดที่มันไม่ทำให้รูปแบบ 4x2 ยุ่งเหยิง
อาจมีโซลูชัน / คำสั่งซื้อมากกว่าหนึ่งรายการขึ้นอยู่กับว่าคุณให้บริการแบบใด
- คุณอาจคิดว่าการ์ดประเภทเดียวกันจะถูกจัดกลุ่มที่อินพุต
- นอกเหนือจากข้างต้นมาตรฐาน รหัสกอล์ฟ ใช้กฎและช่องโหว่
โบนัส
คุณได้รับอนุญาตให้ลบ15%ของจำนวนเงินคืนถ้าคุณส่งคืนบัตรใด ๆ ที่ไม่ได้อยู่ในกระเป๋าเงินด้วย พิมพ์ "เหมาะกับ!" ในกรณีที่ไม่มีการ์ดเหลืออยู่ ผลลัพธ์เพิ่มเติมนี้ควรแยกออกจากโครงร่างการเรียกคืนอย่างชัดเจน
ตัวอย่าง
การป้อนข้อมูล:
ID, DL, CC, GC, MC
2 เอาต์พุตที่เป็นไปได้:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
การป้อนข้อมูล:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 เอาต์พุตที่เป็นไปได้:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
การป้อนข้อมูล:
DC, DC, CC, CC, GC, DL
2 เอาต์พุตที่เป็นไปได้:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
การป้อนข้อมูล:
CC, DC, DC, DC
2 เอาต์พุตที่เป็นไปได้:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
การป้อนข้อมูล:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 เอาต์พุตที่เป็นไปได้:
MC MC MC DC
PC GC or DC GC
DC DC PC MC
CC CC CC CC
optional: e.g. (DC, DC, DC, MC, MC, MC, MC) or (3DC, 4MC)
การป้อนข้อมูล:
MC, MC, MC, MC, MC, MC, MC
2 เอาต์พุตที่เป็นไปได้:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
การป้อนข้อมูล:
ID, CC
2 เอาต์พุตที่เป็นไปได้:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
นี่คือ รหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุด (เป็นไบต์) จะชนะ