ลักษณะ
เราพิจารณาเวอร์ชั่นที่เรียบง่ายของ Tetris ที่การเคลื่อนไหวแต่ละครั้งประกอบด้วย:
- หมุนชิ้นส่วนตามเข็มนาฬิกา 0 ถึง 3 ครั้ง
- วางตำแหน่งชิ้นส่วนที่คอลัมน์ที่กำหนด
- ลดลงอย่างรวดเร็ว
เป้าหมายคือการกำหนดจำนวนของสายที่เสร็จสมบูรณ์รับรายการของการเคลื่อนไหว Tetris ดังกล่าว
แถวที่เสร็จสมบูรณ์จะถูกลบออกเมื่อชิ้นส่วนถูกดร็อปตามกฎ Tetris มาตรฐาน
สนามแข่งขัน
สนามเด็กเล่นกว้าง 10 คอลัมน์ ไม่มีเกมโอเวอร์และสันนิษฐานว่ามีพื้นที่และเวลาเพียงพอในการดำเนินการข้างต้นเสมอไม่ว่าจะมีการกำหนดค่าของสนามเด็กเล่น ความสูงของสนามเด็กเล่นไม่สำคัญที่นี่ แต่คุณสามารถใช้มาตรฐาน 22 แถวเป็นขีด จำกัด บน
รูปร่างของ Tetrominoes
อินพุต / เอาต์พุต
อินพุต
รายการที่คั่นด้วยเครื่องหมายจุลภาคของการย้าย Tetris เข้ารหัสด้วย 3 ตัวอักษร อักขระสองตัวแรกอธิบายถึงรูปร่างของ Tetromino ที่จะใช้และตัวสุดท้ายจะอธิบายตำแหน่งที่มันหล่น
- tetromino:
I
,O
,T
,L
,J
,Z
หรือS
ในลำดับเดียวกับที่ดังกล่าวข้างต้น - จำนวนการหมุนตามเข็มนาฬิกา:
0
ถึง3
- คอลัมน์: ที่จะ
0
9
นี่คือคอลัมน์ที่มุมบนซ้ายของชิ้น (ทำเครื่องหมายด้วยx
ภาพด้านบน) ตั้งอยู่หลังการหมุน1
มันจะสันนิษฐานว่าการเคลื่อนไหวทั้งหมดในรายการที่ให้นั้นถูกต้อง ไม่จำเป็นต้องตรวจสอบรายการที่ไม่ถูกต้องเช่นI07
( I
รูปทรงแนวนอนวางอยู่ทางด้านขวาเกินไป)
1 คุณมีอิสระที่จะใช้อัลกอริทึมการหมุนจริงหรือฮาร์ดโค้ดรูปร่างที่แตกต่างกันทั้งหมดตราบใดที่x
อยู่ในคอลัมน์ที่กำหนดโดยอักขระที่สามของการย้าย
เอาท์พุต
จำนวนบรรทัดที่เสร็จสมบูรณ์
ตัวอย่าง
O00,T24
จะสร้างตำแหน่งแรกและO00,T24,S02,T01,L00,Z03,O07,L06,I05
จะสร้างตำแหน่งที่สอง
ดังนั้นลำดับต่อไปนี้จะสร้าง Tetris และควรกลับมา4
:
O00,T24,S02,T01,L00,Z03,O07,L06,I05,I19
กรณีทดสอบ
1) "O00,T24,S02,T01,L00,Z03,O07,L06,I05,I19" -> 4
2) "S00,J03,L27,Z16,Z18,I10,T22,I01,I05,O01,L27,O05,S13" -> 5
3) "I01,T30,J18,L15,J37,I01,S15,L07,O03,O03,L00,Z00,T38,T01,S06,L18,L14" -> 4
4) "S14,T00,I13,I06,I05,I19,L20,J26,O07,Z14,Z10,Z12,O01,L27,L04,I03,S07,I01,T25,J23,J27,O01,
I10,I10" -> 8
5) "O00,T24,L32,T16,L04,Z11,O06,L03,I18,J30,L23,Z07,I19,T05,T18,L30,I01,I01,I05,T02" -> 8
หน้าทดสอบ
คุณสามารถใช้JSFiddle นี้เพื่อทดสอบรายการย้าย