Advertisement
MagicWinnie

Untitled

Jan 1st, 2020
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.81 KB | None | 0 0
  1. import numpy as np
  2. import time
  3. import re
  4. import colorsys
  5. #reading
  6. lines = eval(input())
  7. #f = open("input.txt", "r")
  8. #lines = eval(f.readlines()[0])
  9. #getting head
  10. b = b''
  11. for i in range(0,len(lines)-1):
  12.     b+=lines[i:i+1]
  13.     if lines[i-3:i] == b'255' or lines[i-3:i] == "255":
  14.         break
  15. b = b.decode()
  16. b = re.sub(' +', ' ', b).strip().rstrip().splitlines()
  17. while ' ' in b:
  18.     b.remove(' ')
  19.  
  20. #getting map
  21. d = lines[i+1:]
  22.  
  23. #decoding
  24. arr = []
  25. for i in range(0,len(d),3):
  26.     arr.append([d[i], d[i+1], d[i+2]])
  27.  
  28. #reshaping
  29. arr_new = np.reshape(arr,(91,85,3))
  30.  
  31. #creating image
  32. arr_new = np.array(arr_new, dtype="uint8")
  33.  
  34.  
  35. #getting maxval, width and height
  36. maxval = b[-1]
  37. first = 0
  38. for i in range(len(b)):
  39.     if b[i].split()[0].isdigit() and first == 0:
  40.         width = int(b[i].split()[0])
  41.         first = 1
  42.     elif b[i].split()[0].isdigit() and first != 0:
  43.         height = int(b[i].split()[0])
  44.         break
  45. header = "P6 {} {} {}\n".format(width, height, maxval).encode()
  46.  
  47. #getting comments
  48. arr_comments = []
  49. for i in range(len(b)):    
  50.     if b[i].find('#') != -1:
  51.         if b[i].find('!') != -1 and (b[i][1]=='!' or b[i][2] == '!'):
  52.             arr_comments.append(b[i].replace('#', '').replace('!', '').split())
  53.  
  54. def hsv2rgb(h,s,v):
  55.     h = h/360
  56.     s = s/100
  57.     v = v/100
  58.     return tuple(round(i * 255) for i in colorsys.hsv_to_rgb(h,s,v))
  59.  
  60.  
  61. #hsv2rgb
  62. for i in range(len(arr_comments)):
  63.     arr_comments[i][0] = int(arr_comments[i][0])
  64.     arr_comments[i][1] = float(arr_comments[i][1][:len(arr_comments[i][1])-1])
  65.     if "%" in arr_comments[i][2]:
  66.         arr_comments[i][2] = float(arr_comments[i][2][:len(arr_comments[i][2])-1])
  67.     else:
  68.         arr_comments[i][2] = float(arr_comments[i][2])*100
  69.     if "%" in arr_comments[i][3]:
  70.         arr_comments[i][3] = float(arr_comments[i][3][:len(arr_comments[i][3])-1])
  71.     else:
  72.         arr_comments[i][3] = float(arr_comments[i][3])*100
  73.     arr_comments[i][1], arr_comments[i][2], arr_comments[i][3] = hsv2rgb(arr_comments[i][1], arr_comments[i][2], arr_comments[i][3])
  74.  
  75. def rass(rgb,rgb1):
  76.     r, g, b = rgb
  77.     r1, g1, b1 = rgb1
  78.     return ((r1-r)**2 + (g1-g)**2 + (b1-b)**2)**0.5
  79.  
  80. for i in range(len(arr_new)):
  81.     for j in range(len(arr_new[i])):
  82.         temp = []
  83.         for k in range(len(arr_comments)):
  84.             temp.append(rass(arr_new[i][j], arr_comments[k][1:]))
  85.         indices = [y for y, x in enumerate(temp) if x == min(temp)]    
  86.         # print(arr_comments[temp.index(min(temp))])
  87.         temp = []
  88.         for y in range(len(indices)):
  89.             temp.append(arr_comments[indices[y]])
  90.         m = 100000000
  91.         m_v = []
  92.         for y in range(len(temp)):
  93.             if temp[y][0] < m:
  94.                 m_v = temp[y][1:]
  95.         arr_new[i][j] = m_v
  96. print(header+bytes(np.array(arr_new).ravel()))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement