-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path19a.rb
52 lines (42 loc) · 900 Bytes
/
19a.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
def parse_input
parsing = :patterns
patterns = []
designs = []
File.readlines('inputs/19', chomp: true).each do |line|
if line == ''
parsing = :designs
next
end
case parsing
when :patterns
patterns.concat(line.split(', '))
when :designs
designs << line
end
end
[patterns, designs]
end
def solve
patterns, designs = parse_input
viable = Set.new
designs.each do |design|
stack = [0]
visited = Set.new
found = false
until stack.empty? || found
position = stack.pop
next if visited.include?(position)
visited << position
if position == design.size
viable << design
found = true
break
end
patterns.each do |pattern|
stack << position + pattern.size if design[position..-1].start_with?(pattern)
end
end
end
viable.size
end
p solve