Edizione VII – Problema 1

Musica, musica!

Tradizionalmente, le sette note della scala musicale vengono denominate in Italia do, re, mi, fa, sol, la, si.
Le stesse note nel sistema anglosassone vengono indicate con le prime lettere dell’alfabeto: A, B, … G, con

  • DO <--> C
  • RE <--> D
  • MI <--> E
  • FA <--> F
  • SOL <--> G
  • LA <--> A
  • SI <--> B

Si scriva un programma che, data una stringa di note nel sistema anglosassone, lasci sul nastro le note equivalenti nel sistema italiano, separate da un punto.

Nastro inizialeNastro finale?
CCDCFEDO.DO.RE.DO.FA.MITanti auguri
CDECCDECEFGEFGDO.RE.MI.DO.DO.RE.MI.DO.MI.FA.SOL.MI.FA.SOLFra’ Martino
BACBACSI.LA.DO.SI.LA.DOZerlina cede alle lusinghe di Don Giovanni (Mozart)

Diagramma di stato

  • Nello stato 0 legge uno dei caratteri A, B, C, D, E, F, G
  • Se legge la A, la cancella, va tutto a destra per scrivere .LA, ritorna a sinistra e ricomincia
  • Se legge la B, la cancella, va tutto a destra per scrivere .SI
  • Se legge la G, la cancella, va tutto a destra per scrivere .SOL
  • Negli stati A, B, C, D, E, F, G salta qualsiasi carattere A, B, C, D, E, F, G, I, L, O, R, M, S, . per andare a destra
  • Negli stato R salta qualsiasi carattere A, B, C, D, E, F, G, I, L, O, R, M, S, . per ritornare a sinistra
  • Se nello stato 0 legge il punto, lo cancella e si arresta
ABS.
0A, -, >B, -, >H, -, >
AA, A, >A, B, >A, S, >A, ., >A1, ., >
A1A2, L, >
A2R, A, <
BB, A, >B, B, >B, S, >B, ., >B1, ., >
B1B2, S, >
B2R, I, <
RR, A, <R, B, <R, S, <R, ., <0, -, >

Quintuple

(0, [ABCDEFG], [ABCDEFG], -, >)
(0, ., H, -, >)

(A, [A..Z.], A, [A..Z.], >)
(A, -, A1, ., >)
(A1, -, A2, L, >)
(A2, -, R, A, <)

(B, [A..Z.], B, [A..Z.], >)
(B, -, B1, ., >)
(B1, -, B2, S, >)
(B2, -, R, I, <)

(C, [A..Z.], C, [A..Z.], >)
(C, -, C1, ., >)
(C1, -, C2, D, >)
(C2, -, R, O, <)

(D, [A..Z.], D, [A..Z.], >)
(D, -, D1, ., >)
(D1, -, D2, R, >)
(D2, -, R, E, <)

(E, [A..Z.], E, [A..Z.], >)
(E, -, E1, ., >)
(E1, -, E2, M, >)
(E2, -, R, I, <)

(F, [A..Z.], F, [A..Z.], >)
(F, -, F1, ., >)
(F1, -, F2, F, >)
(F2, -, R, A, <)

(G, [A..Z.], G, [A..Z.], >)
(G, -, G1, ., >)
(G1, -, G2, S, >)
(G2, -, G3, O, >)
(G3, -, R, L, <)

(R, [A..Z.], R, [A..Z.], <)
(R, -, 0, -, >)
  1. Ha letto una nota e va nello stato corrispondente
  2. Ha letto il punto, non ci sono più note
  3. Salta tutto per scrivere “.LA”
  4. Salta tutto per scrivere “.SI”
  5. Salta tutto per scrivere “.DO”
  6. Salta tutto per scrivere “.RE”
  7. Salta tutto per scrivere “.MI”
  8. Salta tutto per scrivere “.FA”
  9. Salta tutto per scrivere “.SOL”
  10. Ritorna a sinistra
  11. Arrivato a sinistra, ricomincia

Lascia un commento