นักพัฒนาสร้างเกม 2048 ด้วย Bash น้อยกว่า 200 บรรทัด เก็บสถานะเกมทั้งหมดในตัวเลข 64 บิตเดียว

ทีมชุมชน BigGo
นักพัฒนาสร้างเกม 2048 ด้วย Bash น้อยกว่า 200 บรรทัด เก็บสถานะเกมทั้งหมดในตัวเลข 64 บิตเดียว

การพัฒนาเกมปริศนา 2048 ที่ชาญฉลาดเวอร์ชันหนึ่งได้ดึงดูดความสนใจจากนักพัฒนาด้วยประสิทธิภาพที่น่าทึ่ง เกมเวอร์ชัน terminal นี้บรรจุเกมทั้งหมดลงใน bash script น้อยกว่า 200 บรรทัด พร้อมเก็บข้อมูลสถานะเกมทั้งหมดในตัวเลข 64 บิตเพียงตัวเดียว

สถิติโค้ด:

  • การใช้งาน: สคริปต์ bash ต่ำกว่า 200 บรรทัด
  • การจัดเก็บสถานะ: ตัวเลข 64 บิตเพียงตัวเดียว (STATE=1939536775777635469)
  • ขนาดกระดาน: ตาราง 4x4
  • สถานะของช่อง: 12 ค่าที่เป็นไปได้ (ว่าง, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)
  • บิตต่อช่อง: 4 บิต
  • ช่วงของ Random seed: 0-99 (จัดเก็บภายในสถานะ 64 บิต)

การบีบอัดโค้ดที่น่าประทับใจผ่านการออกแบบที่ชาญฉลาด

ความกระชับของการพัฒนานี้มาจากเทคนิคการหมุนกระดานที่ยอดเยี่ยมซึ่งช่วยขจัดการเขียนโค้ดซ้ำ แทนที่จะเขียนตรรกะแยกสำหรับการเลื่อนช่องในทั้งสี่ทิศทาง (ขึ้น ลง ซ้าย ขวา) นักพัฒนาได้สร้างฟังก์ชัน squish เดียวที่จัดการการเลื่อนไปทางซ้าย สำหรับทิศทางอื่น ๆ กระดานจะหมุนก่อนและหลังการใช้งาน squish operation วิธีการนี้ช่วยลดปริมาณโค้ดที่ต้องการอย่างมาก

เทคนิคนี้ทำงานโดยถือว่าการเคลื่อนไหวทั้งหมดเป็นรูปแบบต่าง ๆ ของการดำเนินการพื้นฐานเดียวกัน เพียงแต่นำไปใช้กับมุมมองที่หมุนของกระดานเกม

รายละเอียดการใช้งานทางเทคนิค:

  • เทคนิคการหมุนกระดาน: ใช้ฟังก์ชัน "squish" เดียวสำหรับการเคลื่อนที่ไปทางซ้าย
  • การควบคุมการเคลื่อนที่: ปุ่ม w/a/s/d สำหรับขึ้น/ซ้าย/ลง/ขวา
  • การเข้ารหัสสถานะ: 4 บิตต่อช่อง × 16 ช่อง = รวม 64 บิต
  • โหมดกำหนดผลลัพธ์: ตั้งค่าตัวแปรสภาพแวดล้อม STATE เพื่อเล่นเกมแบบทำซ้ำได้
  • การติดตั้ง: คำสั่ง curl เดียวเพื่อดาวน์โหลดและรัน

การเก็บสถานะ 64 บิตจุดประกายการถกเถียงทางเทคนิค

ความสามารถของเกมในการเก็บสถานะกระดานทั้งหมดในตัวเลขเดียวได้สร้างการอภิปรายอย่างมากในหมู่นักพัฒนา แต่ละช่องสามารถเก็บค่าที่เป็นไปได้ 12 แบบ: ว่าง, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, หรือ 2048 เนื่องจากสถานะเหล่านี้พอดีกับ 4 บิตแต่ละตัว กริด 4x4 จึงต้องการ 64 บิตพอดี

อย่างไรก็ตาม สมาชิกในชุมชนบางคนได้ชี้ให้เห็นการปรับปรุงที่เป็นไปได้ ค่าต่ำสุดตามทฤษฎีจะอยู่ที่ประมาณ 60 บิต เนื่องจากจำนวนสถานะกระดานที่เป็นไปได้ทั้งหมดมีขนาดเล็กกว่าสิ่งที่ 64 บิตสามารถแสดงได้ คนอื่น ๆ ได้สังเกตว่าการพัฒนาปัจจุบันใช้บิตบางส่วนจาก 64 บิตเพื่อเก็บค่า random seed ระหว่าง 0 ถึง 99 ทำให้เกิดการเล่นเกมแบบ deterministic เมื่อแชร์สถานะเกม

ข้อจำกัดและการแลกเปลี่ยน

การออกแบบที่กะทัดรัดมาพร้อมกับข้อจำกัดบางประการ ไม่เหมือนเกม 2048 ต้นฉบับ เวอร์ชันนี้ไม่สามารถเล่นต่อหลังจากไปถึงช่อง 2048 ได้ ข้อจำกัด 64 บิตยังป้องกันไม่ให้ช่องเติบโตไปสู่ค่าที่สูงกว่าเช่น 4096 หรือมากกว่านั้น ซึ่งเป็นไปได้ในเวอร์ชันขยายของเกม

เทคนิคการหมุนกระดานดีมากในการทำให้โค้ดสั้น!

ผู้ใช้บางคนรายงานข้อบกพร่องเป็นครั้งคราว โดยเฉพาะเมื่อใช้กลยุทธ์มุมที่ช่องในตำแหน่งบางตำแหน่งอาจเปลี่ยนค่าโดยไม่คาดคิดระหว่างการเคลื่อนไหว

เปรียบเทียบกับ 2048 มาตรฐาน:

คุณสมบัติ Bitwise 2048 Standard 2048
ความยาวของโค้ด น้อยกว่า 200 บรรทัด bash แตกต่างกัน (โดยทั่วไปยาวกว่ามาก)
ไทล์สูงสุด 2048 สามารถเล่นต่อเกิน 2048 ได้
การแชร์สถานะ ได้ (ตัวเลข 64 บิต) ไม่มีระบบแชร์ในตัว
แพลตฟอร์ม Terminal/Command line เว็บ/แอปมือถือ
การเล่นซ้ำแบบกำหนดได้ ได้ โดยปกติไม่ได้

การแชร์และการเล่นเกมแบบ Deterministic

คุณสมบัติพิเศษอย่างหนึ่งช่วยให้ผู้เล่นสามารถแชร์สถานะเกมที่แน่นอนได้เพียงแค่ส่งตัวเลข 64 บิต เมื่อตั้งค่าตัวแปรสภาพแวดล้อม STATE เกมจะกลายเป็น deterministic อย่างสมบูรณ์ หมายความว่าลำดับการเคลื่อนไหวเดียวกันจะให้ผลลัพธ์ที่เหมือนกันเสมอ สิ่งนี้ทำให้สามารถแชร์ตำแหน่งที่ท้าทายหรือเล่นเกมที่น่าสนใจซ้ำได้อย่างแน่นอน

การพัฒนานี้แสดงให้เห็นว่าการเข้ารหัสที่สร้างสรรค์และการคิดเชิงอัลกอริทึมสามารถบีบอัดโปรแกรมโต้ตอบที่ซับซ้อนให้เป็นโค้ดที่กะทัดรัดอย่างน่าประหลาดใจในขณะที่ยังคงฟังก์ชันการทำงานเต็มรูปแบบ

อ้างอิง: The Bitwise Challenge: 2048