init
This commit is contained in:
commit
77064a9563
79 changed files with 10533 additions and 0 deletions
101
2018/7/input
Normal file
101
2018/7/input
Normal file
|
@ -0,0 +1,101 @@
|
|||
Step Z must be finished before step B can begin.
|
||||
Step X must be finished before step D can begin.
|
||||
Step D must be finished before step P can begin.
|
||||
Step O must be finished before step C can begin.
|
||||
Step C must be finished before step Y can begin.
|
||||
Step K must be finished before step J can begin.
|
||||
Step H must be finished before step T can begin.
|
||||
Step B must be finished before step Q can begin.
|
||||
Step V must be finished before step M can begin.
|
||||
Step E must be finished before step W can begin.
|
||||
Step S must be finished before step J can begin.
|
||||
Step I must be finished before step N can begin.
|
||||
Step T must be finished before step L can begin.
|
||||
Step N must be finished before step M can begin.
|
||||
Step P must be finished before step G can begin.
|
||||
Step F must be finished before step Q can begin.
|
||||
Step J must be finished before step G can begin.
|
||||
Step L must be finished before step G can begin.
|
||||
Step Y must be finished before step R can begin.
|
||||
Step U must be finished before step A can begin.
|
||||
Step W must be finished before step G can begin.
|
||||
Step R must be finished before step G can begin.
|
||||
Step G must be finished before step M can begin.
|
||||
Step A must be finished before step Q can begin.
|
||||
Step M must be finished before step Q can begin.
|
||||
Step N must be finished before step F can begin.
|
||||
Step Y must be finished before step W can begin.
|
||||
Step J must be finished before step W can begin.
|
||||
Step U must be finished before step G can begin.
|
||||
Step X must be finished before step L can begin.
|
||||
Step P must be finished before step J can begin.
|
||||
Step L must be finished before step Y can begin.
|
||||
Step G must be finished before step Q can begin.
|
||||
Step K must be finished before step G can begin.
|
||||
Step V must be finished before step J can begin.
|
||||
Step F must be finished before step U can begin.
|
||||
Step V must be finished before step N can begin.
|
||||
Step I must be finished before step T can begin.
|
||||
Step U must be finished before step W can begin.
|
||||
Step S must be finished before step A can begin.
|
||||
Step C must be finished before step G can begin.
|
||||
Step L must be finished before step A can begin.
|
||||
Step E must be finished before step L can begin.
|
||||
Step D must be finished before step H can begin.
|
||||
Step Z must be finished before step E can begin.
|
||||
Step J must be finished before step U can begin.
|
||||
Step R must be finished before step A can begin.
|
||||
Step C must be finished before step J can begin.
|
||||
Step T must be finished before step R can begin.
|
||||
Step Z must be finished before step D can begin.
|
||||
Step Y must be finished before step G can begin.
|
||||
Step Y must be finished before step M can begin.
|
||||
Step X must be finished before step H can begin.
|
||||
Step S must be finished before step Q can begin.
|
||||
Step R must be finished before step Q can begin.
|
||||
Step D must be finished before step Q can begin.
|
||||
Step G must be finished before step A can begin.
|
||||
Step N must be finished before step A can begin.
|
||||
Step F must be finished before step L can begin.
|
||||
Step O must be finished before step N can begin.
|
||||
Step T must be finished before step J can begin.
|
||||
Step S must be finished before step T can begin.
|
||||
Step O must be finished before step M can begin.
|
||||
Step P must be finished before step Y can begin.
|
||||
Step I must be finished before step U can begin.
|
||||
Step V must be finished before step S can begin.
|
||||
Step F must be finished before step G can begin.
|
||||
Step P must be finished before step M can begin.
|
||||
Step C must be finished before step S can begin.
|
||||
Step A must be finished before step M can begin.
|
||||
Step C must be finished before step Q can begin.
|
||||
Step Y must be finished before step Q can begin.
|
||||
Step O must be finished before step P can begin.
|
||||
Step S must be finished before step R can begin.
|
||||
Step S must be finished before step Y can begin.
|
||||
Step I must be finished before step Q can begin.
|
||||
Step O must be finished before step T can begin.
|
||||
Step F must be finished before step W can begin.
|
||||
Step U must be finished before step R can begin.
|
||||
Step O must be finished before step U can begin.
|
||||
Step D must be finished before step L can begin.
|
||||
Step H must be finished before step I can begin.
|
||||
Step P must be finished before step R can begin.
|
||||
Step J must be finished before step L can begin.
|
||||
Step P must be finished before step W can begin.
|
||||
Step W must be finished before step Q can begin.
|
||||
Step X must be finished before step Q can begin.
|
||||
Step Z must be finished before step U can begin.
|
||||
Step T must be finished before step U can begin.
|
||||
Step D must be finished before step S can begin.
|
||||
Step U must be finished before step Q can begin.
|
||||
Step N must be finished before step G can begin.
|
||||
Step E must be finished before step Q can begin.
|
||||
Step X must be finished before step K can begin.
|
||||
Step J must be finished before step R can begin.
|
||||
Step X must be finished before step R can begin.
|
||||
Step T must be finished before step W can begin.
|
||||
Step K must be finished before step S can begin.
|
||||
Step S must be finished before step G can begin.
|
||||
Step P must be finished before step F can begin.
|
||||
Step X must be finished before step C can begin.
|
101
2018/7/main.rb
Normal file
101
2018/7/main.rb
Normal file
|
@ -0,0 +1,101 @@
|
|||
require 'pry'
|
||||
|
||||
orders = []
|
||||
instructions = []
|
||||
|
||||
# Parse input file.
|
||||
|
||||
File.open("input", "r") do |f|
|
||||
f.each_line do |line|
|
||||
first, second = line.scan(/\s[A-Z]{1}\s/).map(&:strip)
|
||||
orders.push({
|
||||
first: first,
|
||||
then: second
|
||||
})
|
||||
instructions.push(first)
|
||||
instructions.push(second)
|
||||
end
|
||||
end
|
||||
|
||||
instructions.uniq!
|
||||
|
||||
result = ""
|
||||
|
||||
workers = 5.times.map do
|
||||
{
|
||||
current_instruction: nil,
|
||||
time_left: 0
|
||||
}
|
||||
end
|
||||
|
||||
time = 0
|
||||
|
||||
while !instructions.empty?
|
||||
# Get a list of the next instructions available.
|
||||
next_instructions = instructions.select do |instruction|
|
||||
orders.none? do |order|
|
||||
order[:then] == instruction && order[:first] != nil
|
||||
end and workers.none? do |worker|
|
||||
worker[:current_instruction] == instruction
|
||||
end
|
||||
end.sort
|
||||
|
||||
# Give free workers instructions.
|
||||
workers.each_with_index do |worker, i|
|
||||
if worker[:current_instruction].nil? and !next_instructions.empty?
|
||||
workers[i][:current_instruction] = next_instructions[0]
|
||||
workers[i][:time_left] = next_instructions[0].ord - "A".ord + 1 + 60
|
||||
next_instructions.delete(next_instructions[0])
|
||||
end
|
||||
end
|
||||
|
||||
elapsed_time = workers.select do |worker|
|
||||
!worker[:current_instruction].nil?
|
||||
end.map do |worker|
|
||||
worker[:time_left]
|
||||
end.min
|
||||
|
||||
time += elapsed_time
|
||||
|
||||
workers.each_with_index do |worker, i|
|
||||
if !workers[i][:current_instruction].nil?
|
||||
workers[i][:time_left] -= elapsed_time
|
||||
|
||||
if workers[i][:time_left] == 0
|
||||
instructions.delete(workers[i][:current_instruction])
|
||||
orders.each do |order|
|
||||
if order[:first] == workers[i][:current_instruction]
|
||||
order[:first] = nil
|
||||
end
|
||||
end
|
||||
|
||||
workers[i][:current_instruction] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#binding.pry
|
||||
end
|
||||
|
||||
=begin
|
||||
|
||||
while !instructions.empty?
|
||||
next_instruction = instructions.select do |instruction|
|
||||
orders.none? do |order|
|
||||
order[:then] == instruction && order[:first] != nil
|
||||
end
|
||||
end.sort.first
|
||||
|
||||
result += next_instruction
|
||||
|
||||
instructions.delete next_instruction
|
||||
orders.each do |order|
|
||||
if order[:first] == next_instruction
|
||||
order[:first] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
=end
|
||||
|
||||
puts time
|
7
2018/7/sample
Normal file
7
2018/7/sample
Normal file
|
@ -0,0 +1,7 @@
|
|||
Step C must be finished before step A can begin.
|
||||
Step C must be finished before step F can begin.
|
||||
Step A must be finished before step B can begin.
|
||||
Step A must be finished before step D can begin.
|
||||
Step B must be finished before step E can begin.
|
||||
Step D must be finished before step E can begin.
|
||||
Step F must be finished before step E can begin.
|
Loading…
Add table
Add a link
Reference in a new issue