Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from assets.day8 import data
- def medidas(data):
- return len(data[0]), len(data)
- def valor(data, x, y):
- largo, alto = medidas(data)
- if x < 0 or y < 0 or x >= largo or y >= alto:
- return None
- return data[y][x]
- def get_tramo(data, x, y, vx, vy):
- actual = valor(data, x, y)
- salida = []
- while actual is not None:
- salida.append(actual)
- x += vx
- y += vy
- actual = valor(data, x, y)
- salida = salida[1:]
- if salida == []:
- return [-1]
- return salida
- def puntaje(valor,distancia):
- if distancia==[-1]:
- return 0
- i=1
- for x in distancia:
- if x>=valor:
- break
- i+=1
- else:
- i-=1
- final=i
- if len(distancia)==3 and final==3:
- pass
- #print(f"assert puntaje({valor},{distancia})=={final}")
- return final
- def prueba():
- assert puntaje(2, [3, 3, 0]) == 1
- assert valor(data, 1, 1) == 5
- assert get_tramo(data, 1, 1, -1, 0) == [2], get_tramo(data, 1, 1, -1, 0)
- assert get_tramo(data, 1, 1, 1, 0) == [5, 1, 2]
- assert get_tramo(data, 1, 1, 0, 1) == [5, 3, 5]
- assert get_tramo(data, 1, 1, 0, -1) == [0]
- assert get_tramo(data, 0, 0, -1, 0) == [-1]
- assert puntaje(5,[3])==1
- assert puntaje(5,[5,2])==1
- assert puntaje(5,[1,2])==2
- assert puntaje(5,[3,5,3])==2
- assert score(1,1,2,2)==4
- assert puntaje(5,[3,5,3])==2
- assert puntaje(5,[3,3])==2
- assert puntaje(5,[3])==1
- assert puntaje(5,[4,9])==2
- assert score(2,2,1,2)==8
- assert puntaje(3,[0,3,7,3])==2
- assert puntaje(3,[2,6,3,3])==2
- assert puntaje(3,[1,2,2,2])==4
- assert puntaje(0,[-1])==0
- assert puntaje(2,[0, 1, 1])==3
- assert puntaje(5,[0])==1
- assert puntaje(8,[6, 4, 2, 2, 6, 3, 4, 5, 5, 7, 0, 5, 6, 0, 5, 3, 6])==17
- def get_data():
- file=open('assets/day8.txt','r').read().strip().split('\n')
- salida=[]
- for x in file:
- salida.append([int(y) for y in list(x)])
- return salida
- def score(p1,p2,p3,p4):
- return p1*p2*p3*p4
- def main2():
- prueba()
- data = get_data()
- wi, he = medidas(data)
- puntajes=[]
- for x in range(wi):
- for y in range(he):
- target = valor(data, x, y)
- p1=puntaje(target,get_tramo(data, x, y, -1, 0))
- p2=puntaje(target,get_tramo(data, x, y, 1, 0))
- p3=puntaje(target,get_tramo(data, x, y, 0, 1))
- p4=puntaje(target,get_tramo(data, x, y, 0, -1))
- puntajes.append(p1*p2*p3*p4)
- print(max(puntajes))
- def main1():
- prueba()
- data = get_data()
- wi, he = medidas(data)
- total = 0
- for x in range(wi):
- for y in range(he):
- target = valor(data, x, y)
- if any((
- max(get_tramo(data, x, y, -1, 0)) < target,
- max(get_tramo(data, x, y, 1, 0)) < target,
- max(get_tramo(data, x, y, 0, 1)) < target,
- max(get_tramo(data, x, y, 0, -1)) < target,
- )):
- total+=1
- print(total)
- if __name__ == '__main__':
- main1()
- main2()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement