fixmint
EL

Πώς να κάνετε δίκαιη κλήρωση νικητών και να δείξετε τη διαδικασία

Από · · ενημερώθηκε 8 Νοεμβρίου 2026 · 4 λεπτά ανάγνωση

Για δίκαιη επιλογή νικητή, χρησιμοποιήστε γεννήτρια φτιαγμένη για ασφάλεια, δώστε σε κάθε συμμετοχή την ίδια πιθανότητα και αφήστε τους συμμετέχοντες να ελέγξουν το αποτέλεσμα στη συνέχεια. Οι περισσότερες αδικίες σε έναν απλό επιλογέα προέρχονται από ένα από δύο σημεία: μια αδύναμη πηγή τυχαιότητας ή ένα μικρό αριθμητικό σφάλμα που λέγεται μεροληψία modulo. Και τα δύο διορθώνονται. Μια δημοσιευμένη λίστα συμμετοχών και ένα αρχείο της κλήρωσης είναι η καλύτερη απόδειξη ότι κανείς δεν επέλεξε τον νικητή.

Τυχαία επιλογήΚλήρωση νικητή χωρίς μεροληψίαΚάντε το δωρεάν

Πραγματική και ψευδοτυχαία τυχαιότητα

Μια πραγματική πηγή τυχαιότητας αντλεί την απρόβλεπτη συμπεριφορά της από μια φυσική διεργασία, όπως ο ηλεκτρονικός θόρυβος. Μια ψευδοτυχαία γεννήτρια είναι ένας τύπος. Ξεκινά από έναν σπόρο, εφαρμόζει προκαθορισμένα βήματα και παράγει μια ακολουθία που μοιάζει τυχαία. Η ακολουθία καθορίζεται πλήρως από τον σπόρο, οπότε όποιος γνωρίζει τον σπόρο και τον τύπο μπορεί να προβλέψει κάθε αριθμό.

Το μεγαλύτερο μέρος του λογισμικού χρησιμοποιεί ψευδοτυχαίες γεννήτριες, και αυτό είναι εντάξει για την ανακάτεμα μιας λίστας μουσικής ή για την τυχαία δημιουργία ενός επιπέδου παιχνιδιού. Για μια κλήρωση όπου οι συμμετέχοντες έχουν κάτι να κερδίσουν, το ερώτημα είναι αν κάποιος θα μπορούσε να προβλέψει ή να επηρεάσει το αποτέλεσμα. Μια γεννήτρια που είναι γρήγορη αλλά προβλέψιμη είναι το λάθος εργαλείο.

Χρησιμοποιήστε την κρυπτογραφική γεννήτρια του προγράμματος περιήγησης

Στη JavaScript, το Math.random() είναι μια γρήγορη ψευδοτυχαία γεννήτρια. Η τεκμηρίωσή του λέει ότι δεν είναι κατάλληλο για κρυπτογραφία, και μια κλήρωση με δώρα είναι επιλογή ευαίσθητη από άποψη ασφάλειας. Η συνάρτηση crypto.getRandomValues() του Web Crypto γεμίζει έναν πίνακα με τιμές από την κρυπτογραφική πηγή τυχαιότητας του λειτουργικού συστήματος. Αυτή είναι η σωστή επιλογή. Η Τυχαία επιλογή τη χρησιμοποιεί για κάθε επιλογή, συμπεριλαμβανομένων των κερμάτων και των ζαριών. Ένας επιλογέας που δεν λέει τι χρησιμοποιεί είναι δύσκολο να τον εμπιστευτείτε, οπότε ρωτήστε πριν βασιστείτε σε αυτόν.

Η μεροληψία modulo, με ένα παράδειγμα

Ας υποθέσουμε ότι η πηγή σας δίνει έναν τυχαίο byte, έναν ακέραιο από 0 έως 255, και θέλετε μία από τρεις συμμετοχές. Ο εύκολος δρόμος είναι να πάρετε το υπόλοιπο της διαίρεσης με το 3. Φαίνεται δίκαιο, όμως το 256 δεν χωρίζεται ακριβώς σε ομάδες των τριών.

  • Οι τιμές 0, 3, 6 και ούτω καθεξής έως το 255 αφήνουν υπόλοιπο 0. Είναι 86.
  • Οι τιμές που αφήνουν υπόλοιπο 1 είναι 85, και οι τιμές που αφήνουν υπόλοιπο 2 είναι επίσης 85.

Έτσι, η συμμετοχή 0 βγαίνει 86 φορές στις 256, δηλαδή περίπου 33,6%, ενώ οι συμμετοχές 1 και 2 βγαίνουν 85 φορές η καθεμία, δηλαδή περίπου 33,2%. Η διαφορά είναι μικρή, αλλά είναι πραγματική, και μεγαλώνει όσο ο αριθμός των συμμετοχών γίνεται μεγάλος σε σχέση με το εύρος της πηγής.

Η λύση είναι η δειγματοληψία με απόρριψη. Παίρνετε μια τιμή και, αν πέσει στο ανομοιόμορφο υπολειπόμενο τμήμα, κάνετε νέα κλήρωση. Στο παράδειγμα του byte, απορρίπτετε το 255 και δέχεστε μόνο τις τιμές από 0 έως 254, που χωρίζονται ακριβώς σε τρία. Με έναν τυχαίο αριθμό 32 bit, το υπολειπόμενο τμήμα είναι περίπου μία τιμή στα 4,3 δισεκατομμύρια, οπότε η μεροληψία είναι αμελητέα για μια κλήρωση. Ένας προσεκτικός επιλογέας το χειρίζεται παρ' όλα αυτά, γιατί το ίδιο σφάλμα χειροτερεύει όσο μικραίνει το εύρος.

Κληρώσεις χωρίς επαναλήψεις

Αν χρειάζεστε αρκετούς νικητές, η κλήρωση ενός τυχαίου δείκτη τρεις φορές μπορεί να επιλέξει τη δεύτερη φορά την ίδια συμμετοχή. Δύο καθαροί τρόποι το αποφεύγουν:

  1. Αφαιρέστε κάθε νικητή από τη λίστα και κάντε νέα κλήρωση από τους υπόλοιπους.
  2. Ανακατέψτε μία φορά ολόκληρη τη λίστα με τον αλγόριθμο Fisher–Yates και πάρτε τους νικητές από την κορυφή.

Ο Fisher–Yates διασχίζει τη λίστα από το τέλος, ανταλλάσσει κάθε θέση με μια τυχαία επιλεγμένη θέση που βρίσκεται στο ίδιο σημείο ή πριν από αυτήν, και παράγει κάθε διάταξη με ίση πιθανότητα όταν οι τυχαίες επιλογές είναι δίκαιες. Είναι σύντομος, καλά κατανοητός και εύκολος να εξηγηθεί στους συμμετέχοντες. Οι επιλογές «Αφαίρεση νικητών από τη λίστα» και «Χωρίς επαναλήψεις» του επιλογέα καλύπτουν και τους δύο τρόπους.

Κάντε την κλήρωση επαληθεύσιμη

Μια δίκαιη κλήρωση είναι εκείνη που μπορεί να ελέγξει ο καθένας. Πριν από την κλήρωση:

  • Δημοσιεύστε τις συμμετοχές ως αριθμημένη λίστα, μαζί με τους κανόνες για το ποιος είναι επιλέξιμος.
  • Δημοσιεύστε ένα αποτύπωμα SHA-256 της λίστας. Κάθε εργαλείο SHA-256 μπορεί να το δημιουργήσει, για παράδειγμα η Γεννήτρια hash. Ένα αποτύπωμα αλλάζει εντελώς αν αλλάξει έστω και μία συμμετοχή, οπότε η λίστα δεν μπορεί να τροποποιηθεί αθόρυβα στη συνέχεια. Ο ίδιος έλεγχος επιβεβαιώνει και τις λήψεις αρχείων· το πώς να ελέγξετε το SHA-256 checksum ενός αρχείου λήψης δείχνει τα βήματα.

Κατά τη διάρκεια και μετά την κλήρωση:

  • Καταγράψτε την οθόνη από τη στιγμή που ξεκινάτε τον επιλογέα έως το εμφανιζόμενο αποτέλεσμα.
  • Δημοσιεύστε την τελική λίστα με τον αριθμό του νικητή, ώστε οι συμμετέχοντες να μπορούν να υπολογίσουν ξανά το αποτύπωμα και να επιβεβαιώσουν ότι τίποτα δεν άλλαξε.
  • Γράψτε πώς επιλέχθηκε ο νικητής, για παράδειγμα «επιλέχθηκε με επιλογέα στο πρόγραμμα περιήγησης που χρησιμοποιεί την κρυπτογραφική πηγή τυχαιότητας του λειτουργικού συστήματος».

Οι κανόνες των διαγωνισμών διαφέρουν από πλατφόρμα σε πλατφόρμα, και οι κληρώσεις με δώρα μπορεί να έχουν νομικές απαιτήσεις που εξαρτώνται από τη χώρα σας. Ελέγξτε τους όρους προαγωγής της πλατφόρμας και τη νομοθεσία της χώρας σας πριν διοργανώσετε έναν. Αυτές είναι γενικές οδηγίες, όχι νομική συμβουλή. Όταν είστε έτοιμοι, επιλέξτε νικητή με την Τυχαία επιλογή.

Πώς να το κάνετε με το fixmint

  1. Επιλέξτε Ονόματα, και μετά επικολλήστε τις συμμετοχές στο πεδίο Ονόματα, ένα σε κάθε γραμμή.
  2. Ορίστε στο Νικητές τον αριθμό των βραβείων. Επιλέξτε Αφαίρεση νικητών από τη λίστα ώστε κανείς να μην κερδίσει δύο φορές.
  3. Για αριθμημένη κλήρωση, επιλέξτε Αριθμός, ορίστε το Μικρότερος και το Μεγαλύτερος, και επιλέξτε Χωρίς επαναλήψεις αν κάθε αριθμός μπορεί να κερδίσει μόνο μία φορά.
  4. Πατήστε Επιλογή νικητών, με την εγγραφή της οθόνης σας ήδη σε λειτουργία από την αρχή.
  5. Δημοσιεύστε τις αριθμημένες συμμετοχές, το αποτύπωμα SHA-256, τη νικήτρια συμμετοχή και πώς χρησιμοποιήθηκε ο επιλογέας.

Σύντομες απαντήσεις

Είναι εντάξει το Math.random() για έναν διαγωνισμό;

Είναι εντάξει για παιχνίδια και ανακατέματα, αλλά όχι για μια κλήρωση που θα ελέγξουν οι συμμετέχοντες, επειδή το αποτέλεσμά του μπορεί να προβλεφθεί. Χρησιμοποιήστε κρυπτογραφική πηγή.

Γιατί να μην πάρω απλώς έναν τυχαίο αριθμό modulo το πλήθος των συμμετοχών;

Όταν το εύρος δεν χωρίζεται ακριβώς, το υπόλοιπο είναι ανομοιόμορφο, οπότε ορισμένες συμμετοχές έχουν ελαφρώς μεγαλύτερη πιθανότητα. Η δειγματοληψία με απόρριψη αφαιρεί αυτή τη μεροληψία.

Μπορώ να επιλέξω περισσότερους από έναν νικητές σε μία κλήρωση;

Ναι. Αφαιρέστε κάθε νικητή πριν από την επόμενη επιλογή ή ανακατέψτε μία φορά και πάρτε τις πρώτες συμμετοχές. Και με τους δύο τρόπους, καμία συμμετοχή δεν μπορεί να κερδίσει δύο φορές.

Μετάφραση από το Αγγλικό πρωτότυπο με τη βοήθεια τεχνητής νοημοσύνης.

Σχόλια

    Δεν υπάρχουν σχόλια ακόμη. Γίνετε οι πρώτοι.

    Η βαθμολογία σας (προαιρετικό)

    Το email σας δεν εμφανίζεται ούτε αποθηκεύεται ποτέ.

    Εξώφυλλο του The Paperoom Game Night KitThe Paperoom Game Night Kit

    Μια εκτυπώσιμη βραδιά παιχνιδιών 52 σελίδων: μπίνγκο για πάρτι, παζλ, επιτραπέζια και μάχες με μολύβι και χαρτί, μαζί με ημερολόγιο προγραμματισμού και πίνακες σκορ.

    $7.00Αγοράστε στο GumroadΣτα αγγλικά