Προς το περιεχόμενο

Άσκηση master mind


pagratios

Προτεινόμενες αναρτήσεις

Δημοσ.

Θα ήθελα μία βοήθεια όσο αναφορά τον αλγόριθμο του mastermind!

 

Έχω μία εργασία η οποία πρέπει να γραφτεί σε asseblby του picoblaze και πρέπει να δημιουργεί έναν τυχαίο μυστικό συνδυασμό 4 ψηφίων στο διάστημα [0,3] και ο παίχτης ο οποίος έχει 8 προσπάθειες δίνει τι νομίζει ότι είναι ο κωδικός. Τώρα το πρόγραμμα θα απαντάει με

- 0: το χρώμα αυτό δεν υπάρχει στον μυστικό κωδικό

- 1: το χρώμα υπάρχει στον μυστικό κωδικό, αλλά δεν βρίσκεται στη σωστή θέση

- 2: το νούμερο υπάρχει στον μυστικό κωδικό και είναι και στη σωστή θέση

 

οπότε αν ο μυστικός είναι ο 1234 και εγώ του πω 1111 πρέπει να απαντήσει 2000 αλλά με τυχαία σειρά η απάντηση δλδ 2000,0200,0020,0002.

 

Αυτά για να καταλάβετε τι απαιτεί η άσκηση αν και οι περισσότεροι ξέρεται πως παίζεται το παιχνίδι!

 

Το πρόβλημα μου δεν είναι ούτε πως παράγω τυχαίο ούτε πως παράγω την τυχαία απάντηση αλλά πως θα κάνω την σύγκριση των ψηφίων και θα απαντάει ανάλογα.

Ας πούμε αν ο μυστικός είναι ο 3102 και εγώ του πω 2133 πως θα κάνω τις σωστές συγκρίσεις ώστε να πει 2110 και όχι 2111 επειδή έχει τα δύο τριάρια!

 

Ευχαριστώ εκ το προτέρων

Δημοσ.

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

 

Στο παράδειγμα που δίνεις :

3102 | 2133 φτιάχνεις τον πίνακα 3,1,0,2

Συγκρίνεις το 2... οπότε παίρνεις 3,1,0,(χ = μια τυχαία τιμή που δεν θα παίζει ρόλο)

Συγκρίνεις το 1... οπότε παίρνεις 3,χ,0,χ

Συγκρίνεις το 3... οπότε παίρνεις χ,χ,0,χ

Συγκρίνεις το 3... οπότε παίρνεις χ,χ,0,χ και σου λέει ότι δεν έχει εντοπιστεί το 3.

 

Βέβαια δεν ξέρω κατα πόσο εύκολο είναι να κάνεις κάτι τέτοιο.

Δημοσ.

Καλή ιδέα!

 

Επίσης ξέχασα να πω επειδή θα το στέλνω μέσω σσειριακής τα ψηφία μπορώ να τα έχω σε ξεχωριστές μεταβλητές

 

---------- Το μήνυμα προστέθηκε στις 04:36 ----------

 

Αυτό που έκανες είναι για έναν αριθμό μόνο ή και για τους 4?

 

Αν είναι για όλους τότε στο ίδιο παράδειγμα με μυστικό τον 3102 αν έδινα το 2312 θα είχαμε πρόβλημα με το 2 το τελευταίο γιατί όταν θα ερχόταν η σειρά του δεν θα έβρισκε κάτι ενώ το πρώτο θα απαντούσε ότι υπάρχει και είναι σε λάθος θέση

Δημοσ.

Όντως υπάρχει αυτό το πρόβλημα που είπες. Το σκέφτηκα πιο μετά.

Ίσως θα μπορούσες να κάνεις έναν έλεγχο πρώτα ψηφίο-ψηφίο και αν βρεις δύο όμοια τότε να τα αφαιρέσεις από τον συμπληρωματικό πίνακα. Και μετά κάνεις την άλλη διαδικασία. Βέβαια μάλλον μπλέκεται κάπως το θέμα κάνοντας 2 ελέγχους :/

Δημοσ.

Ο picoblaze έχει ram!Αυτήν θα χρησιμοποιήσω για πινακα?

 

Εκτός από αυτό κάποιθος τρόπος για την επίλυση του αλγορίθμου?

Δημοσ.

Άμα πρώτα κοιτάς να βρείς όλα τα ομοία όπως είπανε παραπάνω και υστερα ελέγχεις 1-1 αν είναι σε σωστή θέση. Μετα αφερείς απο τον counter που κρατά τα πόσα όμοια έχεις τον αριθμό αυτών που είναι σε σωστή θέση?

Δλδ έχεισ 3102 και σου είσαγει ο χρήστης 2312 βρίσκει τα ομοία όπως είπαν παραπάνω και μετά ελέγχεις 1-1 και βρίσκεις ότι το τελευταίο είναι σε σωστή θέση οπότε μειώνεις 1 από τα ομοία.

Δημοσ.
Ο picoblaze έχει ram!Αυτήν θα χρησιμοποιήσω για πινακα?

 

Εκτός από αυτό κάποιθος τρόπος για την επίλυση του αλγορίθμου?

 

αν ο πίνακας είναι μικρός μπορείς να χρησιμοποιήσεις τα block ram του FPGA διαφορετικά την ddr που έχει πάνω το development board και είναι interfaced με το FPGA.:-)

Δημοσ.
Μάλλον την ram του picoblaze!!!

 

Όπως σου είπα η RAM που κάνει access ο PicoBlaze είναι είτε blockram (μέσα στο FPGA) ή external DDR στο development board που χρησιμοποιείτε. Οπότε δες το summary report από το ISE για να δεις το memory map του design σου. :-)

Δημοσ.

Χαχα καλή φάση..Πριν 7-8 χρόνια είχα φτιάξει το mastermind έτσι όπως ακριβώς φαίνεται και στην πραγματικότητα, μέσω του Macromedia Director (Lingo γλώσσα). Να φανταστείς είχα σκανάρει την επιφάνεια απο το επιτραπέζιο ώστε να είναι όσο το δυνατόν πιο αληθοφανές.

 

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

 

[Edit]

Τώρα που προσπαθώ να το θυμηθώ, σημείωνα σε δύο μεταβλητές πόσα έχω βρεί σωστά και σε σωστή θέση (a) και πόσα σωστά και σε λάθος θέση (B). Οπότε εξέταζα τι τιμή έχει το a (πχ 2). Ζωγράφιζε με μαύρο τι θέση 1 & 2. Μετά εξέταζα το b (πχ 1) οπότε ζωγράφιζε με άσπρο τη θέση a+1 = 3. Αν a ή b ήταν 0, δεν έκανε τίποτα.

 

Ελπίζω να κατάλαβες το σκεπτικό μου.

Δημοσ.

Ας πούμε οτι a1, a2, a3, a4 τα τυχαία νούμερα του Η/Υ

 

και b1,b2,b3,b4 τα νούμερα που δίνεις εσύ.

 

x έχουμε σωστό νούμερο/σωστή θέση

y έχουμε σωστό νούμερ/λάθος θέση

 

Οπότε:

 

If a1=b1 then x=x+1

if a1=b2 then y=y+1

κτλ...

 

Βάζεις και άλλες μεταβλητές για τα a1, b1 κτλ, ώστε με ένα for τάδε =1 to 4 να παίρνει όλες τις περιπτώσεις αν δεν θες να κάνεις μπακαλίστικα όλους τους συνδιασμούς.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...