Day ten
This commit is contained in:
parent
cfe6ac49d0
commit
c91c680cb4
2 changed files with 112 additions and 0 deletions
40
10.input
Normal file
40
10.input
Normal file
|
@ -0,0 +1,40 @@
|
|||
1237651012319765432345545498010145891010
|
||||
0348943105408894001056654584321036712329
|
||||
9432342236717433145677723675490121903478
|
||||
8541051549826522238988812106789030876569
|
||||
7650760678434011032349900125699845686788
|
||||
6789898730569545601456987234016768798697
|
||||
4372123621078438780767076543223609894556
|
||||
5201014532321029892898123456104510983045
|
||||
6102306545452310121234010767040125672130
|
||||
7985430696101402100765109898234534343421
|
||||
8976521787210569011843210982129653254321
|
||||
8907823474389678123954301011018762169870
|
||||
7010910567478012335869832109800121078765
|
||||
6327823498565723546778789236789630989034
|
||||
5436910989367874695219654345676547876123
|
||||
6785403873456965784301105654565670945210
|
||||
5690342762106543287012234787654981234678
|
||||
4301201659014690196543989898943272221589
|
||||
5210112348323787017432170101032102100450
|
||||
1290010167654896528903061232589043678321
|
||||
0381201233210743434012354345672154509100
|
||||
5470300344984652143023403456983893210234
|
||||
6565415455675430032110512987870765210985
|
||||
7432326966556721243329601070121894387876
|
||||
8901457877876898358478732112434721296901
|
||||
9450962340945876569569540003965780105432
|
||||
2365871651232903478757651654875698987321
|
||||
1671010787891212349808932787034567076670
|
||||
0982107896500301256710149890123498125583
|
||||
1210212783410450901223456781210321034492
|
||||
0398347894323467814345069890323498503301
|
||||
3457656321301556030196178765432567412212
|
||||
6569845490219698123287234076781064565801
|
||||
7078780185428787654876543189899873278921
|
||||
8129698276538988140989812278734765103210
|
||||
9234567345445679031256701345625654014765
|
||||
0103216548765678120349810566010103425894
|
||||
0987607239854581234569809870987912436723
|
||||
1234568120123290107678712561296876543010
|
||||
2109879011234103238932103450345689832123
|
72
10.rb
Executable file
72
10.rb
Executable file
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require "debug"
|
||||
|
||||
problem = 10
|
||||
@input = File.readlines("#{problem}.input")
|
||||
#@input = DATA.read.split("\n")
|
||||
.map { _1.strip.chars.map { |c| c == "." ? "." : c.to_i }}
|
||||
@debug = @input.size < 20
|
||||
#@debug = true
|
||||
|
||||
def bounded?(point)
|
||||
point.first >= 0 &&
|
||||
point.last >= 0 &&
|
||||
point.first < @input.size &&
|
||||
point.last < @input.first.size
|
||||
end
|
||||
|
||||
def traverse(start, height = 1)
|
||||
result = [
|
||||
[start.first - 1, start.last],
|
||||
[start.first + 1, start.last],
|
||||
[start.first, start.last - 1],
|
||||
[start.first, start.last + 1]
|
||||
].map do |point|
|
||||
if !bounded?(point) || @input.dig(*point) == "."
|
||||
[]
|
||||
elsif @input.dig(*point) == 9 && height == 9
|
||||
if @debug
|
||||
@paths[point.first][point.last] = @input.dig(*point)
|
||||
end
|
||||
[point]
|
||||
elsif @input.dig(*point) == height
|
||||
traverse(point, height + 1).flatten(1)
|
||||
else # if @input.dig(*point) != height
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
if result.size > 0 && @debug
|
||||
@paths[start.first][start.last] = @input.dig(*start)
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
if @debug
|
||||
@paths = Array.new(@input.size) { Array.new(@input.first.size) { "." } }
|
||||
end
|
||||
|
||||
result = (0...@input.size).flat_map do |x|
|
||||
(0...@input.first.size).map do |y|
|
||||
[[x, y], traverse([x, y]).flatten(1)] if @input[x][y] == 0
|
||||
end.compact
|
||||
end.to_h
|
||||
|
||||
if @debug
|
||||
puts @paths.map(&:join).join("\n")
|
||||
end
|
||||
|
||||
p result.values.map { _1.uniq.size }.sum
|
||||
p result.values.map { _1.size }.sum
|
||||
|
||||
__END__
|
||||
89010123
|
||||
78121874
|
||||
87430965
|
||||
96549874
|
||||
45678903
|
||||
32019012
|
||||
01329801
|
||||
10456732
|
Loading…
Reference in a new issue