🛝Toolio
Giới thiệu Liên hệ

🪜 Trò Chơi Thang (Amidakuji)

Nhấn vào 'Vẽ thang' và công cụ sẽ vẽ một đường dọc cho mỗi người chơi, sau đó phân tán các thanh ngang qua 12 hàng cố định bằng cách sử dụng Math.random(). Vì mỗi thanh chỉ có thể đổi chỗ hai đường dọc liền kề và không cho phép hai thanh trên cùng một hàng chạm vào nhau, toàn bộ thang được đảm bảo toán học rằng mỗi người chơi sẽ được ghép nối với một kết quả duy nhất — không ai bị trùng lặp, bất kể thanh ngang rơi vào đâu. Nhấn vào tên người chơi sau đó và màn hình sẽ vẽ lại thang đó với lộ trình của người chơi được đánh dấu, giúp bạn theo dõi từng bước thay vì chỉ nhận kết quả cuối cùng.

Trò chơi Thang sẽ tạo ra một thang xổ số amidakuji (ghost-leg) ngẫu nhiên trong trình duyệt của bạn, sử dụng Math.random() từ JavaScript để đặt các thanh ngang và API Canvas HTML để vẽ và làm nổi bật lộ trình của mỗi người chơi đến một kết quả duy nhất.

Chạm vào tên để theo dõi đường đi.

Riêng tư từ thiết kế. Công cụ này chạy hoàn toàn trong trình duyệt của bạn — không có gì bạn nhập bị tải lên hay lưu lại, và hoạt động cả khi ngoại tuyến.

Giới thiệu

Lợi thế về tính công bằng ở đây không phải là quảng cáo — nó trực tiếp xuất phát từ cách các thanh ngang được đặt. Mỗi một trong 12 hàng được xây dựng bằng cách đi qua từng cặp đường dọc liền kề và lắc Math.random() < 0.45 để có một thanh ngang, nhưng mã nguồn sẽ bỏ qua một vị trí nếu vị trí bên trái của nó vừa được đặt thanh ngang ("!(i > 0 && row[i-1])"). Chỉ một điều kiện bảo vệ này đã đảm bảo không hàng nào có thể chứa hai lần đổi chỗ chồng chéo, vì vậy mỗi hàng là một tập hợp rõ ràng các lần đổi chỗ không chồng chéo — một hoán vị của các cột. Khi xếp chồng 12 hàng như vậy lên nhau, đó chỉ là việc thực hiện liên tiếp 12 hoán vị, và một chuỗi các hoán vị luôn là một hoán vị. Đó là lý do tại sao việc hai người chơi cùng rơi vào một kết quả không chỉ là hiếm, mà còn là điều không thể xảy ra, bất kể kết quả của các lần lắc ngẫu nhiên ra sao.

Đảm bảo này không bao gồm việc kết quả được phân phối *đều* như thế nào trên tất cả các cặp có thể. Thang luôn sử dụng 12 hàng giống nhau bất kể bạn nhập bao nhiêu người chơi — nguồn gốc có điều này là một hằng số cố định, không phụ thuộc vào số lượng người chơi. Đối với dải người chơi từ 3 đến 10 người mà công cụ được tối ưu hóa, 12 hàng với xác suất 45% độc lập sẽ tạo ra đủ số lần giao thoa để cảm giác như một sự xáo trộn thực sự. Tuy nhiên, nếu bạn đưa vào 30 hoặc 50 tên, 12 hàng đơn giản là không đủ để đạt được gần hết các cặp có thể với xác suất như nhau — người chơi có xu hướng rơi gần cột họ bắt đầu hơn so với một sự xáo trộn hoàn toàn đều. Nếu bạn cần một công cụ ngẫu nhiên công bằng cho một nhóm lớn, một bộ xáo trộn phẳng (flat randomizer) sẽ là công cụ toán học tốt hơn thay vì một thang giới hạn ở 12 hàng.

Cũng cần nói rõ về Math.random() là gì và không phải là gì. Đó là bộ sinh số ngẫu nhiên giả lập tích hợp trong trình duyệt — nhanh, đủ tốt để quyết định ai sẽ rửa chén, và không phải là thứ người chơi có thể ảnh hưởng từ bên ngoài trang. Tuy nhiên, nó không an toàn về mặt mật mã: trạng thái nội bộ của nó, về lý thuyết, có thể dự đoán được nếu ai đó quan sát đủ đầu ra hoặc biết thuật toán của bộ phát sinh. Đó là lý do tại sao các cuộc xổ số có tiền thật, các xổ số được cấp phép và bất kỳ hoạt động nào có giá trị pháp lý đều sử dụng crypto.getRandomValues() hoặc một bộ phát sinh ngẫu nhiên đã được kiểm toán và chứng nhận. Công cụ này không sử dụng bất kỳ thứ nào trong số đó, và nó cũng không cần phải làm như vậy khi chia sẻ việc làm hoặc chọn người mua cà phê — chỉ cần không đặt tiền thưởng thật vào đó.

Về mặt tương tác: "Vẽ thang" chạy toàn bộ quy trình đặt thanh ngang một cách mới, vì vậy mỗi lần nhấn chuột là một lần rút thăm độc lập không nhớ lần trước. "Hiển thị tất cả" bỏ qua việc nhấn tên từng người một và in tất cả các cặp người chơi-kết quả trên cùng một thang ngay lập tức. Công cụ này không có nút lưu, xuất hoặc chia sẻ — thang chỉ tồn tại dưới dạng các điểm ảnh trên phần tử canvas, và khi bạn tải lại trang, nó sẽ xóa cùng với hai hộp văn bản, trở lại với tên mẫu và giải thưởng. Nếu bạn muốn lưu lại kết quả, cách duy nhất là sử dụng công cụ chụp màn hình mặc định của trình duyệt hoặc thiết bị trước khi bạn rời khỏi trang. Tất cả các phần khác của công cụ đều như quảng cáo: nó chạy hoàn toàn ở phía khách hàng, không có yêu cầu mạng sau khi trang được tải, vì vậy không bao giờ có gì bạn nhập được tải lên, và nó vẫn hoạt động hoàn toàn ngay cả khi không có kết nối mạng.

Cách sử dụng

  1. Nhập tên của từng người chơi vào hộp 'Người chơi', mỗi tên một dòng — tên mẫu (Amy, Ben, Cara, Dan) chỉ để hiển thị định dạng và có thể thay thế hoàn toàn.
  2. Nhập các kết quả tương ứng vào hộp 'Kết quả', mỗi kết quả một dòng — công cụ sẽ từ chối vẽ và hiển thị lỗi nếu hai danh sách không có cùng số dòng.
  3. Nhấn "Vẽ thang" để chạy một vòng mới của Math.random() và hiển thị một bộ thanh ngang mới trên canvas — mỗi lần nhấn chuột là một lần rút thăm độc lập.
  4. Nhấn hoặc nhấp vào bất kỳ chip tên người chơi nào phía trên thang để làm nổi bật lộ trình của họ bằng màu nhấn từ trên xuống dưới và hiển thị kết quả đã ghép nối bên dưới.
  5. Nhấn vào "Hiển thị tất cả" nếu bạn muốn bỏ qua việc hiển thị từng người một và xem tất cả các cặp người chơi-kết quả được in ra cùng lúc trên cùng một thang.

Câu hỏi thường gặp

Thang có sử dụng bộ sinh số ngẫu nhiên thực sự, không thể dự đoán không?
Nó sử dụng Math.random() tích hợp trong trình duyệt, không phải là crypto.getRandomValues() an toàn về mặt mật mã. Điều này hoàn toàn phù hợp để chia sẻ việc làm hoặc quyết định ai mua cà phê, nhưng Math.random() có thể, về lý thuyết, không hoàn toàn miễn nhiễm với việc dự đoán nếu ai đó quan sát đủ đầu ra trước đó. Đừng sử dụng công cụ này — hoặc bất kỳ thang nào dựa trên Math.random() — để tổ chức một cuộc xổ số có tiền thật, giải thưởng có giá trị pháp lý, hoặc bất kỳ tình huống nào mà người tham gia có động lực để ngược dòng rút thăm.
Kết quả ánh xạ có thực sự là một-một, hay có thể hai người chơi cùng nhận được một giải thưởng?
Ánh xạ một-một được đảm bảo bằng thiết kế, không phải may mắn. Mỗi thanh chỉ kết nối hai đường dọc liền kề, và mã nguồn rõ ràng từ chối đặt hai thanh chồng chéo trên cùng một hàng. Điều này khiến mỗi hàng của thang là một sự xáo trộn nhỏ, không chồng chéo, và việc xếp chồng 12 sự xáo trộn như vậy sẽ không bao giờ chỉ định hai đường bắt đầu vào cùng một đường kết thúc — sự phân bổ là một ánh xạ toán học một-một bất kể các lần lắc ngẫu nhiên ra sao.
Thang vẫn công bằng khi tôi thêm rất nhiều người chơi?
Đây là giới hạn thực tế: thang luôn sử dụng 12 hàng cố định, bất kể số lượng người chơi. Với 3 đến 10 người chơi mà công cụ được thiết kế cho, điều này là đủ để tạo cảm giác xáo trộn công bằng. Tuy nhiên, nếu bạn nhập 30 hoặc 50 tên, 12 hàng không thể tạo ra đủ số lần giao thoa để phân phối kết quả đều trên số lượng cặp có thể — người chơi có xu hướng rơi gần vị trí bắt đầu của họ hơn so với một sự xáo trộn hoàn toàn đều. Đối với một nhóm lớn, một công cụ phân bổ ngẫu nhiên phẳng sẽ phù hợp hơn thay vì một thang giới hạn ở 12 hàng.
Tôi có thể lưu hoặc chia sẻ thang đã hoàn thành của mình không?
Không thông qua công cụ này — không có nút lưu, tải xuống hoặc chia sẻ nào được tích hợp trong phiên bản này. Thang chỉ tồn tại dưới dạng các điểm ảnh được vẽ trên phần tử canvas trong khi trang đang mở. Nếu bạn muốn bằng chứng về kết quả (điển hình là chụp màn hình để giải quyết tranh cãi), hãy sử dụng chức năng chụp màn hình mặc định của trình duyệt hoặc thiết bị trước khi bạn làm mới trang — làm mới sẽ xóa canvas và cả hai hộp văn bản trở lại dữ liệu mẫu.
Công cụ này có tải lên bất cứ thứ gì không, và có thể hoạt động khi không có internet không?
Không tải lên, và có thể hoạt động khi không có internet. Việc đặt thanh, vẽ canvas và theo dõi lộ trình đều được thực hiện bên trong trình JavaScript của trình duyệt mà không có bất kỳ yêu cầu mạng nào, vì vậy công cụ vẫn hoạt động sau khi trang được tải, ngay cả khi không có kết nối mạng, và tên và kết quả bạn nhập sẽ không bao giờ rời khỏi thiết bị của bạn.