aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-12-23 17:52:49 +0800
committerMistivia <i@mistivia.com>2024-12-23 17:52:49 +0800
commit1cc355995dcf98bb3b07bf71a638b3e19e63d33c (patch)
tree474a0d463f1aa45834e46fb0f8461fd1c434272c
parent255a2911a2206376a85242443a6a7a107d6dbe42 (diff)
day 11 part 1
-rw-r--r--11/1.tcl40
-rw-r--r--11/input1
2 files changed, 41 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]
diff --git a/11/input b/11/input
new file mode 100644
index 0000000..87f9c0f
--- /dev/null
+++ b/11/input
@@ -0,0 +1 @@
+5178527 8525 22 376299 3 69312 0 275