Advertisement
Guest User

Untitled

a guest
Dec 8th, 2022
571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.18 KB | None | 0 0
  1. from assets.day8 import data
  2.  
  3.  
  4. def medidas(data):
  5.     return len(data[0]), len(data)
  6.  
  7.  
  8. def valor(data, x, y):
  9.     largo, alto = medidas(data)
  10.  
  11.     if x < 0 or y < 0 or x >= largo or y >= alto:
  12.         return None
  13.  
  14.     return data[y][x]
  15.  
  16.  
  17. def get_tramo(data, x, y, vx, vy):
  18.     actual = valor(data, x, y)
  19.     salida = []
  20.  
  21.     while actual is not None:
  22.         salida.append(actual)
  23.         x += vx
  24.         y += vy
  25.         actual = valor(data, x, y)
  26.  
  27.     salida = salida[1:]
  28.     if salida == []:
  29.         return [-1]
  30.  
  31.     return salida
  32.  
  33. def puntaje(valor,distancia):
  34.     if distancia==[-1]:
  35.         return 0
  36.     i=1
  37.     for x in distancia:
  38.         if x>=valor:
  39.             break
  40.  
  41.         i+=1
  42.     else:
  43.         i-=1
  44.  
  45.     final=i
  46.     if len(distancia)==3 and final==3:
  47.         pass
  48.         #print(f"assert puntaje({valor},{distancia})=={final}")
  49.     return final
  50.  
  51. def prueba():
  52.     assert puntaje(2, [3, 3, 0]) == 1
  53.  
  54.     assert valor(data, 1, 1) == 5
  55.  
  56.     assert get_tramo(data, 1, 1, -1, 0) == [2], get_tramo(data, 1, 1, -1, 0)
  57.     assert get_tramo(data, 1, 1, 1, 0) == [5, 1, 2]
  58.     assert get_tramo(data, 1, 1, 0, 1) == [5, 3, 5]
  59.     assert get_tramo(data, 1, 1, 0, -1) == [0]
  60.     assert get_tramo(data, 0, 0, -1, 0) == [-1]
  61.  
  62.     assert puntaje(5,[3])==1
  63.     assert puntaje(5,[5,2])==1
  64.     assert puntaje(5,[1,2])==2
  65.     assert puntaje(5,[3,5,3])==2
  66.  
  67.     assert score(1,1,2,2)==4
  68.  
  69.     assert puntaje(5,[3,5,3])==2
  70.     assert puntaje(5,[3,3])==2
  71.     assert puntaje(5,[3])==1
  72.     assert puntaje(5,[4,9])==2
  73.  
  74.     assert score(2,2,1,2)==8
  75.  
  76.     assert puntaje(3,[0,3,7,3])==2
  77.     assert puntaje(3,[2,6,3,3])==2
  78.  
  79.     assert puntaje(3,[1,2,2,2])==4
  80.     assert puntaje(0,[-1])==0
  81.  
  82.     assert puntaje(2,[0, 1, 1])==3
  83.  
  84.     assert puntaje(5,[0])==1
  85.  
  86.     assert puntaje(8,[6, 4, 2, 2, 6, 3, 4, 5, 5, 7, 0, 5, 6, 0, 5, 3, 6])==17
  87.  
  88.  
  89. def get_data():
  90.     file=open('assets/day8.txt','r').read().strip().split('\n')
  91.     salida=[]
  92.     for x in file:
  93.         salida.append([int(y) for y in list(x)])
  94.  
  95.     return salida
  96.  
  97. def score(p1,p2,p3,p4):
  98.     return p1*p2*p3*p4
  99.  
  100. def main2():
  101.     prueba()
  102.  
  103.     data = get_data()
  104.     wi, he = medidas(data)
  105.  
  106.     puntajes=[]
  107.     for x in range(wi):
  108.         for y in range(he):
  109.             target = valor(data, x, y)
  110.  
  111.  
  112.             p1=puntaje(target,get_tramo(data, x, y, -1, 0))
  113.             p2=puntaje(target,get_tramo(data, x, y, 1, 0))
  114.             p3=puntaje(target,get_tramo(data, x, y, 0, 1))
  115.             p4=puntaje(target,get_tramo(data, x, y, 0, -1))
  116.  
  117.             puntajes.append(p1*p2*p3*p4)
  118.  
  119.  
  120.     print(max(puntajes))
  121.  
  122. def main1():
  123.     prueba()
  124.  
  125.     data = get_data()
  126.     wi, he = medidas(data)
  127.  
  128.     total = 0
  129.     for x in range(wi):
  130.         for y in range(he):
  131.             target = valor(data, x, y)
  132.  
  133.             if any((
  134.                     max(get_tramo(data, x, y, -1, 0)) < target,
  135.                     max(get_tramo(data, x, y, 1, 0)) < target,
  136.                     max(get_tramo(data, x, y, 0, 1)) < target,
  137.                     max(get_tramo(data, x, y, 0, -1)) < target,
  138.             )):
  139.                 total+=1
  140.  
  141.  
  142.     print(total)
  143.  
  144.  
  145. if __name__ == '__main__':
  146.     main1()
  147.     main2()
  148.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement