Αν θέλεις να φτιάξεις κάτι με ένα Raspberry Pi, πιθανότατα θα χρησιμοποιήσεις αντιστάσεις. Για αυτή την άσκηση, χρειάζεται να ξέρεις δύο πράγματα γι' αυτές:
Για να ξεπεράσουν αυτό το πρόβλημα, οι κατασκευαστές τυπώνουν χρωματικά κωδικοποιημένες λωρίδες πάνω στις αντιστάσεις, για να δηλώσουν τις τιμές αντίστασής τους. Κάθε λωρίδα έχει μια θέση και μια αριθμητική τιμή.
Οι δύο πρώτες λωρίδες μιας αντίστασης ακολουθούν ένα απλό σχήμα κωδικοποίησης: κάθε χρώμα αντιστοιχεί σε έναν μόνο αριθμό. Για παράδειγμα, αν τύπωναν μια brown λωρίδα (τιμή 1) ακολουθούμενη από μια green λωρίδα (τιμή 5), αυτό θα αντιστοιχούσε στον αριθμό 15.
Σε αυτή την άσκηση θα φτιάξεις ένα βοηθητικό πρόγραμμα, ώστε να μη χρειάζεται να θυμάσαι τις τιμές των λωρίδων. Το πρόγραμμα θα δέχεται ως είσοδο ονόματα χρωμάτων και θα δίνει ως έξοδο έναν διψήφιο αριθμό, ακόμα κι αν η είσοδος έχει περισσότερα από δύο χρώματα!
Τα χρώματα των λωρίδων κωδικοποιούνται ως εξής:
Από το παραπάνω παράδειγμα: το brown-green πρέπει να επιστρέφει 15, και το brown-green-violet πρέπει να επιστρέφει κι αυτό 15, αγνοώντας το τρίτο χρώμα.
Αυτή η άσκηση έχει σκοπό να συνεχίσει την άσκηση Resistor Color και βασίζεται σε αυτήν.
Αν και μπορείς να λύσεις τις πρακτικές ασκήσεις με όποια σειρά θέλεις, σε ενθαρρύνουμε να ακολουθήσεις τη συνιστώμενη σειρά.
Σε αυτή την άσκηση, σου δίνεται σύνταξη για χρώματα που έχουν ήδη οριστεί εκ των προτέρων με το πρόθεμα c*, π.χ. c*black.
Στη συνέχεια, πρέπει να ορίσεις σύνταξη που συσχετίζει μια ακολουθία χρωμάτων με έναν αριθμό, σύμφωνα με τις οδηγίες.
Τα χρώματα βρίσκονται μέσα στα *[[ και ]] και χωρίζονται με , , π.χ. *[[c*black, c*yellow, c*violet]].
Αυτή η εργασία πιθανότατα θα απαιτήσει να χρησιμοποιήσεις είτε σημειογραφίες είτε μακροεντολές. Ίσως θέλεις να ρίξεις μια ματιά σε μια αναφορά.
Επειδή η νέα σύνταξη επεκτείνεται κατά τη μεταγλώττιση, οποιοδήποτε τεστ θα αποτύγχανε να μεταγλωττιστεί εκτός αν έχει οριστεί όλη η απαιτούμενη σύνταξη.
Για αυτόν τον λόγο, αντί να βασιζόμαστε σε παραδοσιακά τεστ χρόνου εκτέλεσης, χρησιμοποιούμε το #guard_msgs.
Αυτή η εντολή συγκρίνει ένα δεδομένο docstring με ένα μήνυμα που παράγεται από μια άλλη εντολή, στην περίπτωση αυτή το #eval, και αναφέρει σφάλμα αν διαφέρουν.
Μπορείς να θεωρήσεις την απουσία σφάλματος ως επιτυχημένο τεστ.
Αν δουλεύεις τοπικά ή στο διαδικτυακό playground του Lean, θα λαμβάνεις άμεση ανατροφοδότηση για κάθε σφάλμα που αναφέρει το #guard_msgs, μέσω του Lean InfoView.
Ο διαδικτυακός εκτελεστής τεστ δεν υποστηρίζει αυτή τη στιγμή την εισαγωγή ολόκληρης της βιβλιοθήκης μεταπρογραμματισμού Lean.
Ενώ μπορείς ελεύθερα να χρησιμοποιήσεις οποιαδήποτε λειτουργία είναι διαθέσιμη στο Lean από προεπιλογή, συμπεριλαμβανομένων και όσων βρίσκονται στον χώρο ονομάτων Lean, η προσθήκη import Lean ή η εισαγωγή συγκεκριμένων modules από τον χώρο ονομάτων Lean θα προκαλέσει την αποτυχία της υποβολής σου όταν την υποβάλεις στο Exercism.
Σημείωσε ότι η εισαγωγή της βιβλιοθήκης Lean δεν είναι απαραίτητη για να λύσεις αυτή την άσκηση.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Lean με 100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.