ZIG-mondo

Attività proposta ad una II PNI a.s. 2009-10

Ricordo che nel corso PNI l'insegnamento dell'informatica era di competenza del docente di matematica e fisica.

Zig-modo è piatto (2 dimensioni) per noi che lo vediamo da “fuori” per i zig-abitanti è il mondo.

Il generico zig-abitante si muove in modo un po’ strano (per noi, naturale per lui): prima di fare un passo lancia il suo zig-dado (un quadrato con i lati colorati diciamo: colore 1, colore 2, colore 3, colore 0, se

• esce 0 avanti uno

• esce 1 indietro uno

• esce 2 ruota di $90^o$ e avanti uno

• esce 3 ruota di $−90^o$ e avanti uno

Nello Zig-mondo accadono alcune cose:

• gli agenti atmosferici nello zig-mondo condizionano notevolmente il movimento, infatti:

se zig-piove i percorsi accessibili a zig diventano solo: ruota di $90^o$ e avanti uno e ruota di $−90^o$ e avanti uno,

se zig-nevica ci si può muovere solo avanti uno;

• nel corso degli ultimi dieci zig-secoli si è scoperto che ogni anno zig-piove il 25% dei zig-giorni, zig-nevica il 40% dei zig-giorni;

• nel mondo di zig non ci sono stagioni (di questo, ZIG, non si è accorto ma rientra nelle sue intuizioni).

In [16]:
import random
import numpy as np
import matplotlib.pyplot as plt
In [17]:
def mossa(x,y,chip,dado):
    x0,y0 = x,y
    if chip == 0:
        if dado==0:
            x +=1
        elif dado==1:
            x -=1
        elif dado==2:
            y +=1
        elif dado==3:
            y -=1
    if chip == 1:
        if dado==0:
            y +=1
        elif dado==1:
            y -=1
        elif dado==2:
            x +=1
        elif dado==3:
            x -=1
    if x0 == x:
        mosso = 0
    if y0 == y:
        mosso = 1
    return x,y,mosso
In [18]:
def tempooggi(sepiove,senevica):
    # 0 piove
    # 1 nevica
    # 2 nulla
    zigtempo = 2
    tempo = random.random()
    if tempo<sepiove:
        zigtempo = 0
    elif tempo>=sepiove and tempo<senevica:
        zigtempo = 1
    return zigtempo
In [19]:
def passeggiata(meteo,casop,cason):
    zigX = []
    zigY = []
    zigX.append(0)
    zigY.append(0)
    x = 0
    y = 0
    scelte = -1
    mos = -1
    for n in range(0,passi):
        sceltep = scelte
        if meteo == 'bello':
            chetempofa = 2
        else:
            chetempofa = tempooggi(casop,cason)
        if chetempofa == 0:
            scelte = random.randint(2,3)
        elif chetempofa == 2:
            scelte = random.randint(0,3)
        elif chetempofa == 1:
            scelte = 0
        mos0 = mos
        x,y,mos = mossa(x,y,mos0,scelte)
        zigX.append(x)
        zigY.append(y)
    zigX = np.array(zigX, dtype=np.int64)
    zigY = np.array(zigY, dtype=np.int64)
    return zigX,zigY
In [27]:
# passi in un giorno
passi = 800000
spessore = 0.2
fig, riquadro = plt.subplots(2,2,figsize=(10, 10))
X,Y = passeggiata('bello',0,0)
riquadro[0,0].plot(X, Y,'b-',linewidth=spessore)
stringa = 'Zig Mondo: tempo sempre buono'
riquadro[0,0].title.set_text(stringa)
ap = 0.25
an = 0.40
stringa = 'Zig Mondo: tempo variabile piove '+str(ap)+' nevica '+str(an)
riquadro[0,1].title.set_text(stringa)
X,Y = passeggiata('variabile',ap,an)
riquadro[0,1].plot(X, Y,'k-',linewidth=spessore)
ap = 0.1
an = 0.2
stringa = 'Zig Mondo: tempo variabile piove '+str(ap)+' nevica '+str(an)
riquadro[1,0].title.set_text(stringa)
X,Y = passeggiata('variabile',ap,an)
riquadro[1,0].plot(X, Y,'k-',linewidth=spessore)
ap = 0.3
an = 0.1
stringa = 'Zig Mondo: tempo variabile piove '+str(ap)+' nevica '+str(an)
riquadro[1,1].title.set_text(stringa)
X,Y = passeggiata('variabile',ap,an)
riquadro[1,1].plot(X, Y,'k-',linewidth=spessore)
plt.show()
    
In [ ]: