🪜 เกมบันได (Amidakuji)
คลิกที่ปุ่ม วาดบันได แล้วเครื่องมือจะวางเส้นแนวตั้งหนึ่งเส้นต่อผู้เล่น จากนั้นจะกระจายขั้นบันไดแนวนอนข้าม 12 แถวที่กำหนดไว้โดยใช้ Math.random() เนื่องจากขั้นบันไดแต่ละขั้นจะสลับเพียงเส้นที่อยู่ติดกันสองเส้น และไม่มีขั้นบันไดสองขั้นในแถวเดียวกันที่สัมผัสกันได้ บันไดทั้งหมดจึงได้รับการรับประกันทางคณิตศาสตร์ว่าจะจับคู่ผู้เล่นแต่ละคนกับผลลัพธ์เดียวแน่นอน ไม่มีใครได้ผลลัพธ์ซ้ำกัน ไม่ว่าขั้นบันไดจะวางอยู่ที่ใด เมื่อแตะชื่อหลังจากนั้น canvas จะวาดบันไดเดิมซ้ำพร้อมแสดงเส้นทางของผู้เล่นคนนั้นสว่างขึ้น คุณจึงได้เฝ้าดูการตัดสินใจทีละขั้นตอนแทนที่จะได้รับคำตอบทันที
เกมบันไดสร้างบันไดจับฉลากแบบ Amidakuji (ghost-leg) สุ่มในเบราว์เซอร์ของคุณ โดยใช้ Math.random() ของ JavaScript เพื่อวางขั้นบันได และใช้ HTML Canvas API เพื่อวาดและแสดงภาพเคลื่อนไหวของเส้นทางผู้เล่นแต่ละคนไปยังผลลัพธ์ที่แตกต่างกัน
ออกแบบมาเพื่อความเป็นส่วนตัว. เครื่องมือนี้ทำงานทั้งหมดในเบราว์เซอร์ของคุณ — ข้อมูลที่คุณป้อนไม่ได้ถูกอัปโหลดหรือเก็บไว้ และยังสามารถใช้งานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต
เกี่ยวกับ
การรับประกันความยุติธรรมในที่นี้ไม่ใช่การตลาด แต่เป็นผลโดยตรงจากการวางขั้นบันได แต่ละแถวทั้ง 12 แถวถูกสร้างขึ้นโดยการเดินผ่านคู่ของเส้นที่อยู่ติดกันทั้งหมด และทำการสุ่มด้วย Math.random() < 0.45 เพื่อวางขั้นบันได แต่โค้ดจะข้ามช่องหนึ่งหากช่องที่อยู่ด้านซ้ายเพิ่งได้รับขั้นบันได ("!(i > 0 && row[i-1])") ความคุ้มครองนี้เดียวทำให้ไม่มีแถวใดสามารถมีการสลับที่ทับซ้อนกันได้ ดังนั้นแต่ละแถวจึงเป็นชุดของการสลับที่ที่ไม่ทับซ้อนกันโดยสมบูรณ์ ซึ่งเป็นการจัดเรียงใหม่ของคอลัมน์ การวาง 12 แถวที่แตกต่างกันทับกันกันคือการรวมการจัดเรียงใหม่ 12 ครั้งต่อกัน และการรวมการจัดเรียงใหม่ย่อมเป็นการจัดเรียงใหม่เสมอ ด้วยเหตุนี้ ไม่มีโอกาสที่ผู้เล่นสองคนจะได้รับผลลัพธ์เดียวกันในที่นี้ ไม่ว่าขั้นบันไดจะอยู่ในตำแหน่งใดก็ตาม
การรับประกันนี้ไม่ครอบคลุมถึงการกระจายผลลัพธ์ให้เท่าเทียมกันในคู่ทั้งหมด บันไดจะใช้แถวเดียวกันทั้ง 12 แถวเสมอไม่ว่าคุณจะใส่ผู้เล่นกี่คนก็ตาม ค่าคงที่นี้ถูกกำหนดไว้ในแหล่งข้อมูล ไม่ได้ปรับตามจำนวนผู้เล่น สำหรับช่วงผู้เล่นที่เครื่องมือนี้ถูกออกแบบมาใช้ คือ 3 ถึง 10 คน 12 แถวที่มีการสุ่มที่มีโอกาส 45% ให้การแลกเปลี่ยนที่เพียงพอที่จะรู้สึกเหมือนการสับเปลี่ยนที่แท้จริง แต่ถ้าคุณเพิ่มผู้เล่นให้เป็น 30 หรือ 50 คน 12 แถวจะไม่เพียงพอที่จะสร้างการแลกเปลี่ยนที่เพียงพอที่จะครอบคลุมคู่ทั้งหมดด้วยโอกาสเท่าเทียมกัน ผู้เล่นมีแนวโน้มที่จะอยู่ใกล้กับคอลัมน์เริ่มต้นมากกว่าที่จะได้รับผลลัพธ์ที่แท้จริงแบบสุ่ม หากคุณต้องการการจับคู่แบบสุ่มที่ยุติธรรมสำหรับกลุ่มขนาดใหญ่ เครื่องมือที่ใช้การสุ่มแบบแบนจะดีกว่าการใช้บันไดที่มีแถวจำกัดที่ 12 แถว
ควรระบุชัดเจนว่า Math.random() คืออะไรและไม่ใช่อะไร มันคือตัวสร้างตัวเลขสุ่มที่มีในเบราว์เซอร์ ซึ่งเร็วและเพียงพอสำหรับการตัดสินใจว่าใครจะล้างจาน แต่ไม่ใช่สิ่งที่ผู้เข้าร่วมสามารถมีอิทธิพลจากภายนอกหน้าเว็บได้โดยทั่วไป แต่มันไม่ปลอดภัยในด้านการเข้ารหัส: สถานะภายในของมันสามารถทำนายได้ในหลักการ หากมีคนสามารถสังเกตผลลัพธ์เพียงพอหรือรู้วิธีการทำงานของเครื่องมือ ด้วยเหตุนี้ ร้านค้าที่มีเงินจริง ลอตเตอรี่ที่ได้รับอนุญาต และกิจกรรมใด ๆ ที่มีความเสี่ยงทางกฎหมายจะใช้ crypto.getRandomValues() หรือตัวสร้างตัวเลขสุ่มที่ได้รับการตรวจสอบและรับรองแทน ตัวเครื่องมือนี้ไม่ได้ใช้ทั้งสองอย่างนี้ และไม่จำเป็นต้องใช้สำหรับการแบ่งงานหรือการเลือกผู้ซื้อเครื่องดื่ม แค่ไม่ต้องใช้เครื่องมือนี้สำหรับการจับฉลากที่มีเงินรางวัลจริง
ในด้านการโต้ตอบ: "วาดบันได" จะเรียกใช้ฟังก์ชันวางขั้นบันไดใหม่ทั้งหมด ดังนั้นการคลิกแต่ละครั้งจึงเป็นการจับฉลากที่เป็นอิสระโดยไม่มีความจำของครั้งก่อนหน้า "เปิดเผยทั้งหมด" จะข้ามการแสดงผลทีละชื่อและแสดงการจับคู่ของผู้เล่นกับผลลัพธ์ทั้งหมดบนบันไดเดียวกันในครั้งเดียว ไม่มีปุ่มบันทึก ส่งออก หรือแชร์ในเวอร์ชันนี้ บันไดมีอยู่เพียงเป็นพิกเซลบนองค์ประกอบ canvas และการรีเฟรชหน้าเว็บจะลบมันไปพร้อมกับกล่องข้อความสองกล่อง ซึ่งจะกลับไปเป็นชื่อตัวอย่างและรางวัลตัวอย่าง หากคุณต้องการบันทึกผลลัพธ์ วิธีเดียวคือใช้เครื่องมือแคปหน้าจอของเบราว์เซอร์หรืออุปกรณ์ของคุณก่อนกดออกจากหน้า ทุกอย่างเกี่ยวกับเครื่องมือนี้เป็นไปตามที่ระบุไว้: ทำงานฝั่งไคลเอ็นต์ทั้งหมดโดยไม่มีการร้องขอเครือข่ายหลังจากโหลดหน้าเว็บเสร็จแล้ว ดังนั้นสิ่งที่คุณพิมพ์จะไม่ถูกอัปโหลด และยังคงทำงานได้โดยไม่มีการเชื่อมต่ออินเทอร์เน็ตเลย
วิธีใช้งาน
- พิมพ์ชื่อผู้เล่นแต่ละคนลงในกล่อง Players หนึ่งชื่อต่อบรรทัด — ชื่อตัวอย่าง (Amy, Ben, Cara, Dan) แสดงเพียงรูปแบบและสามารถเปลี่ยนใหม่ได้ทั้งหมด
- พิมพ์ผลลัพธ์ที่ตรงกันลงในกล่อง Outcomes หนึ่งรายการต่อบรรทัด — เครื่องมือจะปฏิเสธการวาดและแสดงข้อผิดพลาดหากรายการทั้งสองมีจำนวนบรรทัดไม่เท่ากัน
- คลิกที่ "วาดบันได" เพื่อเริ่มรอบใหม่ของการเรียกใช้ Math.random() และแสดงชุดขั้นบันไดใหม่บน canvas — ทุกการคลิกเป็นการจับฉลากที่เป็นอิสระจากกัน
- แตะหรือคลิกที่ชื่อผู้เล่นเหนือบันไดเพื่อแสดงภาพเคลื่อนไหวของเส้นทางในสีเน้นจากบนลงล่างและเปิดเผยผลลัพธ์ที่จับคู่ไว้ด้านล่าง
- คลิกที่ "เปิดเผยทั้งหมด" แทน หากคุณต้องการข้ามการแสดงผลทีละคนและดูการจับคู่ของผู้เล่นกับผลลัพธ์ทั้งหมดพร้อมกันบนบันไดเดียวกัน
คำถามที่พบบ่อย
- บันไดใช้ตัวสร้างตัวเลขสุ่มที่แท้จริงและคาดเดาไม่ได้หรือไม่?
- ตัวเครื่องมือใช้ Math.random() ที่มีมากับเบราว์เซอร์ ไม่ใช่ crypto.getRandomValues() ที่ปลอดภัยทางวิทยาการรหัสลับ ซึ่งเพียงพอสำหรับการแบ่งงานบ้านหรือตัดสินว่าใครจะซื้อกาแฟ แต่โดยหลักการแล้วสถานะภายในของ Math.random() ไม่ได้ปลอดภัยจากการคาดเดาหากมีผู้สังเกตผลลัพธ์ก่อนหน้าได้มากพอ อย่าใช้เครื่องมือนี้ — หรือบันไดที่ใช้ Math.random() ใดๆ — ในการจัดจับฉลากที่มีเงินจริง รางวัลที่มีผลทางกฎหมาย หรือสถานการณ์ที่ผู้เข้าร่วมมีแรงจูงใจในการวิเคราะห์ย้อนกลับการจับฉลาก
- การจับคู่ผลลัพธ์เป็นแบบหนึ่งต่อหนึ่งแน่นอนหรือผู้เล่นสองคนอาจได้รับรางวัลเดียวกันได้หรือไม่?
- การจับคู่แบบหนึ่งต่อหนึ่งได้รับการรับประกันโดยโครงสร้าง ไม่ใช่โชค ขั้นบันไดแต่ละขั้นจะเชื่อมเพียงเส้นที่อยู่ติดกันสองเส้น และโค้ดจะปฏิเสธการวางขั้นบันไดสองขั้นที่ทับซ้อนกันในแถวเดียวกันอย่างชัดเจน ทำให้แต่ละแถวของบันไดเป็นการสับเปลี่ยนเล็กๆ ที่ไม่ทับซ้อนกัน และการซ้อน 12 แถวของการสับเปลี่ยนนี้จะไม่มีทางชี้เส้นเริ่มต้นสองเส้นไปยังเส้นปลายทางเดียวกันได้ — การจัดสรรนี้เป็นการจับคู่แบบหนึ่งต่อหนึ่งทางคณิตศาสตร์ไม่ว่าการสุ่มจะออกมาอย่างไร
- บันไดยังคงยุติธรรมหรือไม่เมื่อเพิ่มผู้เล่นจำนวนมาก?
- นี่คือข้อจำกัดตามจริง: บันไดจะใช้แถวคงที่ 12 แถวเสมอ ไม่ว่าจำนวนผู้เล่นจะเป็นเท่าใด สำหรับผู้เล่น 3 ถึง 10 คนที่เครื่องมือนี้ออกแบบมา 12 แถวให้จุดตัดที่เพียงพอจนรู้สึกเหมือนการสับเปลี่ยนที่แท้จริง แต่หากใส่ชื่อ 30 หรือ 50 คน 12 แถวจะไม่สามารถสร้างจุดตัดที่เพียงพอเพื่อกระจายผลลัพธ์ให้เท่าเทียมกันกับคู่ที่เป็นไปได้ทั้งหมด — ผู้เล่นมีแนวโน้มจะตกใกล้ตำแหน่งเริ่มต้นมากกว่าการสับเปลี่ยนแบบสม่ำเสมอ หากต้องการจับคู่แบบสุ่มสำหรับกลุ่มใหญ่ เครื่องมือสุ่มแบบราบจะเหมาะสมกว่าบันไดที่จำกัดไว้ที่ 12 แถว
- ฉันสามารถบันทึกหรือแชร์บันไดที่เสร็จแล้วได้หรือไม่?
- ไม่สามารถทำผ่านตัวเครื่องมือได้โดยตรง — ไม่มีปุ่มบันทึก ดาวน์โหลด หรือแชร์ในเวอร์ชันนี้ บันไดมีอยู่เพียงเป็นพิกเซลที่วาดบนองค์ประกอบ canvas ขณะเปิดหน้าเว็บ หากคุณต้องการหลักฐานผลลัพธ์ (เช่น "แคปหน้าจอเพื่อยุติข้อโต้แย้ง") ให้ใช้ฟังก์ชันแคปหน้าจอของเบราว์เซอร์หรืออุปกรณ์ของคุณก่อนรีเฟรชหน้าเว็บ — การรีเฟรชจะล้าง canvas และกล่องข้อความทั้งสองกลับเป็นข้อมูลตัวอย่าง
- เครื่องมือนี้อัปโหลดข้อมูลใดๆ หรือทำงานแบบออฟไลน์ได้หรือไม่?
- ไม่มีการอัปโหลด และทำงานแบบออฟไลน์ได้ การวางขั้นบันได การวาด canvas และการติดตามเส้นทางทั้งหมดทำงานภายในเอ็นจิน JavaScript ของเบราว์เซอร์โดยไม่มีการร้องขอเครือข่าย เครื่องมือจึงทำงานได้ต่อเนื่องหลังโหลดหน้าเว็บเสร็จ แม้ไม่มีการเชื่อมต่ออินเทอร์เน็ตเลย และชื่อกับผลลัพธ์ที่คุณพิมพ์จะไม่มีวันออกจากอุปกรณ์ของคุณ
- เครื่องมือนี้จะอัปโหลดข้อมูลของฉันหรือไม่?
- ไม่ ทุกอย่างทำงานในเบราว์เซอร์ของคุณ ดังนั้นข้อมูลของคุณจึงไม่เคยออกจากอุปกรณ์ของคุณ — และหลังจากโหลดหน้าแล้วยังใช้งานแบบออฟไลน์ได้ด้วย