parent
47b07ceb34
commit
ad8fb67c6c
@ -0,0 +1,54 @@
|
|||||||
|
actions = ARGF.read.scan(/(\w)(\d+)/).map {|a,v| [a, v.to_i] }
|
||||||
|
|
||||||
|
dir = 0
|
||||||
|
pos = [0, 0]
|
||||||
|
way = [10, 1]
|
||||||
|
actions.each do |a,v|
|
||||||
|
# delta = case a
|
||||||
|
# when ?N
|
||||||
|
# [ 0, v]
|
||||||
|
# when ?S
|
||||||
|
# [ 0, -v]
|
||||||
|
# when ?E
|
||||||
|
# [ v, 0]
|
||||||
|
# when ?W
|
||||||
|
# [-v, 0]
|
||||||
|
# when ?L
|
||||||
|
# dir += v
|
||||||
|
# [0, 0]
|
||||||
|
# when ?R
|
||||||
|
# dir -= v
|
||||||
|
# [0, 0]
|
||||||
|
# when ?F
|
||||||
|
# rad = dir * Math::PI / 180.0
|
||||||
|
# [v * Math.cos(rad), v * Math.sin(rad)].map(&:round)
|
||||||
|
# else
|
||||||
|
# fail
|
||||||
|
# end
|
||||||
|
case a
|
||||||
|
when ?N
|
||||||
|
way[1] += v
|
||||||
|
when ?S
|
||||||
|
way[1] -= v
|
||||||
|
when ?E
|
||||||
|
way[0] += v
|
||||||
|
when ?W
|
||||||
|
way[0] -= v
|
||||||
|
when ?L
|
||||||
|
rad = Math.atan2(*way.reverse)
|
||||||
|
dis = Math.sqrt(way.map {|x| x**2 }.sum)
|
||||||
|
rad += v * Math::PI / 180
|
||||||
|
way = [dis * Math.cos(rad), dis * Math.sin(rad)].map(&:round)
|
||||||
|
when ?R
|
||||||
|
rad = Math.atan2(*way.reverse)
|
||||||
|
dis = Math.sqrt(way.map {|x| x**2 }.sum)
|
||||||
|
rad -= v * Math::PI / 180
|
||||||
|
way = [dis * Math.cos(rad), dis * Math.sin(rad)].map(&:round)
|
||||||
|
when ?F
|
||||||
|
delta = way.map {|i| v * i }
|
||||||
|
pos = pos.zip(delta).map {|a,b| a + b }
|
||||||
|
else
|
||||||
|
fail
|
||||||
|
end
|
||||||
|
end
|
||||||
|
p pos.map(&:abs).sum
|
Loading…
Reference in new issue