Se vuoi costruire qualcosa con un Raspberry Pi, probabilmente userai dei resistori. Per questo esercizio, devi sapere due cose sui resistori:
Per aggirare questo problema, i produttori stampano delle bande colorate sui resistori per indicare i loro valori di resistenza. Ogni banda ha una posizione e un valore numerico.
Le prime 2 bande di un resistore hanno un semplice schema di codifica: ogni colore corrisponde a un singolo numero. Ad esempio, se stampassero una banda brown (valore 1) seguita da una banda green (valore 5), corrisponderebbe al numero 15.
In questo esercizio creerai un programma utile per non dover ricordare i valori delle bande. Il programma prenderà nomi di colori come input e produrrà in output un numero a due cifre, anche se l'input è composto da più di due colori!
I colori delle bande sono codificati come segue:
Dall'esempio sopra: brown-green dovrebbe restituire 15, e anche brown-green-violet dovrebbe restituire 15, ignorando il terzo colore.
Questo esercizio è pensato come un seguito di Resistor Color e si basa su di esso.
Anche se puoi risolvere gli esercizi di pratica in qualsiasi ordine, ti invitiamo a seguire la sequenza suggerita.
In questo esercizio ti viene fornita la sintassi dei colori già predefinita tramite il prefisso c*, ad esempio c*black.
Dovrai poi definire una sintassi che associ una sequenza di colori a un numero, in base alle istruzioni.
I colori sono racchiusi tra *[[ e ]] e separati da , , ad esempio *[[c*black, c*yellow, c*violet]].
Per questo compito probabilmente dovrai usare le notazioni oppure le macro. Potresti dare un'occhiata a un riferimento.
Dato che la nuova sintassi viene espansa in fase di compilazione, qualsiasi test non verrebbe compilato se non fosse definita tutta la sintassi necessaria.
Per questo motivo, invece di affidarci ai tradizionali test a runtime, usiamo #guard_msgs.
Questo comando confronta un determinato docstring con un messaggio generato da un altro comando, in questo caso #eval, e segnala un errore se sono diversi.
Puoi considerare l'assenza di un errore come un test superato.
Se lavori in locale o nel playground online di Lean, riceverai un riscontro immediato su qualsiasi errore segnalato da #guard_msgs tramite Lean InfoView.
Il test runner online attualmente non supporta l'importazione dell'intera libreria di meta-programmazione Lean.
Anche se sei libero di usare qualsiasi funzionalità disponibile in Lean di default, comprese quelle nel namespace Lean, aggiungere import Lean o importare moduli specifici dal namespace Lean farà fallire la tua soluzione quando la invii a Exercism.
Nota che importare la libreria Lean non è necessario per risolvere questo esercizio.
Iscriviti a Exercism per imparare e padroneggiare Lean con 100 esercizi e il mentoring di persone reali, tutto gratis.