diff options
Diffstat (limited to '11/1.tcl')
| -rw-r--r-- | 11/1.tcl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/11/1.tcl b/11/1.tcl new file mode 100644 index 0000000..754c545 --- /dev/null +++ b/11/1.tcl @@ -0,0 +1,40 @@ +set fp [open "input"] +gets $fp line +close $fp + +proc is_even {x} { + return [expr {$x % 2 == 0}] +} + +proc zero_trim {x} { + for {set i 0} {$i < [expr {[string length $x] - 1}]} {incr i} { + if {[string index $x $i] != 0} { + break + } + } + return [string range $x $i end] +} + +proc blink {x} { + if {$x == 0} { + return 1 + } + if {[is_even [string length $x]]} { + set len [string length $x] + set halflen [expr {$len / 2}] + return [list [zero_trim [string range $x 0 [expr {$halflen - 1}]]] \ + [zero_trim [string range $x $halflen end]]] + } + return [expr {$x * 2024}] +} + +set lst $line +for {set i 0} {$i < 25} {incr i} { + set new_lst {} + foreach x $lst { + lappend new_lst {*}[blink $x] + } + set lst $new_lst +} + +puts [llength $lst] |
