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).
import random
import numpy as np
import matplotlib.pyplot as plt
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
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
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
# 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()