Terza Gara di Informatica per

Studenti delle Scuole Superiori

Pisa, 22 Marzo 1999

Se non specificato altrimenti, negli esercizi le sequenze iniziali si intendono non vuote, ovvero contenenti almeno un simbolo.

  1. Programmare una macchina di Turing che, dato un nastro iniziale contenente un numero intero n>0, termina la sua esecuzione lasciando sul nastro il numero n-1.
  2. Esempi

    nastro iniziale

    nastro finale

    14

    13

    1

    0

    200

    199

     

  3. Programmare una macchina di Turing che, dato un nastro iniziale contenente un numero intero n compreso tra 1 e 9, termina la sua esecuzione lasciando sul nastro n A consecutive.
  4. Esempi

    nastro iniziale

    nastro finale

    1

    A

    5

    AAAAA

    9

    aaaaaaaaa

     

  5. Programmare una macchina di Turing che, dato un nastro iniziale contenente una sequenza di n A consecutive (con n>0), termina la sua esecuzione lasciando sul nastro il numero n.
  6. Esempi

    nastro iniziale

    nastro finale

    A

    1

    AAAAAA

    6

    AAAAAAAAAAA

    11

     

  7. Programmare una macchina di Turing che, dato un nastro iniziale contenente due numeri interi positivi x e y separati da una cella vuota tali che x>y e 9>=y>0, termina la sua esecuzione lasciando sul nastro soltanto la differenza tra x e y.
  8. Esempi

    nastro iniziale

    nastro finale

    9-4

    5

    13-6

    7

    302-3

    299

     

  9. Indichiamo con S una sequenza formata da A, B o C ed indichiamo con x e y un simbolo che sia A o B. Programmare una macchina di Turing che, dato un nastro iniziale contenente una sequenza del tipo xyS termina la sua esecuzione lasciando sul nastro la sequenza ottenuta da S rimpiazzando tutte le occorrenze di x con y.
  10. Esempi

    nastro iniziale

    nastro finale

    ABcAB

    CBB

    BBABC

    ABC

    BA

     

     

     

     

  11. Programmare una macchina di Turing che, dato un nastro iniziale contenente due sequenze di A separate da una D, termina la sua esecuzione lasciando sul nastro la sequenza che contiene il maggior numero di A.
  12. Esempi

    nastro iniziale

    nastro finale

    AADA

    AA

    AADAAA

    AAA

    AADAA

    DA

    AA

    A

     

  13. Indichiamo con S e T due sequenze non vuote e della stessa lunghezza formate da A o B. Programmare una macchina di Turing che, dato un nastro iniziale contenente una sequenza del tipo SDT, termina la sua esecuzione lasciando sul nastro nastro la sola sequenza SI se T è un anagramma di S, la sola sequenza NO altrimenti.
  14. Esempi

    nastro iniziale

    nastro finale

    ABADBAA

    SI

    BABADABBA

    SI

    ABBDBAA

    ABADABB

    NO

    NO

     

  15. Programmare una macchina di Turing che, dato un nastro iniziale contenente un numero intero (arbitrariamente grande), termina la sua esecuzione lasciando sul nastro la sola sequenza SI se il numero è divisibile per 3, la sola sequenza NO altrimenti.
  16. Esempi

    nastro iniziale

    nastro finale

    3

    SI

    27

    SI

    81

    SI

    20

    NO

    7676585

    NO

     

  17. Una sequenza di parentesi si dice bilanciata secondo la seguente definizione induttiva:

    1. la sequenza vuota è bilanciata,
    2. se S e T sono sequenze bilanciate allora anche la sequenza ( S ) T è bilanciata.

Rappresentando ( con B e ) con E, programmare una macchina di Turing che, dato un nastro iniziale contenente una sequenza di B ed E, termina la sua esecuzione lasciando sul nastro la sola sequenza SI se la sequenza è bilanciata, la sola sequenza NO altrimenti.

Esempi

nastro iniziale

nastro finale

BEBE

SI

BBBEEE

SI

BBEBEE

BBBEBEEBEE

SI

SI

BEE

NO

BBEEEB

NO