PlayPendium
Contraption · อาหารสมอง

ด่านที่พิสูจน์ตัวเองว่าแก้ได้

เกมนี้ไม่เคยออกแบบปริศนาด้วยมือเลย มันเพาะปริศนาขึ้นมาจากตัวเลขเพียงตัวเดียว แล้วเล่นปริศนานั้นแข่งกับตัวเองเพื่อให้แน่ใจว่ามันไม่ง่ายจนไร้ความหมายและไม่ยากจนเป็นไปไม่ได้ ก่อนที่คุณจะได้เห็นมันเสียอีก

วันที่ของวันนี้ 1 ตัวเลขที่ถูกแฮชเป็นซีด
กลายเป็น
ปริศนารายวัน 1 สนามเดียวกันทุกประการสำหรับทุกคน

เขียนและเรียบเรียงเป็นภาษาอังกฤษ ฉบับภาษาไทยนี้จัดทำขึ้นด้วยการแปลด้วยเครื่อง ในจุดที่ความแม่นยำมีความสำคัญ ให้ถือต้นฉบับภาษาอังกฤษเป็นหลัก อ่านต้นฉบับภาษาอังกฤษ →

01 · ทุกสิ่งจากตัวเลขเพียงตัวเดียว

โลกทั้งใบพับเก็บไว้ในซีดเดียว

ด่านของ Contraption ไม่ได้ถูกเก็บไว้ที่ไหนเลย ไม่มีไฟล์ที่ระบุว่าประตูอยู่ตรงไหนหรือหิ้งถูกจัดวางอย่างไร แต่ทั้งด่าน ทั้งจุดเริ่มต้นของลูกบอล ตำแหน่งของประตู จำนวนและตำแหน่งของกำแพงตายตัว รวมถึงคลังชิ้นส่วนที่คุณได้รับ ล้วนถูกคำนวณขึ้นจากตัวเลขตั้งต้นเพียงตัวเดียวที่เรียกว่าซีด (seed) ป้อนซีดเดียวกันให้ตัวสร้างด่าน แล้วคุณจะได้ปริศนาเดิมเป๊ะทุกไบต์ 1

ที่เป็นเช่นนั้นได้ก็เพราะแหล่ง "ความสุ่ม" เพียงแหล่งเดียวของตัวสร้างด่านคือตัวสร้างเลขสุ่มเทียมแบบกำหนดได้ขนาดเล็กตัวหนึ่ง ตัวที่ Contraption ใช้คือ mulberry32 ตัวสร้างขนาด 32 บิตอันกะทัดรัดที่เขียนโดยทอมมี เอตทิงเจอร์ (Tommy Ettinger) คุณสังเกตมันได้จากค่าคงที่อันเป็นเอกลักษณ์ 0x6d2b79f5 ซึ่งถูกบวกเข้ากับสถานะทุกครั้งที่สุ่มค่า 2 มันเร็ว เขียนได้ในไม่กี่บรรทัด และที่สำคัญที่สุดคือมันไม่ได้สุ่มเลยแม้แต่น้อย มันคือลำดับทางคณิตศาสตร์ที่ตายตัวซึ่งเพียงแค่ดูเหมือนถูกสับเท่านั้น ให้จุดเริ่มต้นแก่มัน แล้วมันจะผลิตสายตัวเลขเดิมออกมาตลอดไป จากนั้นตัวสร้างด่านก็อ่านสายตัวเลขนั้นเพื่อตัดสินใจว่าจะวางทุกอย่างไว้ตรงไหน

02 · ปริศนารายวัน

วันที่กลายเป็นความท้าทายที่ใช้ร่วมกันได้อย่างไร

โหมดรายวัน (Daily) อาศัยความกำหนดได้นี้เพื่อทำสิ่งที่เป็นเรื่องของสังคม ซีดของมันไม่ได้มาจากการสุ่ม แต่ถูกผลิตขึ้นจากปฏิทิน เกมนำวันที่ของวันนี้ตามเวลาสากลมาเขียนเป็นสตริงสั้น ๆ อย่าง "contraption:2026-7-28" แล้วส่งข้อความนั้นผ่านฟังก์ชันแฮชเพื่อเคี่ยวให้เหลือตัวเลข 32 บิตเพียงตัวเดียว 1

แฮชที่ใช้คือ FNV-1a ตัวผสมค่าแบบไม่เข้ารหัสลับที่รู้จักกันดี มันเริ่มจากค่าออฟเซ็ตตายตัวคือเลขฐานสิบ 2166136261 หรือ 0x811c9dc5 แล้วสำหรับอักขระแต่ละตัวก็นำตัวอักษรนั้นมาผสมเข้าไปด้วยการ exclusive-or จากนั้นคูณด้วยจำนวนเฉพาะ FNV คือ 16777619 3 ผลที่ได้คือตัวเลขที่คงที่สำหรับวันหนึ่ง ๆ แต่แตกต่างกันอย่างสุดขั้วจากวันหนึ่งไปอีกวันหนึ่ง ดังนั้นการเปลี่ยนอักขระเพียงตัวเดียวในวันที่ก็ทำให้ซีดกระจัดกระจายไปโดยสิ้นเชิง และเพราะปฏิทินเป็นแบบเดียวกันสำหรับทุกคน ซีดจึงเหมือนกัน และปริศนาก็เหมือนกันด้วย คนแปลกหน้าสองคนที่อยู่คนละซีกโลกเปิดโหมดรายวันขึ้นมาแล้วเจอสนามเดียวกันทุกประการ ซึ่งนั่นแหละคือสิ่งที่ทำให้การเปรียบเทียบคะแนนมีความหมาย

ความท้าทายรายวันยุติธรรมไม่ใช่เพราะมีเซิร์ฟเวอร์ส่งด่านเดียวกันให้ทุกคน แต่เพราะสำเนาเกมของทุกคนต่างคำนวณด่านเดียวกันขึ้นมาใหม่ด้วยตัวเองจากวันที่เดียวกัน

03 · ตัวสร้างด่านย้อนกลับมาตั้งคำถามกับตัวเอง

ปฏิเสธปริศนาที่แก้ตัวเองได้

เรขาคณิตแบบสุ่มนั้นง่าย แต่เรขาคณิตแบบสุ่มที่ดีนั้นไม่ง่ายเลย ตัวสร้างด่านที่แค่โปรยประตูกับหิ้งสองสามอันลงไปจะสร้างด่านที่ลูกบอลซึ่งถูกปล่อยจากด้านบนตกลงไปในประตูเองตรง ๆ ออกมาบ้างในบางครั้ง นั่นไม่ใช่ปริศนา แต่เป็นฉากคัตซีน ดังนั้นก่อนที่ Contraption จะยอมรับโลกที่เป็นตัวเลือก มันจะรันการทดสอบเงียบ ๆ ที่โค้ดเรียกว่า preSolved นั่นคือมันจำลองด่านนั้นโดยไม่วางชิ้นส่วนใดเลย แล้วตรวจว่าลูกบอลเปล่า ๆ ไปถึงประตูได้ด้วยแรงโน้มถ่วงเพียงอย่างเดียวหรือไม่ ถ้าถึง ด่านนั้นจะถูกโยนทิ้งและตัวสร้างด่านจะสุ่มใหม่อีกครั้ง 1

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

04 · ตัวแก้ปริศนาจิ๋วที่ติดตั้งมาในตัว

"ทำได้ด้วยชิ้นส่วนเดียวไหม"

การปฏิเสธด่านที่ง่ายเกินไปเป็นเพียงครึ่งหนึ่งของงาน อีกอันตรายหนึ่งคือด่านที่เป็นไปไม่ได้ ประตูที่ซ่อนอยู่ในที่ซึ่งไม่มีการจัดวางชิ้นส่วนแบบใดเข้าถึงได้ Contraption ป้องกันเรื่องนี้ด้วยตัวแก้ปริศนาแบบลองทุกทางขนาดเล็กที่ชื่อ plausiblySolvable มันไม่ได้คิดอย่างชาญฉลาด มันแค่ลองไปเรื่อย ๆ 1

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

การค้นหาของตัวแก้ปริศนาแบบชิ้นส่วนเดียว ตารางหยาบ ๆ พร้อมการเอียงสี่แบบในแต่ละจุด
พารามิเตอร์การกวาดช่วงความหมาย
ทางลาด X15 → 85 ทีละ 14คอลัมน์ตามแนวขวางของสนาม
ทางลาด Y30 → 120 ทีละ 18แถวไล่ลงมาตามสนาม
มุมที่ลอง4±0.45 และ ±0.8 เรเดียน
การทดสอบต่อการวางหนึ่งครั้งการจำลองเต็มรูปแบบ 1 ครั้งลูกบอลไปถึงประตูหรือไม่

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

05 · แนวคิดเบื้องลึก

สร้างแล้วทดสอบ ปัญญาแบบที่ถ่อมตัวที่สุด

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

สิ่งที่ทำให้เวอร์ชันของ Contraption สง่างามก็คือ การทดสอบนั้นไม่ใช่ตัวแทนแบบประหยัดของความสามารถในการเล่นได้ แต่มันคือความสามารถในการเล่นได้นั้นเอง ตัวสร้างด่านไม่ได้ประเมินว่าด่านยุติธรรมหรือไม่ด้วยการนับหิ้งหรือวัดระยะทาง มันเล่นด่านนั้นจริง ๆ สองครั้ง ครั้งแรกเล่นแบบว่างเปล่าเพื่อให้แน่ใจว่าไม่ใช่ของแจกฟรี และอีกครั้งเล่นด้วยทางลาดหยั่งเชิงเพื่อให้แน่ใจว่ามีเส้นทางอยู่จริง ฟิสิกส์แบบกำหนดได้ชุดเดียวกันที่จะตัดสินคำตอบของคุณคือฟิสิกส์ที่ตรวจรับรองปริศนานั้นมาแล้ว ไม่มี "ตัวตรวจสอบด่าน" แยกต่างหากที่อาจคลาดเคลื่อนไปจากกติกาจริง เพราะมีกติกาอยู่เพียงชุดเดียว และใช้กับทุกสิ่ง

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

Sources & notes
  1. Seed-to-level generation, the preSolved rejection test, the plausiblySolvable one-ramp solver (grid ranges, four angles, up to 40 attempts, fallback world), and the daily-seed date string are all read directly from Contraption's own game engine and random-number code. Grounded in the game's code, not invented.
  2. mulberry32 is a compact 32-bit pseudo-random generator by Tommy Ettinger; it advances its state with the constant 0x6d2b79f5 and has a period of 2³². Author's reference gist (with his own later caveats on its equidistribution). gist.github.com/tommyettinger/46a874533244883189143505d203312c
  3. "Fowler–Noll–Vo hash function." Wikipedia, the 32-bit FNV offset basis is 2166136261 (0x811c9dc5) and the FNV prime is 16777619 (0x01000193); FNV-1a XORs each byte into the hash first and then multiplies by the prime. en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function
  4. On generate-and-test / "generation followed by evaluation" as a general search and problem-solving strategy, and its kinship with procedural generation and evolutionary methods. See "Procedural generation," Wikipedia. en.wikipedia.org/wiki/Procedural_generation
  5. Further reading on Procedural generation, [2410.15644] Procedural Content Generation in Games: A Survey with Insights on Emerging LLM Integration. arxiv.org.
  6. Further reading on Procedural generation, Procedural Content Generation in Games: A Survey with Insights on Emerging LLM Integration. doi.org.
  7. Further reading on Procedural generation, "Procedural City Generation with Combined Architectures for Real-time V" by Gr. open.clemson.edu.
Was this worth reading?
← Back to Contraption
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Inspirations · © 2026