Files
2024-01-09 00:57:14 -05:00

54 lines
2.8 KiB
Ruby

# frozen_string_literal: true
grid = []
start_pos = [0, 0]
File.foreach('./2023/day10/data').with_index do |line, number|
start_pos = [line.index('S'), number] if line.include? 'S'
grid << line.split('')
end
# +x direction is right, +y direction is down
puts "Start POS: x: #{start_pos[0]} y: #{start_pos[1]}"
last_pos = start_pos
if (grid[start_pos[1] + 1][start_pos[0]] == '|') || (grid[start_pos[1] + 1][start_pos[0]] == 'J') || (grid[start_pos[1] + 1][start_pos[0]] == 'L')
cur_pos = [start_pos[0], start_pos[1] + 1]
elsif (grid[start_pos[1]][start_pos[0] + 1] == '-') || (grid[start_pos[1]][start_pos[0] + 1] == 'J')
cur_pos = [start_pos[0] + 1, start_pos[1]]
elsif (grid[start_pos[1]][start_pos[0] - 1] == '-') || (grid[start_pos[1]][start_pos[0] - 1] == 'L')
cur_pos = [start_pos[0] - 1, start_pos[1]]
elsif (grid[start_pos[1] - 1][start_pos[0]] == '|') || (grid[start_pos[1] - 1][start_pos[0]] == 'F') || (grid[start_pos[1] - 1][start_pos[0]] == '7')
cur_pos = [start_pos[0], start_pos[1] - 1]
end
dist = 0
log_count = 0
while cur_pos != start_pos
dist += 1
log_count += 1
puts dist if (log_count % 100_000).zero?
if (last_pos != [cur_pos[0],
cur_pos[1] + 1]) && (grid[cur_pos[1]][cur_pos[0]] == '|' || grid[cur_pos[1]][cur_pos[0]] == 'F' || grid[cur_pos[1]][cur_pos[0]] == '7') && ((grid[cur_pos[1] + 1][cur_pos[0]] == '|') || (grid[cur_pos[1] + 1][cur_pos[0]] == 'J') || (grid[cur_pos[1] + 1][cur_pos[0]] == 'L'))
last_pos = [cur_pos[0], cur_pos[1]]
cur_pos = [cur_pos[0], cur_pos[1] + 1]
elsif (last_pos != [cur_pos[0] + 1,
cur_pos[1]]) && (grid[cur_pos[1]][cur_pos[0]] == 'L' || grid[cur_pos[1]][cur_pos[0]] == '-' || grid[cur_pos[1]][cur_pos[0]] == 'F') && ((grid[cur_pos[1]][cur_pos[0] + 1] == '-') || (grid[cur_pos[1]][cur_pos[0] + 1] == 'J') || (grid[cur_pos[1]][cur_pos[0] + 1] == '7'))
last_pos = [cur_pos[0], cur_pos[1]]
cur_pos = [cur_pos[0] + 1, cur_pos[1]]
elsif (last_pos != [cur_pos[0] - 1,
cur_pos[1]]) && (grid[cur_pos[1]][cur_pos[0]] == '-' || grid[cur_pos[1]][cur_pos[0]] == '7' || grid[cur_pos[1]][cur_pos[0]] == 'J') && ((grid[cur_pos[1]][cur_pos[0] - 1] == '-') || (grid[cur_pos[1]][cur_pos[0] - 1] == 'L') || (grid[cur_pos[1]][cur_pos[0] - 1] == 'F'))
last_pos = [cur_pos[0], cur_pos[1]]
cur_pos = [cur_pos[0] - 1, cur_pos[1]]
elsif (last_pos != [cur_pos[0],
cur_pos[1] - 1]) && (grid[cur_pos[1]][cur_pos[0]] == 'J' || grid[cur_pos[1]][cur_pos[0]] == 'L' || grid[cur_pos[1]][cur_pos[0]] == '|') && ((grid[cur_pos[1] - 1][cur_pos[0]] == '|') || (grid[cur_pos[1] - 1][cur_pos[0]] == 'F') || (grid[cur_pos[1] - 1][cur_pos[0]] == '7'))
last_pos = [cur_pos[0], cur_pos[1]]
cur_pos = [cur_pos[0], cur_pos[1] - 1]
else
break
end
end
puts (dist / 2.0).ceil