Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Ben Harris | bbcf4cadd2 | |
Ben Harris | fb185bc74f |
|
@ -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
|
|
@ -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.
|
|
@ -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
|
|
@ -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()
|
|
@ -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())
|
|
@ -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()
|
|
@ -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()
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
459 players; last marble is worth 71320 points
|
Loading…
Reference in New Issue