Skip to content

Instantly share code, notes, and snippets.

@Alex-Swann
Created May 8, 2016 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Alex-Swann/8aaa626c5c9c8703bf7cf49d589ae380 to your computer and use it in GitHub Desktop.
Save Alex-Swann/8aaa626c5c9c8703bf7cf49d589ae380 to your computer and use it in GitHub Desktop.
def solve(minemap, miner, exit)
@minemap = minemap
@miner = miner
arr = [[miner['x'],miner['y']]]
@arr = arr
hash = Hash[ [[1,0],[0,1],[-1,0],[0,-1]].zip ['down','right','up','left'] ]
def go_step?(a,b)
@miner['x']+a < @minemap.size &&
@miner['x']+a >= 0 &&
@miner['y']+b < @minemap.transpose.size &&
@miner['y']+b >= 0 &&
@minemap[@miner['x']+a][@miner['y']+b] == true &&
!@arr.include?([@miner['x']+a,@miner['y']+b])
end
def go_ahead(a,b)
@miner['x'] += a
@miner['y'] += b
@arr << [@miner['x'],@miner['y']]
end
while miner != exit
if go_step?(1,0)
go_ahead(1,0)
elsif go_step?(0,1)
go_ahead(0,1)
elsif go_step?(-1,0)
go_ahead(-1,0)
elsif go_step?(0,-1)
go_ahead(0,-1)
else
1.upto(arr.size) do |i|
miner['x'] = arr[-i][0]
miner['y'] = arr[-i][1]
if go_step?(1,0)
go_ahead(1,0)
break
elsif go_step?(0,1)
go_ahead(0,1)
break
elsif go_step?(-1,0)
go_ahead(-1,0)
break
else go_step?(0,-1)
go_ahead(0,-1)
break
end
end
end
end
vector = []
while !arr.empty?
vector << arr[0].zip(arr[1]).map { |x, y| y - x } unless arr[1] == nil
arr.shift
end
simplify_vector = []
while simplify_vector != vector
simplify_vector = vector.dup
0.upto(vector.size-1) do |i|
begin
if vector[i].map{ |n| n * -1 } == vector[i+1]
vector.delete_at(i)
vector.delete_at(i+1)
end
rescue
end
end
end
vector.map{|x| hash[x]}
end
minemap = [[true, true, true, true],
[false, true, false, false],
[true, true, true, true],
[true,false,false,false]]
p solve(minemap, {'x'=>0,'y'=>0}, {'x'=>3,'y'=>0})
#Ignore below
#['down','down','right','right','up','up']
# for me; right = down, down = right, left = up, up = left
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment