|
|
@ -2,11 +2,26 @@ require_relative "computer"
|
|
|
|
|
|
|
|
|
|
|
|
program = ARGF.read
|
|
|
|
program = ARGF.read
|
|
|
|
|
|
|
|
|
|
|
|
puts (0..4).to_a.permutation.map {|phase_settings|
|
|
|
|
p (5..9).to_a.permutation.map {|phase_settings|
|
|
|
|
amplifiers = Array.new(5) { Computer.from(program) }
|
|
|
|
amplifiers = Array.new(5) { Computer.from(program) }
|
|
|
|
amplifiers.zip(phase_settings).inject(?0) {|i, (a, ps)|
|
|
|
|
|
|
|
|
output = StringIO.new
|
|
|
|
pipes = Array.new(5) { IO.pipe }
|
|
|
|
a.run(StringIO.new("#{ps}\n#{i}"), output)
|
|
|
|
|
|
|
|
output.string
|
|
|
|
# input phase settings
|
|
|
|
}.to_i
|
|
|
|
pipes.zip(phase_settings).each do |(_, w), ps|
|
|
|
|
|
|
|
|
w.puts(ps)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# first 0 signal
|
|
|
|
|
|
|
|
pipes.first.last.puts(?0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ios = pipes.cycle.each_cons(2).take(5).map {|(r, _), (_, w)| [r, w] }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ts = amplifiers.zip(ios).map {|(a, (i, o))|
|
|
|
|
|
|
|
|
Thread.new { a.run(i, o) }
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ts.each(&:join)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
thrusters_input = ios.first.first
|
|
|
|
|
|
|
|
thrusters_input.gets.to_i
|
|
|
|
}.max
|
|
|
|
}.max
|
|
|
|