Έπειτα από εβδομάδες προσμονής, εσύ και οι φίλοι σου μαζεύεστε για το πρώτο σας παιχνίδι Dungeons & Dragons (D&D). Καθώς αυτή είναι η πρώτη συνεδρία του παιχνιδιού, κάθε παίκτης πρέπει να δημιουργήσει έναν χαρακτήρα για να παίξει. Οι ικανότητες του χαρακτήρα καθορίζονται ρίχνοντας ζάρια 6 πλευρών, αλλά πού είναι τα ζάρια; Με ένα σοκ, συνειδητοποιείς ότι οι φίλοι σου περιμένουν από εσένα να φέρεις τα ζάρια, στο κάτω κάστης, δική σου ιδέα ήταν να παίξετε D&D! Πανικοβάλλεσαι, καθώς συνειδητοποιείς ότι ξέχασες να φέρεις τα ζάρια, πράγμα που θα σήμαινε ότι δεν θα γινόταν κανένα παιχνίδι D&D. Καθώς έχεις κάποιες βασικές δεξιότητες προγραμματισμού, σκέφτεσαι γρήγορα μια λύση: θα γράψεις ένα πρόγραμμα που προσομοιώνει ρίψεις ζαριών.
Σε ένα παιχνίδι Dungeons & Dragons, κάθε παίκτης ξεκινά δημιουργώντας έναν χαρακτήρα με τον οποίο μπορεί να παίξει. Αυτός ο χαρακτήρας έχει, μεταξύ άλλων, έξι ιδιότητες: strength, dexterity, constitution, intelligence, wisdom και charisma. Οι έξι αυτές ιδιότητες έχουν τιμές που καθορίζονται τυχαία. Για να το κάνεις αυτό, ρίχνεις τέσσερα ζάρια με 6 πλευρές και καταγράφεις το άθροισμα των τριών μεγαλύτερων ζαριών. Το κάνεις έξι φορές, μία για κάθε ιδιότητα.
Οι αρχικοί πόντοι ζωής του χαρακτήρα σου είναι 10 + ο τροποποιητής constitution του χαρακτήρα σου. Για να βρεις τον τροποποιητή constitution του χαρακτήρα σου, αφαίρεσε το 10 από το constitution του χαρακτήρα σου, διαίρεσε με το 2 και στρογγυλοποίησε προς τα κάτω.
Γράψε μια γεννήτρια τυχαίων χαρακτήρων που ακολουθεί τους παραπάνω κανόνες.
Για παράδειγμα, οι έξι ρίψεις των τεσσάρων ζαριών μπορεί να μοιάζουν κάπως έτσι:
Επειδή το constitution είναι 3, ο τροποποιητής constitution είναι -4 και οι πόντοι ζωής είναι 6.
Οι περισσότερες γλώσσες προγραμματισμού διαθέτουν γεννήτριες (ψευδο)τυχαίων αριθμών, αλλά λίγες γλώσσες είναι σχεδιασμένες για να ρίχνουν ζάρια. Μία τέτοια γλώσσα είναι η Troll.
Στο track x86-64-assembly, η τυχαιότητα της συνάρτησης ability() ελέγχεται με ένα τεστ χι-τετράγωνο, σε επίπεδο p < 0,0001.
Αυτό σημαίνει ότι αν η βαθμολογία ικανότητας παράγεται σύμφωνα με τις οδηγίες, υπάρχει λιγότερη από 0,01% πιθανότητα να προκύψει μια κατανομή τιμών που αποτυγχάνει στο τεστ.
Πρόσεξε ότι, σύμφωνα με τις οδηγίες, μια βαθμολογία ικανότητας είναι το άθροισμα των 3 μεγαλύτερων από 4 ρίψεις ενός αμερόληπτου d6 (ζαριού με έξι πλευρές).
Γράψου στο Exercism για να μάθεις και να κατακτήσεις x86-64 Assembly με 22 έννοιες130 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Εξερευνούμε πώς να δημιουργούμε (φαινομενικά) τυχαίες ρίψεις ζαριών. Θα μάθεις για seeds, ψευδοτυχαίους αριθμούς και μερικές συνηθισμένες παγίδες. Τέλος, θα δούμε πόσο καλός είναι ο property-based testing για τον έλεγχο συναρτήσεων που επιστρέφουν τυχαίες τιμές.