day 13 part 1

main
magical 2023-12-13 05:44:49 +00:00
parent c55423d6f3
commit 918d64f258
3 changed files with 1452 additions and 0 deletions

1379
day13/input 100644

File diff suppressed because it is too large Load Diff

15
day13/sample1.in 100644
View File

@ -0,0 +1,15 @@
#.##..##.
..#.##.#.
##......#
##......#
..#.##.#.
..##..##.
#.#.##.#.
#...##..#
#....#..#
..##..###
#####.##.
#####.##.
..##..###
#....#..#

58
day13/sol.tcl 100755
View File

@ -0,0 +1,58 @@
#!/usr/bin/env tclsh
source ../prelude.tcl
set input stdin
set patterns [read $input]
set patterns [string trim $patterns]
#puts "$patterns"
set patterns [string map {"\n\n" "|"} $patterns]
#puts "$patterns"
set patterns [split $patterns "|"]
#puts "$patterns"
set patterns [lmap p $patterns {split $p "\n"}]
puts "$patterns"
#puts "$patterns"
proc reflect pattern {
set total 0
foreach pat [list $pattern [transpose $pattern]] factor {100 1} {
#puts "reflect $pat"
for {set i 1} {$i < [llength $pat]} {incr i} {
set ok 1
for {set j 0} {$i + $j < [llength $pat] && $i-$j-1 >= 0} {incr j} {
if {[lindex $pat $i+$j] ne [lindex $pat [expr {$i-$j-1}]]} {
set ok 0
break
}
}
if {$ok} {
#puts "$i $factor"
incr total [expr {$i * $factor}]
}
}
}
return $total
}
proc column {lst i} {
set c {}
foreach row $lst {
lappend c [string index $row $i]
}
return [join $c ""]
}
proc transpose pat {
set C [string length [lindex $pat 0]]
set out {}
for {set i 0} {$i < $C} {incr i} {
lappend out [column $pat $i]
}
return $out
}
foreach pat $patterns {
puts "[reflect $pat] <| $pat"
}
puts [ladd [lmap pat $patterns {reflect $pat}]]