Compare commits

...

2 Commits
master ... day7

Author SHA1 Message Date
Ben Harris bbcf4cadd2
day9!? 2018-12-09 01:47:26 -05:00
Ben Harris fb185bc74f
day7 2018-12-07 19:30:35 -05:00
11 changed files with 554 additions and 0 deletions

116
d6.rb Normal file
View File

@ -0,0 +1,116 @@
points = (ARGV.empty? ? DATA : ARGF).each_line.map { |l|
l.split(', ').map(&:to_i).freeze
}.freeze
ymin, ymax = points.map(&:first).minmax
xmin, xmax = points.map(&:last).minmax
owned = [0] * points.size
infinite = [false] * points.size
within = 0
# Part 1
# Calculate closest labeled point for all points within the bounding box.
# Anything that keeps growing beyond the box we'll call "infinite"
#
# Theretically, we *should* allow a margin to deal w/ cases like this:
# A B
# C
# D
# ... even though no such margin is necessary for my input.
#
# So I'll just arbitrarily set a small one.
#
# (Do part 2 while we're here too)
MARGIN = 2
yrange = (ymin - MARGIN * 2)..(ymax + MARGIN * 2)
xrange = (xmin - MARGIN * 2)..(xmax + MARGIN * 2)
yrange.each { |y|
inside_y = ((ymin - MARGIN)..(ymax + MARGIN)).cover?(y)
edge_y = y == yrange.begin || y == yrange.end
xrange.each { |x|
best_dist = 1.0 / 0.0
best = nil
dist_sum = 0
points.each_with_index { |(yy, xx), i|
dist_sum += dist = (yy - y).abs + (xx - x).abs
if dist < best_dist
best = i
best_dist = dist
elsif dist == best_dist
best = nil
end
}
if dist_sum < 10000
within += 1
edge_x = x == xrange.begin || x == xrange.end
puts "DANGER! SAFE ON EDGE #{y}, #{x}" if edge_y || edge_x
end
next unless best
if inside_y && ((xmin - MARGIN)..(xmax + MARGIN)).cover?(x)
owned[best] += 1
else
infinite[best] = true
end
}
}
puts owned.zip(infinite).reject(&:last).map(&:first).max
puts within
__END__
267, 196
76, 184
231, 301
241, 76
84, 210
186, 243
251, 316
265, 129
142, 124
107, 134
265, 191
216, 226
67, 188
256, 211
317, 166
110, 41
347, 332
129, 91
217, 327
104, 57
332, 171
257, 287
230, 105
131, 209
110, 282
263, 146
113, 217
193, 149
280, 71
357, 160
356, 43
321, 123
272, 70
171, 49
288, 196
156, 139
268, 163
188, 141
156, 182
199, 242
330, 47
89, 292
351, 329
292, 353
290, 158
167, 116
268, 235
124, 139
116, 119
142, 259

155
d7.rb Normal file
View File

@ -0,0 +1,155 @@
TEST = ARGV.delete('-t')
VERBOSE = ARGV.delete('-v')
def work(deps, parallelism, work_factor)
remaining = deps.flatten.uniq
doable = -> {
remaining.select { |t|
deps.none? { |_, y| y == t }
}.min
}
goal = remaining.size
done = ''
# each element is [task_id, finish_time]
workers = [nil] * parallelism
deps = deps.dup
0.step { |t|
# Has anyone finished a task?
workers.each_with_index { |(task, finish_time), i|
next unless finish_time&.<=(t)
done << task
workers[i] = nil
deps.reject! { |x, _| x == task }
puts "t=#{t} worker #{i} finishes #{task}" if VERBOSE
}
# Assign tasks to anyone free
workers.each_index { |i|
next if workers[i]
break unless (todo = doable[])
finish_time = t + work_factor + todo.ord - ?A.ord
puts "t=#{t} assign task #{todo} to #{i}, finishes at #{finish_time}" if VERBOSE
workers[i] = [todo, finish_time]
remaining.delete(todo)
}
break [done, t] if done.size == goal
}
end
deps = (ARGV.empty? ? DATA : ARGF).each_line.map { |l|
l.scan(/[A-Z]/).drop(1).freeze
}.freeze
if TEST
deps = %w(CA CF AB AD BE DE FE).map(&:chars).map(&:freeze).freeze
puts work(deps, 1, -30)[0]
puts work(deps, 2, 1)[1]
else
puts work(deps, 1, -30)[0]
puts work(deps, 5, 61)[1]
end
__END__
Step T must be finished before step X can begin.
Step G must be finished before step O can begin.
Step X must be finished before step B can begin.
Step I must be finished before step W can begin.
Step N must be finished before step V can begin.
Step K must be finished before step H can begin.
Step S must be finished before step R can begin.
Step P must be finished before step J can begin.
Step L must be finished before step V can begin.
Step D must be finished before step E can begin.
Step J must be finished before step R can begin.
Step U must be finished before step W can begin.
Step M must be finished before step Q can begin.
Step B must be finished before step F can begin.
Step F must be finished before step E can begin.
Step V must be finished before step Q can begin.
Step C must be finished before step A can begin.
Step H must be finished before step Z can begin.
Step A must be finished before step Y can begin.
Step O must be finished before step Y can begin.
Step W must be finished before step Q can begin.
Step E must be finished before step Y can begin.
Step Y must be finished before step Z can begin.
Step Q must be finished before step R can begin.
Step R must be finished before step Z can begin.
Step S must be finished before step E can begin.
Step O must be finished before step W can begin.
Step G must be finished before step B can begin.
Step I must be finished before step N can begin.
Step G must be finished before step I can begin.
Step H must be finished before step R can begin.
Step N must be finished before step C can begin.
Step M must be finished before step W can begin.
Step Y must be finished before step R can begin.
Step T must be finished before step B can begin.
Step G must be finished before step D can begin.
Step J must be finished before step O can begin.
Step I must be finished before step A can begin.
Step J must be finished before step H can begin.
Step T must be finished before step Y can begin.
Step N must be finished before step H can begin.
Step B must be finished before step V can begin.
Step M must be finished before step R can begin.
Step Y must be finished before step Q can begin.
Step X must be finished before step J can begin.
Step A must be finished before step E can begin.
Step P must be finished before step Z can begin.
Step P must be finished before step C can begin.
Step N must be finished before step Q can begin.
Step A must be finished before step O can begin.
Step G must be finished before step X can begin.
Step P must be finished before step U can begin.
Step T must be finished before step S can begin.
Step I must be finished before step V can begin.
Step V must be finished before step H can begin.
Step U must be finished before step F can begin.
Step D must be finished before step Q can begin.
Step D must be finished before step O can begin.
Step G must be finished before step H can begin.
Step I must be finished before step Z can begin.
Step N must be finished before step D can begin.
Step B must be finished before step Y can begin.
Step J must be finished before step M can begin.
Step V must be finished before step Y can begin.
Step W must be finished before step Y can begin.
Step E must be finished before step Z can begin.
Step T must be finished before step N can begin.
Step L must be finished before step U can begin.
Step S must be finished before step A can begin.
Step Q must be finished before step Z can begin.
Step T must be finished before step F can begin.
Step F must be finished before step Z can begin.
Step J must be finished before step C can begin.
Step X must be finished before step Y can begin.
Step K must be finished before step V can begin.
Step T must be finished before step I can begin.
Step I must be finished before step O can begin.
Step C must be finished before step W can begin.
Step B must be finished before step Q can begin.
Step W must be finished before step Z can begin.
Step D must be finished before step H can begin.
Step K must be finished before step A can begin.
Step M must be finished before step E can begin.
Step T must be finished before step U can begin.
Step I must be finished before step J can begin.
Step O must be finished before step Q can begin.
Step M must be finished before step Z can begin.
Step U must be finished before step C can begin.
Step N must be finished before step F can begin.
Step C must be finished before step H can begin.
Step X must be finished before step E can begin.
Step F must be finished before step O can begin.
Step P must be finished before step O can begin.
Step J must be finished before step A can begin.
Step H must be finished before step Y can begin.
Step A must be finished before step Q can begin.
Step V must be finished before step Z can begin.
Step S must be finished before step L can begin.
Step H must be finished before step E can begin.
Step X must be finished before step I can begin.
Step O must be finished before step R can begin.

19
d8.rb Normal file
View File

@ -0,0 +1,19 @@
input = (ARGV.empty? ? DATA : ARGF).read.split.map(&:to_i).freeze
# Pass me a block telling me what to do with [child_values, metadata_values]
def val(a, &b)
n_children = a.shift
n_metadata = a.shift
yield(n_children.times.map { val(a, &b) }, a.shift(n_metadata))
end
puts val(input.dup) { |child, meta| child.sum + meta.sum }
puts val(input.dup) { |child, meta|
# metadata indices are 1-indexed, so just prepend a zero.
child.unshift(0)
child.size == 1 ? meta.sum : meta.sum { |x| child[x] || 0 }
}
__END__
7 11 6 3 5 5 3 6 1 7 0 10 1 7 4 5 1 3 1 5 9 1 1 3 2 1 3 1 2 1 6 0 9 2 5 9 4 1 1 2 7 2 3 1 3 3 1 3 1 9 0 9 1 7 9 9 1 7 9 5 8 2 1 3 3 3 2 1 2 2 5 2 1 3 2 1 3 6 1 6 0 7 1 2 6 4 4 3 4 1 2 2 1 2 3 1 9 0 11 9 2 3 2 6 7 1 4 5 3 4 1 1 3 1 3 3 2 3 1 1 8 0 7 1 3 6 8 8 3 8 1 3 1 1 2 2 3 3 3 1 5 2 2 1 3 6 1 8 0 10 7 3 1 4 9 5 4 4 8 6 2 1 1 1 1 3 3 3 1 9 0 10 7 9 1 2 2 1 3 9 2 3 2 1 3 2 2 1 1 2 1 1 9 0 8 1 6 1 8 5 1 1 1 1 1 3 1 3 3 3 1 1 2 4 4 4 2 1 3 5 1 6 0 6 1 8 5 2 1 9 3 3 1 1 1 3 1 7 0 10 2 6 9 7 8 1 1 3 2 1 3 1 2 2 1 2 3 1 8 0 6 1 9 6 1 9 5 1 2 1 1 3 3 1 2 4 2 2 2 5 3 7 1 9 0 8 5 9 3 1 4 3 1 5 1 2 1 1 3 1 2 1 2 1 5 0 8 5 1 3 6 3 1 3 9 3 1 3 3 2 1 7 0 11 7 8 5 4 9 6 2 8 7 1 9 3 1 2 2 1 3 1 5 5 5 5 5 1 4 1 3 5 5 2 5 3 3 7 1 7 0 11 3 1 4 9 2 7 7 9 5 5 9 2 3 1 2 3 3 3 1 9 0 10 9 5 1 6 9 4 1 6 1 1 3 3 2 3 3 1 3 3 3 1 6 0 8 7 4 4 1 1 1 8 3 3 1 1 1 2 2 5 4 4 3 2 3 3 3 7 1 7 0 9 1 9 3 5 5 4 3 3 1 1 3 1 3 1 2 2 1 6 0 6 1 8 1 4 1 5 3 1 2 1 1 1 1 5 0 8 2 4 3 4 4 4 3 1 1 1 1 3 3 5 5 3 5 2 5 2 3 6 1 8 0 7 7 9 1 1 8 1 2 3 2 2 1 2 1 1 1 1 7 0 7 7 6 3 5 1 8 8 1 3 3 1 2 3 3 1 6 0 10 9 4 6 1 9 4 2 1 1 4 1 1 3 1 2 2 4 4 1 3 2 2 3 4 1 8 0 10 9 2 2 9 5 5 6 3 3 1 1 3 2 2 3 1 1 3 1 6 0 10 1 5 1 6 2 1 8 8 3 8 1 1 1 1 2 1 1 9 0 7 8 4 2 5 1 1 7 1 2 2 2 1 1 3 3 1 1 1 4 2 3 6 1 7 0 9 9 2 9 2 9 5 7 1 6 2 1 1 2 3 3 1 1 9 0 10 1 5 8 3 4 4 1 2 3 1 2 2 3 1 3 2 2 1 1 1 8 0 9 1 8 1 6 1 7 3 1 2 2 1 1 2 1 1 2 2 4 4 3 5 1 3 4 2 7 4 3 3 4 1 5 0 8 9 1 5 9 2 1 3 7 1 3 2 1 1 1 6 0 11 2 9 1 4 9 1 1 1 6 7 7 1 1 1 3 1 1 1 8 0 9 9 9 7 9 9 8 6 6 1 1 3 1 2 1 2 1 1 3 5 2 3 3 4 1 6 0 11 6 2 8 1 7 5 7 2 6 4 1 2 2 1 1 2 3 1 7 0 6 7 2 5 1 5 6 2 1 3 3 2 1 3 1 6 0 6 1 8 3 6 9 5 3 2 1 2 2 1 3 1 4 2 3 5 1 5 0 7 8 1 3 6 1 9 3 2 3 2 1 2 1 6 0 8 8 2 1 7 4 2 5 9 1 3 3 1 1 2 1 5 0 9 1 8 2 8 1 4 8 9 3 1 2 1 3 3 5 4 2 4 3 3 5 1 9 0 10 1 5 7 1 1 3 6 1 5 6 1 3 1 1 2 1 2 1 2 1 7 0 10 1 4 3 1 9 1 7 9 1 1 1 1 3 1 3 1 3 1 9 0 8 8 4 8 3 1 8 3 5 2 1 3 1 1 1 1 1 3 5 5 4 2 3 4 6 4 5 4 3 7 1 9 0 10 7 1 1 6 3 7 8 1 6 6 3 1 1 1 3 1 1 2 2 1 6 0 9 2 2 5 2 1 4 9 9 1 1 3 2 1 1 1 1 7 0 7 6 4 8 5 7 1 1 3 3 1 1 2 1 1 5 2 3 1 2 5 1 3 4 1 9 0 8 2 9 3 1 4 8 8 9 3 2 3 1 1 1 1 3 2 1 5 0 7 8 2 4 2 1 1 3 3 1 2 3 1 1 7 0 11 7 8 7 5 5 4 6 7 3 1 1 3 1 2 1 3 1 3 3 1 4 3 3 5 1 8 0 9 1 1 2 9 8 1 6 9 5 2 2 3 1 3 2 1 1 1 9 0 6 8 7 2 7 1 3 2 1 1 1 2 1 3 1 3 1 9 0 6 5 5 1 8 6 4 1 1 1 2 1 1 1 1 1 2 4 1 4 5 3 4 1 8 0 6 5 4 1 3 1 4 3 2 2 1 3 2 3 1 1 9 0 9 2 1 4 1 3 6 4 8 8 2 3 1 1 1 2 3 2 1 1 9 0 8 2 8 5 1 9 8 2 5 1 2 1 1 3 3 3 1 3 3 5 1 2 3 6 1 8 0 11 7 2 9 2 8 4 9 1 3 1 2 1 2 1 2 3 1 1 1 1 5 0 11 6 8 1 4 7 4 1 1 8 5 7 2 1 1 1 2 1 9 0 8 1 6 1 5 1 8 5 5 3 1 2 3 2 3 1 1 1 1 4 3 5 1 1 6 5 1 1 5 3 3 5 1 8 0 8 1 2 5 4 2 7 9 6 1 1 2 1 2 2 3 2 1 8 0 9 4 5 8 1 7 7 1 1 6 3 3 2 3 2 2 1 3 1 5 0 8 6 7 5 3 1 4 5 2 1 1 2 1 2 5 5 1 5 3 3 5 1 9 0 7 6 9 8 1 1 7 6 3 1 2 1 1 2 2 2 3 1 7 0 6 2 1 2 5 4 8 2 3 3 1 1 3 1 1 5 0 9 1 8 4 7 9 4 2 7 8 1 3 2 1 2 2 2 4 3 3 3 5 1 7 0 11 3 2 9 5 7 1 4 7 7 1 9 1 3 3 1 2 1 1 1 7 0 10 2 1 9 8 9 1 6 4 1 3 2 3 3 1 1 3 1 1 9 0 10 8 9 5 9 2 1 5 1 9 6 1 3 2 1 1 2 1 1 2 1 3 4 1 1 3 7 1 9 0 7 2 8 1 6 1 6 6 2 3 1 1 3 3 2 1 2 1 9 0 10 1 6 5 4 1 9 4 7 4 9 1 3 1 3 1 2 1 1 3 1 8 0 9 4 7 1 2 2 7 2 6 3 1 3 2 3 2 2 1 2 4 2 3 1 1 5 1 3 6 1 6 0 9 3 1 4 6 3 5 3 6 5 2 1 1 2 1 1 1 5 0 6 5 1 2 3 3 3 1 2 1 3 1 1 7 0 7 3 7 1 7 4 3 7 1 3 1 3 3 1 1 5 4 2 4 2 4 4 4 4 4 4 3 4 1 7 0 10 1 3 7 5 1 1 7 8 6 8 3 3 1 2 1 1 3 1 6 0 8 9 1 5 4 4 3 4 7 1 1 2 1 1 3 1 7 0 10 7 1 1 1 1 3 2 3 8 7 1 2 3 1 1 3 3 3 4 1 2 3 7 1 8 0 8 3 4 2 6 1 1 6 9 3 1 2 2 3 1 2 1 1 6 0 10 4 8 9 6 9 2 2 9 1 4 1 2 1 2 2 2 1 8 0 10 6 4 4 9 4 1 5 8 4 2 2 2 1 2 2 1 1 1 1 4 2 1 3 5 5 3 7 1 8 0 10 5 2 6 8 1 2 7 6 2 1 2 2 2 1 3 1 2 3 1 6 0 9 4 1 6 1 1 8 1 4 6 1 1 2 1 2 1 1 7 0 7 1 9 4 1 7 5 1 1 3 2 2 3 1 3 2 2 1 1 3 4 3 3 4 1 7 0 6 7 1 6 3 8 7 2 1 1 2 1 2 2 1 5 0 8 8 4 9 9 7 5 2 1 1 3 1 1 1 1 6 0 9 7 1 6 8 1 2 7 1 6 1 3 3 2 3 2 2 2 2 2 2 2 2 1 7 5 5 7 2 5 3 3 7 1 5 0 7 2 3 7 9 7 9 1 1 1 1 2 3 1 5 0 9 5 5 7 9 2 3 2 9 1 1 1 2 2 2 1 6 0 6 1 2 7 1 1 6 1 1 1 1 1 3 3 5 5 1 3 1 3 3 6 1 8 0 9 1 1 6 8 8 7 7 5 8 1 1 1 3 2 1 1 2 1 5 0 6 1 6 3 9 7 1 3 2 1 3 1 1 9 0 11 3 2 2 2 1 7 5 6 6 1 7 1

22
day6.exs Normal file
View File

@ -0,0 +1,22 @@
defmodule Day6 do
@margin 2
def input() do
File.stream!("input/day6.in")
|> Enum.map(fn x ->
x
|> String.split(", ")
|> Enum.map(&String.to_integer(String.trim(&1)))
end)
end
def part1() do
{xmin, xmax} = Enum.map(input(), &hd/1) |> Enum.min_max()
{ymin, ymax} = Enum.map(input(), &tl/1) |> Enum.min_max()
input()
|> IO.inspect(label: "xmin: #{xmin}, xmax: #{xmax}, ymin: #{ymin}, ymax: #{ymax}")
end
end
Day6.part1()

55
day7.exs Normal file
View File

@ -0,0 +1,55 @@
defmodule Day7 do
def input() do
File.stream!("input/day7.in")
|> Enum.map(fn x ->
Regex.scan(~r/[A-Z]/, x)
|> Enum.drop(1)
|> Enum.map(&hd/1)
end)
end
def part1() do
input()
|> IO.inspect()
|> work(1, -30)
|> Enum.at(0)
end
def part2() do
input()
|> work(5, 61)
|> Enum.at(1)
end
def work(deps, paral, factor) do
remaining =
deps
|> flatten()
|> Enum.uniq()
doable = fn ->
remaining
|> Enum.find(fn x ->
!Enum.any?(fn _, y -> y == x)
end)
|> Enum.min()
end
goal = length(remaining)
done = ""
workers = List.duplicate(nil, paral)
Enum.reduce_while(deps, [], fn t, acc ->
end)
end
def flatten(list), do: flatten(list, []) |> Enum.reverse()
def flatten([h | t], acc) when h == [], do: flatten(t, acc)
def flatten([h | t], acc) when is_list(h), do: flatten(t, flatten(h, acc))
def flatten([h | t], acc), do: flatten(t, [h | acc])
def flatten([], acc), do: acc
end
IO.puts(Day7.part1())
IO.puts(Day7.part2())

16
day8.exs Normal file
View File

@ -0,0 +1,16 @@
defmodule Day8 do
def input() do
File.stream!("input/day8.in")
|> Stream.map(&String.trim/1)
|> Enum.at(0)
|> String.split()
|> Enum.map(&String.to_integer/1)
end
def part1() do
input()
|> IO.inspect()
end
end
Day8.part1()

18
day9.exs Normal file
View File

@ -0,0 +1,18 @@
defmodule Day9 do
def input() do
input =
File.stream!("input/day9.in")
|> Stream.map(&String.trim/1)
|> Enum.at(0)
Regex.scan(~r/\d+/, input)
|> Enum.map(&String.to_integer(hd(&1)))
end
def part1() do
input()
|> IO.inspect()
end
end
Day9.part1()

50
input/day6.in Normal file
View File

@ -0,0 +1,50 @@
267, 196
76, 184
231, 301
241, 76
84, 210
186, 243
251, 316
265, 129
142, 124
107, 134
265, 191
216, 226
67, 188
256, 211
317, 166
110, 41
347, 332
129, 91
217, 327
104, 57
332, 171
257, 287
230, 105
131, 209
110, 282
263, 146
113, 217
193, 149
280, 71
357, 160
356, 43
321, 123
272, 70
171, 49
288, 196
156, 139
268, 163
188, 141
156, 182
199, 242
330, 47
89, 292
351, 329
292, 353
290, 158
167, 116
268, 235
124, 139
116, 119
142, 259

101
input/day7.in Normal file
View File

@ -0,0 +1,101 @@
Step Q must be finished before step I can begin.
Step B must be finished before step M can begin.
Step R must be finished before step F can begin.
Step G must be finished before step S can begin.
Step M must be finished before step A can begin.
Step Z must be finished before step W can begin.
Step J must be finished before step C can begin.
Step K must be finished before step O can begin.
Step C must be finished before step I can begin.
Step Y must be finished before step L can begin.
Step N must be finished before step P can begin.
Step S must be finished before step X can begin.
Step E must be finished before step U can begin.
Step U must be finished before step V can begin.
Step D must be finished before step F can begin.
Step W must be finished before step H can begin.
Step T must be finished before step I can begin.
Step H must be finished before step V can begin.
Step L must be finished before step O can begin.
Step P must be finished before step A can begin.
Step A must be finished before step I can begin.
Step F must be finished before step O can begin.
Step V must be finished before step X can begin.
Step I must be finished before step O can begin.
Step X must be finished before step O can begin.
Step F must be finished before step V can begin.
Step L must be finished before step P can begin.
Step Y must be finished before step P can begin.
Step Y must be finished before step X can begin.
Step Y must be finished before step O can begin.
Step D must be finished before step A can begin.
Step T must be finished before step F can begin.
Step W must be finished before step X can begin.
Step R must be finished before step A can begin.
Step E must be finished before step F can begin.
Step H must be finished before step I can begin.
Step K must be finished before step Y can begin.
Step W must be finished before step P can begin.
Step V must be finished before step O can begin.
Step N must be finished before step E can begin.
Step L must be finished before step I can begin.
Step B must be finished before step G can begin.
Step D must be finished before step T can begin.
Step J must be finished before step L can begin.
Step M must be finished before step Y can begin.
Step T must be finished before step A can begin.
Step K must be finished before step D can begin.
Step H must be finished before step P can begin.
Step P must be finished before step I can begin.
Step T must be finished before step L can begin.
Step J must be finished before step N can begin.
Step U must be finished before step F can begin.
Step U must be finished before step I can begin.
Step A must be finished before step F can begin.
Step U must be finished before step P can begin.
Step R must be finished before step H can begin.
Step G must be finished before step V can begin.
Step P must be finished before step F can begin.
Step B must be finished before step D can begin.
Step U must be finished before step X can begin.
Step K must be finished before step A can begin.
Step G must be finished before step D can begin.
Step N must be finished before step U can begin.
Step U must be finished before step L can begin.
Step M must be finished before step J can begin.
Step I must be finished before step X can begin.
Step H must be finished before step L can begin.
Step M must be finished before step S can begin.
Step E must be finished before step O can begin.
Step Q must be finished before step F can begin.
Step A must be finished before step O can begin.
Step T must be finished before step P can begin.
Step F must be finished before step X can begin.
Step D must be finished before step P can begin.
Step A must be finished before step X can begin.
Step G must be finished before step Z can begin.
Step W must be finished before step F can begin.
Step Q must be finished before step X can begin.
Step C must be finished before step V can begin.
Step L must be finished before step V can begin.
Step E must be finished before step L can begin.
Step B must be finished before step X can begin.
Step M must be finished before step V can begin.
Step F must be finished before step I can begin.
Step P must be finished before step X can begin.
Step C must be finished before step A can begin.
Step Z must be finished before step H can begin.
Step Q must be finished before step S can begin.
Step G must be finished before step X can begin.
Step T must be finished before step O can begin.
Step P must be finished before step O can begin.
Step T must be finished before step V can begin.
Step N must be finished before step V can begin.
Step Z must be finished before step X can begin.
Step L must be finished before step X can begin.
Step Z must be finished before step Y can begin.
Step N must be finished before step T can begin.
Step S must be finished before step T can begin.
Step G must be finished before step K can begin.
Step T must be finished before step X can begin.
Step R must be finished before step X can begin.

1
input/day8.in Normal file
View File

@ -0,0 +1 @@
7 11 6 3 5 5 3 6 1 7 0 10 1 7 4 5 1 3 1 5 9 1 1 3 2 1 3 1 2 1 6 0 9 2 5 9 4 1 1 2 7 2 3 1 3 3 1 3 1 9 0 9 1 7 9 9 1 7 9 5 8 2 1 3 3 3 2 1 2 2 5 2 1 3 2 1 3 6 1 6 0 7 1 2 6 4 4 3 4 1 2 2 1 2 3 1 9 0 11 9 2 3 2 6 7 1 4 5 3 4 1 1 3 1 3 3 2 3 1 1 8 0 7 1 3 6 8 8 3 8 1 3 1 1 2 2 3 3 3 1 5 2 2 1 3 6 1 8 0 10 7 3 1 4 9 5 4 4 8 6 2 1 1 1 1 3 3 3 1 9 0 10 7 9 1 2 2 1 3 9 2 3 2 1 3 2 2 1 1 2 1 1 9 0 8 1 6 1 8 5 1 1 1 1 1 3 1 3 3 3 1 1 2 4 4 4 2 1 3 5 1 6 0 6 1 8 5 2 1 9 3 3 1 1 1 3 1 7 0 10 2 6 9 7 8 1 1 3 2 1 3 1 2 2 1 2 3 1 8 0 6 1 9 6 1 9 5 1 2 1 1 3 3 1 2 4 2 2 2 5 3 7 1 9 0 8 5 9 3 1 4 3 1 5 1 2 1 1 3 1 2 1 2 1 5 0 8 5 1 3 6 3 1 3 9 3 1 3 3 2 1 7 0 11 7 8 5 4 9 6 2 8 7 1 9 3 1 2 2 1 3 1 5 5 5 5 5 1 4 1 3 5 5 2 5 3 3 7 1 7 0 11 3 1 4 9 2 7 7 9 5 5 9 2 3 1 2 3 3 3 1 9 0 10 9 5 1 6 9 4 1 6 1 1 3 3 2 3 3 1 3 3 3 1 6 0 8 7 4 4 1 1 1 8 3 3 1 1 1 2 2 5 4 4 3 2 3 3 3 7 1 7 0 9 1 9 3 5 5 4 3 3 1 1 3 1 3 1 2 2 1 6 0 6 1 8 1 4 1 5 3 1 2 1 1 1 1 5 0 8 2 4 3 4 4 4 3 1 1 1 1 3 3 5 5 3 5 2 5 2 3 6 1 8 0 7 7 9 1 1 8 1 2 3 2 2 1 2 1 1 1 1 7 0 7 7 6 3 5 1 8 8 1 3 3 1 2 3 3 1 6 0 10 9 4 6 1 9 4 2 1 1 4 1 1 3 1 2 2 4 4 1 3 2 2 3 4 1 8 0 10 9 2 2 9 5 5 6 3 3 1 1 3 2 2 3 1 1 3 1 6 0 10 1 5 1 6 2 1 8 8 3 8 1 1 1 1 2 1 1 9 0 7 8 4 2 5 1 1 7 1 2 2 2 1 1 3 3 1 1 1 4 2 3 6 1 7 0 9 9 2 9 2 9 5 7 1 6 2 1 1 2 3 3 1 1 9 0 10 1 5 8 3 4 4 1 2 3 1 2 2 3 1 3 2 2 1 1 1 8 0 9 1 8 1 6 1 7 3 1 2 2 1 1 2 1 1 2 2 4 4 3 5 1 3 4 2 7 4 3 3 4 1 5 0 8 9 1 5 9 2 1 3 7 1 3 2 1 1 1 6 0 11 2 9 1 4 9 1 1 1 6 7 7 1 1 1 3 1 1 1 8 0 9 9 9 7 9 9 8 6 6 1 1 3 1 2 1 2 1 1 3 5 2 3 3 4 1 6 0 11 6 2 8 1 7 5 7 2 6 4 1 2 2 1 1 2 3 1 7 0 6 7 2 5 1 5 6 2 1 3 3 2 1 3 1 6 0 6 1 8 3 6 9 5 3 2 1 2 2 1 3 1 4 2 3 5 1 5 0 7 8 1 3 6 1 9 3 2 3 2 1 2 1 6 0 8 8 2 1 7 4 2 5 9 1 3 3 1 1 2 1 5 0 9 1 8 2 8 1 4 8 9 3 1 2 1 3 3 5 4 2 4 3 3 5 1 9 0 10 1 5 7 1 1 3 6 1 5 6 1 3 1 1 2 1 2 1 2 1 7 0 10 1 4 3 1 9 1 7 9 1 1 1 1 3 1 3 1 3 1 9 0 8 8 4 8 3 1 8 3 5 2 1 3 1 1 1 1 1 3 5 5 4 2 3 4 6 4 5 4 3 7 1 9 0 10 7 1 1 6 3 7 8 1 6 6 3 1 1 1 3 1 1 2 2 1 6 0 9 2 2 5 2 1 4 9 9 1 1 3 2 1 1 1 1 7 0 7 6 4 8 5 7 1 1 3 3 1 1 2 1 1 5 2 3 1 2 5 1 3 4 1 9 0 8 2 9 3 1 4 8 8 9 3 2 3 1 1 1 1 3 2 1 5 0 7 8 2 4 2 1 1 3 3 1 2 3 1 1 7 0 11 7 8 7 5 5 4 6 7 3 1 1 3 1 2 1 3 1 3 3 1 4 3 3 5 1 8 0 9 1 1 2 9 8 1 6 9 5 2 2 3 1 3 2 1 1 1 9 0 6 8 7 2 7 1 3 2 1 1 1 2 1 3 1 3 1 9 0 6 5 5 1 8 6 4 1 1 1 2 1 1 1 1 1 2 4 1 4 5 3 4 1 8 0 6 5 4 1 3 1 4 3 2 2 1 3 2 3 1 1 9 0 9 2 1 4 1 3 6 4 8 8 2 3 1 1 1 2 3 2 1 1 9 0 8 2 8 5 1 9 8 2 5 1 2 1 1 3 3 3 1 3 3 5 1 2 3 6 1 8 0 11 7 2 9 2 8 4 9 1 3 1 2 1 2 1 2 3 1 1 1 1 5 0 11 6 8 1 4 7 4 1 1 8 5 7 2 1 1 1 2 1 9 0 8 1 6 1 5 1 8 5 5 3 1 2 3 2 3 1 1 1 1 4 3 5 1 1 6 5 1 1 5 3 3 5 1 8 0 8 1 2 5 4 2 7 9 6 1 1 2 1 2 2 3 2 1 8 0 9 4 5 8 1 7 7 1 1 6 3 3 2 3 2 2 1 3 1 5 0 8 6 7 5 3 1 4 5 2 1 1 2 1 2 5 5 1 5 3 3 5 1 9 0 7 6 9 8 1 1 7 6 3 1 2 1 1 2 2 2 3 1 7 0 6 2 1 2 5 4 8 2 3 3 1 1 3 1 1 5 0 9 1 8 4 7 9 4 2 7 8 1 3 2 1 2 2 2 4 3 3 3 5 1 7 0 11 3 2 9 5 7 1 4 7 7 1 9 1 3 3 1 2 1 1 1 7 0 10 2 1 9 8 9 1 6 4 1 3 2 3 3 1 1 3 1 1 9 0 10 8 9 5 9 2 1 5 1 9 6 1 3 2 1 1 2 1 1 2 1 3 4 1 1 3 7 1 9 0 7 2 8 1 6 1 6 6 2 3 1 1 3 3 2 1 2 1 9 0 10 1 6 5 4 1 9 4 7 4 9 1 3 1 3 1 2 1 1 3 1 8 0 9 4 7 1 2 2 7 2 6 3 1 3 2 3 2 2 1 2 4 2 3 1 1 5 1 3 6 1 6 0 9 3 1 4 6 3 5 3 6 5 2 1 1 2 1 1 1 5 0 6 5 1 2 3 3 3 1 2 1 3 1 1 7 0 7 3 7 1 7 4 3 7 1 3 1 3 3 1 1 5 4 2 4 2 4 4 4 4 4 4 3 4 1 7 0 10 1 3 7 5 1 1 7 8 6 8 3 3 1 2 1 1 3 1 6 0 8 9 1 5 4 4 3 4 7 1 1 2 1 1 3 1 7 0 10 7 1 1 1 1 3 2 3 8 7 1 2 3 1 1 3 3 3 4 1 2 3 7 1 8 0 8 3 4 2 6 1 1 6 9 3 1 2 2 3 1 2 1 1 6 0 10 4 8 9 6 9 2 2 9 1 4 1 2 1 2 2 2 1 8 0 10 6 4 4 9 4 1 5 8 4 2 2 2 1 2 2 1 1 1 1 4 2 1 3 5 5 3 7 1 8 0 10 5 2 6 8 1 2 7 6 2 1 2 2 2 1 3 1 2 3 1 6 0 9 4 1 6 1 1 8 1 4 6 1 1 2 1 2 1 1 7 0 7 1 9 4 1 7 5 1 1 3 2 2 3 1 3 2 2 1 1 3 4 3 3 4 1 7 0 6 7 1 6 3 8 7 2 1 1 2 1 2 2 1 5 0 8 8 4 9 9 7 5 2 1 1 3 1 1 1 1 6 0 9 7 1 6 8 1 2 7 1 6 1 3 3 2 3 2 2 2 2 2 2 2 2 1 7 5 5 7 2 5 3 3 7 1 5 0 7 2 3 7 9 7 9 1 1 1 1 2 3 1 5 0 9 5 5 7 9 2 3 2 9 1 1 1 2 2 2 1 6 0 6 1 2 7 1 1 6 1 1 1 1 1 3 3 5 5 1 3 1 3 3 6 1 8 0 9 1 1 6 8 8 7 7 5 8 1 1 1 3 2 1 1 2 1 5 0 6 1 6 3 9 7 1 3 2 1 3 1 1 9 0 11 3 2 2 2 1 7 5 6 6 1 7 1

1
input/day9.in Normal file
View File

@ -0,0 +1 @@
459 players; last marble is worth 71320 points