การพัฒนาเกมปริศนา 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