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

Skip to content

Commit d86c3b4

Browse files
author
calypso
authored
07/1 - Ruby
07/1 - Ruby
2 parents 092a1ed + 276b0aa commit d86c3b4

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

2018/07_1/ruby/leovano.rb

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

0 commit comments

Comments
 (0)