Krat0s
05-10-2017, 19:37
Ciao a tutti. Ho ripreso da pochissimo a programmare (ho poche basi di un esame universitario in c++) ed un mio amico mi ha consigliato python.
Vi espongo brevemente il problema: sto provando a fare questi esercizi http://adventofcode.com/2016 ma mi sono incagliato al secondo del primo giorno. Quello che non riesco a fare (a parte l'esercizio in sč) č uscire contemporaneamente da pių cicli for annidati.
Ci sono sopra da un'oretta e qualcosa non va, vi posto dove sono arrivato al momento:
percorso=input('Inserire percorso: ' )
percorso_list=percorso.split(', ')
#nord = 0, est = 1, sud = 2, ovest = 3
coordinate=[0,0]
direzione=0
posizioni_visitate=[]
for i in range(0,len(percorso_list)):
cambio_dir=percorso_list[i][0]
cammino=int(percorso_list[i][1:len(percorso_list[i])])
if cambio_dir == 'L':
direzione=(direzione-1)%4
else:
direzione=(direzione+1)%4
for j in range(0, cammino):
posizioni_visitate.append(coordinate)
if direzione == 0:
coordinate[1]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
if direzione == 1:
coordinate[0]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
if direzione == 2:
coordinate[1]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
if direzione == 3:
coordinate[0]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
else:
continue
break
else:
continue
break
distanza=abs(coordinate[0])+abs(coordinate[1])
print('La distanza totale č: '+str(distanza))
Se dovesse servire, provo a spiegare l'esercizio:
Sono in una griglia (https://en.wikipedia.org/wiki/Taxicab_geometry) sul punto (0,0) guardando verso nord.
Mi vengono dati dei comandi del tipo:
L2 = gira di 90° a sinistra e vai avanti di 2
R4 = gira di 90° a destra e vai avanti di 4
Io, data una serie di comandi, devo dire la distanza del primo punto su cui passo due volte rispetto al punto di partenza
"For example, if your instructions are R8, R4, R4, R8, the first location you visit twice is 4 blocks away, due East.
How many blocks away is the first location you visit twice?"
Grazie mille a chi mi darā una mano :D
Edit: risolto con un po' di prove. Se qualcuno vuole consigliarmi su come scrivere il codice in maniera pių pulita, metto qui la versione "finale":
percorso=input('Inserire percorso: ' )
percorso_list=percorso.split(', ')
#nord = 0, est = 1, sud = 2, ovest = 3
coordinate=[0,0]
direzione=0
posizioni_visitate=[]
for i in range(0,len(percorso_list)):
cambio_dir=percorso_list[i][0]
cammino=int(percorso_list[i][1:len(percorso_list[i])])
if cambio_dir == 'L':
direzione=(direzione-1)%4
else:
direzione=(direzione+1)%4
for j in range(0, cammino):
posizioni_visitate.append(str(coordinate[0]) + ',' + str(coordinate[1]))
if direzione == 0:
coordinate[1]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
if direzione == 1:
coordinate[0]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
if direzione == 2:
coordinate[1]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
if direzione == 3:
coordinate[0]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
else:
continue
break
distanza=abs(coordinate[0])+abs(coordinate[1])
print('La distanza totale č: '+str(distanza))
Vi espongo brevemente il problema: sto provando a fare questi esercizi http://adventofcode.com/2016 ma mi sono incagliato al secondo del primo giorno. Quello che non riesco a fare (a parte l'esercizio in sč) č uscire contemporaneamente da pių cicli for annidati.
Ci sono sopra da un'oretta e qualcosa non va, vi posto dove sono arrivato al momento:
percorso=input('Inserire percorso: ' )
percorso_list=percorso.split(', ')
#nord = 0, est = 1, sud = 2, ovest = 3
coordinate=[0,0]
direzione=0
posizioni_visitate=[]
for i in range(0,len(percorso_list)):
cambio_dir=percorso_list[i][0]
cammino=int(percorso_list[i][1:len(percorso_list[i])])
if cambio_dir == 'L':
direzione=(direzione-1)%4
else:
direzione=(direzione+1)%4
for j in range(0, cammino):
posizioni_visitate.append(coordinate)
if direzione == 0:
coordinate[1]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
if direzione == 1:
coordinate[0]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
if direzione == 2:
coordinate[1]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
if direzione == 3:
coordinate[0]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k]==coordinate:
break
else:
continue
break
else:
continue
break
distanza=abs(coordinate[0])+abs(coordinate[1])
print('La distanza totale č: '+str(distanza))
Se dovesse servire, provo a spiegare l'esercizio:
Sono in una griglia (https://en.wikipedia.org/wiki/Taxicab_geometry) sul punto (0,0) guardando verso nord.
Mi vengono dati dei comandi del tipo:
L2 = gira di 90° a sinistra e vai avanti di 2
R4 = gira di 90° a destra e vai avanti di 4
Io, data una serie di comandi, devo dire la distanza del primo punto su cui passo due volte rispetto al punto di partenza
"For example, if your instructions are R8, R4, R4, R8, the first location you visit twice is 4 blocks away, due East.
How many blocks away is the first location you visit twice?"
Grazie mille a chi mi darā una mano :D
Edit: risolto con un po' di prove. Se qualcuno vuole consigliarmi su come scrivere il codice in maniera pių pulita, metto qui la versione "finale":
percorso=input('Inserire percorso: ' )
percorso_list=percorso.split(', ')
#nord = 0, est = 1, sud = 2, ovest = 3
coordinate=[0,0]
direzione=0
posizioni_visitate=[]
for i in range(0,len(percorso_list)):
cambio_dir=percorso_list[i][0]
cammino=int(percorso_list[i][1:len(percorso_list[i])])
if cambio_dir == 'L':
direzione=(direzione-1)%4
else:
direzione=(direzione+1)%4
for j in range(0, cammino):
posizioni_visitate.append(str(coordinate[0]) + ',' + str(coordinate[1]))
if direzione == 0:
coordinate[1]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
if direzione == 1:
coordinate[0]+=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
if direzione == 2:
coordinate[1]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
if direzione == 3:
coordinate[0]-=1
for k in range(0,len(posizioni_visitate)):
if posizioni_visitate[k] == str(coordinate[0]) + ',' + str(coordinate[1]):
break
else:
continue
break
else:
continue
break
distanza=abs(coordinate[0])+abs(coordinate[1])
print('La distanza totale č: '+str(distanza))