From e12436c99bb04897d6344b6351d0336e4c627573 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Thu, 28 Nov 2019 17:38:10 +0100 Subject: add rest --- day13.rb | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 day13.rb (limited to 'day13.rb') diff --git a/day13.rb b/day13.rb new file mode 100644 index 0000000..9b2003c --- /dev/null +++ b/day13.rb @@ -0,0 +1,137 @@ +maze = File.readlines("day13") + +xmaze = <<'EOF'.lines.to_a +/->-\ +| | /----\ +| /-+--+-\ | +| | | | v | +\-+-/ \-+--/ + \------/ +EOF + +cars = [] + +maze.each_with_index { |row, i| + row.chars.each_with_index { |col, j| + case col + when "^"; cars << [i,j,:n,:l]; row[j] = "|" + when ">"; cars << [i,j,:e,:l]; row[j] = "-" + when "v"; cars << [i,j,:s,:l]; row[j] = "|" + when "<"; cars << [i,j,:w,:l]; row[j] = "-" + end + } +} + + +cars = [ + [65, 26, :s, :r], + [105, 39, :n, :l], + [140, 85, :e, :r] +] + +puts maze + +crashed = [] + +loop { + cars.sort! #_by! { |(i,j,d,s)| [j,i] } + + p cars.size + p cars + + m = maze.map {|l|l.dup} + cars.each { |(i,j,d,s)| + m[i][j] = case d + when :e; ">" + when :n; "^" + when :s; "v" + when :w; "<" + end + } +# puts m + + if cars.size == 1 + p cars + break + end + + cars.each_with_index { |(i,j,d,s),n| + p [maze[i][j],d] + case [maze[i][j],d] + when ["-", :e] + cars[n][1] += 1 + when ["-", :w] + cars[n][1] -= 1 + when ["|", :s] + cars[n][0] += 1 + when ["|", :n] + cars[n][0] -= 1 + when ["+", :s] + case s + when :l; cars[n][1] +=1; cars[n][2] = :e; cars[n][3] = :s + when :s; cars[n][0] +=1; cars[n][3] = :r + when :r; cars[n][1] -=1; cars[n][2] = :w; cars[n][3] = :l + end + when ["+", :n] + case s + when :l; cars[n][1] -=1; cars[n][2] = :w; cars[n][3] = :s + when :s; cars[n][0] -=1; cars[n][3] = :r + when :r; cars[n][1] +=1; cars[n][2] = :e; cars[n][3] = :l + end + when ["+", :e] + case s + when :l; cars[n][0] -=1; cars[n][2] = :n; cars[n][3] = :s + when :s; cars[n][1] +=1; cars[n][3] = :r + when :r; cars[n][0] +=1; cars[n][2] = :s; cars[n][3] = :l + end + when ["+", :w] + case s + when :l; cars[n][0] +=1; cars[n][2] = :s; cars[n][3] = :s + when :s; cars[n][1] -=1; cars[n][3] = :r + when :r; cars[n][0] -=1; cars[n][2] = :n; cars[n][3] = :l + end + when ["\\", :e] + cars[n][2] = :s + cars[n][0] += 1 + when ["/", :e] + cars[n][2] = :n + cars[n][0] -= 1 + when ["\\", :n] + cars[n][2] = :w + cars[n][1] -= 1 + when ["/", :n] + cars[n][2] = :e + cars[n][1] += 1 + when ["\\", :s] + cars[n][2] = :e + cars[n][1] += 1 + when ["/", :s] + cars[n][2] = :w + cars[n][1] -= 1 + when ["/", :w] + cars[n][2] = :s + cars[n][0] += 1 + when ["\\", :w] + cars[n][2] = :n + cars[n][0] -= 1 + else + p [:miss, maze[i][j], d] + end + + if cars.each.with_index.any? { |(i2,j2,_,_,m)| i == i2 && j == j2 && n != m } + if crashed.empty? + p [:crash, j, i] + end + crashed << true + cars.delete_at n + cars.delete_if { |(i2,j2,_,_,m)| i == i2 && j == j2 } + end + + } +} + +p cars + +# 32,8 ok +# 38,38 + -- cgit 1.4.1