-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathlist_problems_and_solutions.rb
84 lines (65 loc) · 1.33 KB
/
list_problems_and_solutions.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class Weeks
def self.list_weeks
Dir.glob('week*/').sort.map do |week_name|
WeekFolder.new week_name.chop # Trailing /
end
end
end
class WeekFolder
attr_reader :name, :problems
def initialize(name)
@name = name
@problems = []
gather_problems
end
def to_s
@name
end
def inspect
to_s
end
private
def gather_problems
@problems = Dir.glob("#{@name}/[0-9]*").sort.map do |problem|
Problem.new problem
end
end
end
class Problem
attr_reader :name, :path
def initialize(path)
@name = File.basename(path)
@path = path
@solutions = []
solutions = Dir.glob("#{@path}/*solution*")
@solutions = solutions unless solutions == []
end
def solutions
return "None" unless solution?
@solutions
end
def solution?
@solutions.length > 0
end
def to_s
@name
end
end
TABLE_HEADER = %(
| Week | Problem | Solution |
| ---- |:-------:| --------:|
)
table = TABLE_HEADER
Weeks.list_weeks.each do |week|
week.problems.each do |problem|
solutions = problem.solutions
if solutions.respond_to?(:each)
solutions = solutions.map do |solution|
"[#{File.basename(solution)}](#{solution})"
end.join(', ')
end
row = "| #{week} | [#{problem}](#{problem.path}) | #{solutions} |\n"
table += row
end
end
puts table