Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2955102

Browse files
author
Leo Silva Souza
committed
07/1 - Ruby
1 parent c323320 commit 2955102

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

2018/07_1/ruby/leovano.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
3+
input = File.readlines(ARGV[0])
4+
5+
RULE = /^Step ([a-zA-Z]+) .* step ([a-zA-Z]+) can begin.$/.freeze
6+
input.map! { |line| line.match(RULE).captures }
7+
8+
dependents = input.group_by(&:first).transform_values { |it| it.map(&:last) }
9+
dependencies = input.group_by(&:last).transform_values { |it| it.map(&:first) }
10+
11+
dependents.default_proc = proc { |h, k| h[k] = [] }
12+
dependencies.default_proc = proc { |h, k| h[k] = [] }
13+
14+
steps_done = []
15+
steps_current = dependents.keys.select { |k| dependencies[k].empty? }
16+
17+
while steps_done.size < dependencies.size
18+
steps_current.sort!
19+
20+
next_task = steps_current.find do |task|
21+
(dependencies[task] - steps_done).empty?
22+
end
23+
24+
steps_done << steps_current.delete(next_task)
25+
steps_current += dependents[next_task]
26+
end
27+
28+
puts steps_done.join

0 commit comments

Comments
 (0)