Διαδρομές
/
Lean
Lean
/
Ασκήσεις
/
Χαρακτήρας D&D
Χαρακτήρας D&D

Χαρακτήρας D&D

Μέτριο

Εισαγωγή

Έπειτα από εβδομάδες προσμονής, εσύ και οι φίλοι σου μαζεύεστε για το πρώτο σας παιχνίδι Dungeons & Dragons (D&D). Καθώς αυτή είναι η πρώτη συνεδρία του παιχνιδιού, κάθε παίκτης πρέπει να δημιουργήσει έναν χαρακτήρα για να παίξει. Οι ικανότητες του χαρακτήρα καθορίζονται ρίχνοντας ζάρια 6 πλευρών, αλλά πού είναι τα ζάρια; Με ένα σοκ, συνειδητοποιείς ότι οι φίλοι σου περιμένουν από εσένα να φέρεις τα ζάρια, στο κάτω κάστης, δική σου ιδέα ήταν να παίξετε D&D! Πανικοβάλλεσαι, καθώς συνειδητοποιείς ότι ξέχασες να φέρεις τα ζάρια, πράγμα που θα σήμαινε ότι δεν θα γινόταν κανένα παιχνίδι D&D. Καθώς έχεις κάποιες βασικές δεξιότητες προγραμματισμού, σκέφτεσαι γρήγορα μια λύση: θα γράψεις ένα πρόγραμμα που προσομοιώνει ρίψεις ζαριών.

Οδηγίες

Σε ένα παιχνίδι Dungeons & Dragons, κάθε παίκτης ξεκινά δημιουργώντας έναν χαρακτήρα με τον οποίο μπορεί να παίξει. Αυτός ο χαρακτήρας έχει, μεταξύ άλλων, έξι ιδιότητες: strength, dexterity, constitution, intelligence, wisdom και charisma. Οι έξι αυτές ιδιότητες έχουν τιμές που καθορίζονται τυχαία. Για να το κάνεις αυτό, ρίχνεις τέσσερα ζάρια με 6 πλευρές και καταγράφεις το άθροισμα των τριών μεγαλύτερων ζαριών. Το κάνεις έξι φορές, μία για κάθε ιδιότητα.

Οι αρχικοί πόντοι ζωής του χαρακτήρα σου είναι 10 + ο τροποποιητής constitution του χαρακτήρα σου. Για να βρεις τον τροποποιητή constitution του χαρακτήρα σου, αφαίρεσε το 10 από το constitution του χαρακτήρα σου, διαίρεσε με το 2 και στρογγυλοποίησε προς τα κάτω.

Γράψε μια γεννήτρια τυχαίων χαρακτήρων που ακολουθεί τους παραπάνω κανόνες.

Για παράδειγμα, οι έξι ρίψεις των τεσσάρων ζαριών μπορεί να μοιάζουν κάπως έτσι:

  • 5, 3, 1, 6: Αγνοείς το 1 και αθροίζεις 5 + 3 + 6 = 14, το οποίο αναθέτεις στο strength.
  • 3, 2, 5, 3: Αγνοείς το 2 και αθροίζεις 3 + 5 + 3 = 11, το οποίο αναθέτεις στο dexterity.
  • 1, 1, 1, 1: Αγνοείς το 1 και αθροίζεις 1 + 1 + 1 = 3, το οποίο αναθέτεις στο constitution.
  • 2, 1, 6, 6: Αγνοείς το 1 και αθροίζεις 2 + 6 + 6 = 14, το οποίο αναθέτεις στο intelligence.
  • 3, 5, 3, 4: Αγνοείς το 3 και αθροίζεις 5 + 3 + 4 = 12, το οποίο αναθέτεις στο wisdom.
  • 6, 6, 6, 6: Αγνοείς το 6 και αθροίζεις 6 + 6 + 6 = 18, το οποίο αναθέτεις στο charisma.

Επειδή το constitution είναι 3, ο τροποποιητής constitution είναι -4 και οι πόντοι ζωής είναι 6.

Note

Οι περισσότερες γλώσσες προγραμματισμού διαθέτουν γεννήτριες (ψευδο)τυχαίων αριθμών, αλλά λίγες γλώσσες είναι σχεδιασμένες για να ρίχνουν ζάρια. Μία τέτοια γλώσσα είναι η Troll.

Παραγωγή ψευδοτυχαίων τιμών στη Lean

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

Ωστόσο, εξ ορισμού, μια τυχαία τιμή είναι απρόβλεπτη και μη ντετερμινιστική. Ακόμη και η ψευδοτυχαιότητα, δηλαδή η επιστροφή μιας ακολουθίας αριθμών που μοιάζουν τυχαίοι, δεν είναι και τόσο εύκολο να επιτευχθεί σε ένα καθαρό πλαίσιο. Αυτό συμβαίνει επειδή μια γεννήτρια ψευδοτυχαίων αριθμών (PRNG) πρέπει να παρακολουθεί την εσωτερική της κατάσταση για να επιστρέψει τον επόμενο αριθμό της ακολουθίας.

Η Lean προσφέρει δύο πιθανές προσεγγίσεις σε αυτό το πρόβλημα:

  1. Χρησιμοποίησε μια μονάδα που καθιστά δυνατή την αλλαγή της εσωτερικής κατάστασης μιας γεννήτριας ψευδοτυχαίων αριθμών. Υπάρχει μια έτοιμη διαθέσιμη συνάρτηση, IO.rand, που κάνει ακριβώς αυτό.

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

Αυτή η άσκηση χρησιμοποιεί τη δεύτερη προσέγγιση. Μια γεννήτρια περνιέται σε κάθε συνάρτηση που πρέπει να παράγει μια ψευδοτυχαία τιμή, και η συνάρτηση αναμένεται να επιστρέψει τόσο την τιμή όσο και μια ενημερωμένη γεννήτρια.

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

Έλεγχος της τυχαιότητας

Σε αυτή την άσκηση, η τυχαιότητα ελέγχεται με έναν έλεγχο χι-τετράγωνο σε επίπεδο σημαντικότητας p < 0.0001.

Αυτό σημαίνει ότι αν μια βαθμολογία ικανότητας παραχθεί σύμφωνα με τις οδηγίες, υπάρχει λιγότερη από 0,01% πιθανότητα μια σωστή υλοποίηση να αποτύχει στο τεστ από καθαρή τύχη.

Σημείωσε ότι, σύμφωνα με τις οδηγίες, μια βαθμολογία ικανότητας είναι το άθροισμα των τριών μεγαλύτερων αποτελεσμάτων από τέσσερις ρίψεις ενός αμερόληπτου d6 (ζαριού έξι πλευρών).

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Lean Exercism

Έτοιμος να ξεκινήσεις την άσκηση Χαρακτήρας D&D;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Lean με 100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.

Αναλυτική ματιά στο Χαρακτήρας D&D!

Εξερευνούμε πώς να δημιουργούμε (φαινομενικά) τυχαίες ρίψεις ζαριών. Θα μάθεις για seeds, ψευδοτυχαίους αριθμούς και μερικές συνηθισμένες παγίδες. Τέλος, θα δούμε πόσο καλός είναι ο property-based testing για τον έλεγχο συναρτήσεων που επιστρέφουν τυχαίες τιμές.