fork download
  1. def solve(i):
  2. ls = i.splitlines()
  3. lc = len(ls)
  4.  
  5. def axes_pos(x, y):
  6. return y, x + y, lc - 1 - y + x
  7.  
  8. I = 2 ** 64
  9. bmin = (I, I, I)
  10. bmax = (0, 0, 0)
  11.  
  12. for y, line in enumerate(ls):
  13. for x, char in enumerate(line):
  14. if char != '#': continue
  15. p = axes_pos(x, y)
  16. bmax = tuple(map(max, bmax, p))
  17. bmin = tuple(map(min, bmin, p))
  18.  
  19. result = ''
  20. for y, line in enumerate(ls):
  21. # if y > 0: result += '\n'
  22. for x, char in enumerate(line):
  23. if char != '.':
  24. result += char
  25. else:
  26. p = axes_pos(x, y)
  27. f = all(bmin[j] <= p[j] <= bmax[j] for j in range(0, 3))
  28. result += '#' if f else char
  29. result += '\n'
  30.  
  31. return result
  32.  
  33.  
  34. def run_test(a, b):
  35. result = solve(a)
  36. if result != b:
  37. raise AssertionError('\n' + result + '\n\nshould be equal to\n\n' + b)
  38.  
  39.  
  40. def run_tests():
  41. run_test(
  42. "#\n",
  43.  
  44. "#\n")
  45.  
  46. run_test(
  47. " . . \n"
  48. "# . #\n"
  49. " . . \n",
  50.  
  51. " . . \n"
  52. "# # #\n"
  53. " . . \n")
  54.  
  55. run_test(
  56. " . # \n"
  57. ". . .\n"
  58. " # . \n",
  59.  
  60. " . # \n"
  61. ". # .\n"
  62. " # . \n")
  63.  
  64. run_test(
  65. " # . \n"
  66. ". . .\n"
  67. " . # \n",
  68.  
  69. " # . \n"
  70. ". # .\n"
  71. " . # \n")
  72.  
  73. run_test(
  74. " # . \n"
  75. "# . .\n"
  76. " . # \n",
  77.  
  78. " # . \n"
  79. "# # .\n"
  80. " # # \n")
  81.  
  82. run_test(
  83. " . # \n"
  84. "# . .\n"
  85. " . # \n",
  86.  
  87. " # # \n"
  88. "# # #\n"
  89. " # # \n")
  90.  
  91. run_test(
  92. ". . . . . . . . \n"
  93. " . . # . # . . .\n"
  94. ". . . . . . . . \n"
  95. " . . . # . . . .\n",
  96.  
  97. ". . . . . . . . \n"
  98. " . . # # # . . .\n"
  99. ". . . # # . . . \n"
  100. " . . . # . . . .\n")
  101.  
  102. run_test(
  103. ". . . . . . . . \n"
  104. " . . # . . . # .\n"
  105. ". . . . . . . . \n"
  106. " . . . # . . . .\n",
  107.  
  108. ". . . . . . . . \n"
  109. " . . # # # # # .\n"
  110. ". . . # # # # . \n"
  111. " . . . # # # . .\n")
  112.  
  113. run_test(
  114. ". . . . . . . . \n"
  115. " . # . . . . . .\n"
  116. ". . . . . # . . \n"
  117. " . . . . . . . .\n",
  118.  
  119. ". . . . . . . . \n"
  120. " . # # # # . . .\n"
  121. ". . # # # # . . \n"
  122. " . . . . . . . .\n")
  123.  
  124. run_test(
  125. ". . . . . . . . \n"
  126. " . # . . . . . .\n"
  127. ". . . . . # . . \n"
  128. " . . # . . . . .\n",
  129.  
  130. ". . . . . . . . \n"
  131. " . # # # # . . .\n"
  132. ". . # # # # . . \n"
  133. " . . # # # . . .\n")
  134.  
  135. run_test(
  136. ". . . . # . . . \n"
  137. " . # . . . # . .\n"
  138. ". . . # . . . . \n"
  139. " . . . . . # . .\n",
  140.  
  141. ". . # # # # . . \n"
  142. " . # # # # # . .\n"
  143. ". . # # # # # . \n"
  144. " . . # # # # . .\n")
  145.  
  146.  
  147. if __name__ == '__main__':
  148. run_tests()
  149.  
Success #stdin #stdout 0.01s 9992KB
stdin
Standard input is empty
stdout
Standard output is empty