Advertisement
MagicWinnie

Untitled

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