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?
1°CCDCFEDO.DO.RE.DO.FA.MITanti auguri
2°CDECCDECEFGEFGDO.RE.MI.DO.DO.RE.MI.DO.MI.FA.SOL.MI.FA.SOLFra’ Martino
3°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
AB…S.–
0A, -, >B, -, >…—H, -, >—
AA, A, >A, B, >…A, S, >A, ., >A1, ., >
A1—————A2, L, >
A2—————R, A, <
BB, A, >B, B, >…B, S, >B, ., >B1, ., >
B1—————B2, S, >
B2—————R, 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. …
  4. Salta tutto per scrivere “.LA”
  5. …
  6. …
  7. …
  8. …
  9. Salta tutto per scrivere “.SI”
  10. …
  11. …
  12. …
  13. …
  14. Salta tutto per scrivere “.DO”
  15. …
  16. …
  17. …
  18. …
  19. Salta tutto per scrivere “.RE”
  20. …
  21. …
  22. …
  23. …
  24. Salta tutto per scrivere “.MI”
  25. …
  26. …
  27. …
  28. …
  29. Salta tutto per scrivere “.FA”
  30. …
  31. …
  32. …
  33. …
  34. Salta tutto per scrivere “.SOL”
  35. …
  36. …
  37. …
  38. …
  39. …
  40. Ritorna a sinistra
  41. Arrivato a sinistra, ricomincia

Lascia un commento