ฉันชอบ Tetris มาก แต่ฉันไม่ค่อยเก่ง เพียงครั้งเดียวที่ฉันอยากจะเห็นว่ายานอวกาศถอดสายตาของฉัน! และเนื่องจากคอมพิวเตอร์นั้นยอดเยี่ยมมากในทุกสิ่งทางออกที่เป็นไปได้เพียงอย่างเดียวคือการสร้างโปรแกรมให้เล่นเพื่อฉัน ... ยกเว้นคุณจะทำสิ่งนั้นให้ฉัน!
ให้ tetromino (รูปร่างที่ทำจากสี่สี่เหลี่ยม) และแผนที่ของสนามเด็กเล่นคุณต้องวาง tetromino เพื่อให้ได้คะแนนมากที่สุด (ทำจำนวนแถวที่เต็มไปด้วยบล็อก) และสร้างจำนวนน้อยที่สุด ของหลุมใหม่ (พื้นที่ว่างที่ไม่สามารถ "เห็น" ด้านบนของสนามเด็กเล่น1 )
อินพุต
อินพุตจะมีอักขระบนบรรทัดเดียวที่แทน tetromino ที่ลดลงตามด้วยช่องว่างขนาด 10 * 18 ตาราง2 ( ) และเครื่องหมายบวก (
+
)
ตัวละครดังกล่าวเป็นตัวแทนของ tetrominoes ฐานเจ็ดที่พบใน Tetris ชิ้นส่วนทั้งหมดสามารถหมุนได้ 90 องศา แต่ไม่พลิก tetrominoes ทั้งหมดและการหมุนของพวกเขามีดังนี้:
#
S = ## ##
## #
#
Z = ## ##
## #
# ### ##
L = # # # #
## # ###
# ### ##
J = # # # #
## # ###
# # #
T = ### ## ### ##
# # #
O = ##
##
#
I = # ####
#
#
ตารางแสดงเขตการเล่นของ Tetris ด้วย+
การวางบล็อกก่อนหน้านี้ ดังนั้นอินพุตตัวอย่างอาจเป็นดังต่อไปนี้:
I
+ ++
+ +++++
++ +++++++
++ +++++++
++ +++++++
++ +++++++
++++++ +++
เอาท์พุต
เอาต์พุตของคุณจะเหมือนกับอินพุต แต่กับ tetromino ในตำแหน่งที่เหมาะสมที่สุด tetromino ควรถูกแทนด้วย#
เพื่อแยกความแตกต่างจากบล็อกที่วางไว้ล่วงหน้า นอกจากนี้คุณยังต้องแสดงจำนวนบรรทัด / หลุมที่ตำแหน่งของคุณสร้างในรูปแบบของxL yH
บรรทัดใหม่
ผลลัพธ์สำหรับตัวอย่างที่ระบุข้างต้นจะเป็น3ต่อไปนี้:
I
+ ++
+ +++++
++#+++++++
++#+++++++
++#+++++++
++#+++++++
++++++ +++
4L 0H
คุณจะได้ผลลัพธ์ที่ดีที่สุดเท่านั้น ในกรณีที่มีสองกรณีขึ้นไปที่ให้คะแนนเท่ากันคุณจะต้องส่งออกทั้งหมด (คั่นด้วยบรรทัดว่าง) ผลลัพธ์ที่ดีที่สุดจะถูกกำหนดโดยการเรียงตามจำนวนบรรทัดที่ทำคะแนน (มากไปหาน้อย) ก่อนจากนั้นจำนวนของหลุมใหม่ที่สร้างขึ้น (จากน้อยไปมาก) ดังนั้นเป็นคะแนนที่ดีกว่า1L 1H
0L 0H
ฉันจะพยายามสร้างรายการของอินพุตที่หลากหลายและเอาต์พุตที่คาดหวังซึ่งคุณสามารถทดสอบโปรแกรมของคุณได้ ดูพื้นที่นี้
กฎและความกำกวม
- นี่คือcode-golfดังนั้นการติดตั้งที่สั้นที่สุดจึงเป็นชัยชนะ
- อินพุต / เอาต์พุตอาจเป็นสื่อที่เหมาะสมกับภาษาเป้าหมายของคุณ (เช่นไฟล์ stdin / stdout พื้นที่ข้อความ)
- หากภาษาเป้าหมายของคุณไม่รองรับอินพุตหลายบรรทัด (หรือไม่สะดวกในการทำเช่นนั้น) คุณอาจกำหนดเขตข้อมูลแต่ละบรรทัดด้วยเครื่องหมายจุลภาค (
,
) แทน - คุณสามารถละเว้นการส่งออกของบรรทัดว่างใด ๆ ในตาราง
- โปรดจำไว้ว่า tetromino ตกจากด้านบน - คุณไม่สามารถวางชิ้นส่วน "ใต้ดิน" คุณอาจสมมติว่าตำแหน่งที่เป็นไปได้ทั้งหมดของชิ้นส่วนจะอยู่ที่ "ระดับพื้นผิว" (กล่าวคือไม่มีบล็อกระหว่างชิ้นส่วนและด้านบนของกระดาน)
- สมมติว่าไม่มีสถานการณ์ใดที่คุณจะถูกบังคับให้เล่นเกมเหนือ (tetromino ที่วางไว้แตะที่ตรงกลางบนสุดของสนาม)
- โซลูชั่นที่เหมือนกันในผลลัพธ์จะต้องถูกละเว้น (เช่นมี 3 ทางออกถ้าคุณหมุน
O
ชิ้นส่วนอย่างไร้เดียงสา)
1ฉันรู้ว่าสิ่งนี้จะสร้างผลบวกที่ผิดพลาด แต่เป็นการทำให้เข้าใจง่าย
2นี่คือขนาดกริดที่ใช้ในเวอร์ชั่นเกมบอย
3ใช่0H
ถูกต้อง ตรวจสอบอีกครั้งฉันพูดรูใหม่ ; ^)