Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. #!/bin/ruby
  2.  
  3. require 'json'
  4. require 'stringio'
  5.  
  6. class Array
  7. def coordinates(elem)
  8. each_with_index do |subarray, i|
  9. j = subarray.index(elem)
  10. return i,j if j
  11. end
  12. end
  13. end
  14.  
  15. def min(*values)
  16. return values.min
  17. end
  18.  
  19. def countLuck(matrix, k)
  20. max_x = matrix.length - 1
  21. max_y = matrix[0].length - 1
  22. visited = Array.new(max_x+1){Array.new(max_y+1,false)}
  23. min_wand_waves = 1000
  24. define_method(:takeStep) do |x,y,w|
  25. #puts "ts #{x},#{y}"
  26. wand_waves = w
  27. visited[x][y]=true
  28. steps = []
  29. if matrix[x][y] == "*"
  30. #puts "ww #{min_wand_waves}, #{wand_waves}"
  31. min_wand_waves = min(min_wand_waves, wand_waves)
  32. elsif matrix[x][y] == "." || matrix[x][y] == "M"
  33. up = [-1,0]
  34. down = [1,0]
  35. left = [0,-1]
  36. right = [0,1]
  37. updownleftright = [up,down,left,right]
  38. updownleftright.each do |i|
  39. next_x = x + i[0]
  40. next_y = y + i[1]
  41. next if next_x > max_x || next_y > max_y || matrix[next_x][next_y] == "X" || next_x < 0 || next_y < 0 || visited[next_x][next_y]
  42. #puts "udlr #{x},#{y},#{next_x},#{next_y}"
  43. steps.push([next_x,next_y])
  44. end
  45. wand_waves += 1 if steps.length > 1
  46. steps.each do |xy|
  47. #puts "steps #{xy[0]}, #{xy[1]}, #{wand_waves}"
  48. takeStep(xy[0],xy[1],wand_waves)
  49. end
  50. end
  51. end
  52. start_point = matrix.coordinates('M')
  53. takeStep(start_point[0],start_point[1],0)
  54. if k == min_wand_waves
  55. return "Impressed"
  56. else
  57. return "Oops!"
  58. end
  59. end
  60.  
  61. fptr = File.open(ENV['OUTPUT_PATH'], 'w')
  62.  
  63. t = gets.to_i
  64.  
  65. t.times do |t_itr|
  66. nm = gets.rstrip.split
  67.  
  68. n = nm[0].to_i
  69.  
  70. m = nm[1].to_i
  71.  
  72. matrix = Array.new(n)
  73.  
  74. n.times do |i|
  75. matrix_item = gets.to_s.rstrip
  76. matrix[i] = matrix_item
  77. end
  78.  
  79. k = gets.to_i
  80.  
  81. result = countLuck matrix, k
  82.  
  83. fptr.write result
  84. fptr.write "\n"
  85. end
  86.  
  87. fptr.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement