aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2022-01-16 22:57:51 +0100
committerAbigail <abigail@abigail.freedom.nl>2022-01-17 01:06:10 +0100
commit47b1be11f603186d1c9702fe509e9bed557967b3 (patch)
tree505031c4745ebc8b72eabaf4cb0cb74ce9bdc5dd
parent1009553cceb45eb905ca454598980d33ca35ee7b (diff)
downloadperlweeklychallenge-club-47b1be11f603186d1c9702fe509e9bed557967b3.tar.gz
perlweeklychallenge-club-47b1be11f603186d1c9702fe509e9bed557967b3.tar.bz2
perlweeklychallenge-club-47b1be11f603186d1c9702fe509e9bed557967b3.zip
Week 147: Better Tcl solutions
-rw-r--r--challenge-147/abigail/tcl/ch-1.tcl43
-rw-r--r--challenge-147/abigail/tcl/ch-2.tcl22
2 files changed, 63 insertions, 2 deletions
diff --git a/challenge-147/abigail/tcl/ch-1.tcl b/challenge-147/abigail/tcl/ch-1.tcl
index d61e54d57b..22ff96b19c 100644
--- a/challenge-147/abigail/tcl/ch-1.tcl
+++ b/challenge-147/abigail/tcl/ch-1.tcl
@@ -8,4 +8,45 @@
# Run as: tclsh ch-1.tcl
#
-puts "2 3 5 7 13 17 23 37 43 47 53 67 73 83 97 113 137 167 173 197" \ No newline at end of file
+proc is_prime n {
+ if {$n == 2} {return 1}
+ if {$n % 2 == 0} {return 0}
+ for {set i 3} {$i * $i <= $n} {incr i 2} {
+ if {$n % $i == 0} {return 0}
+ }
+ return 1
+}
+
+set todo {2 3 5 7}
+set count [expr 20 - [llength $todo]]
+
+puts -nonewline $todo
+puts -nonewline " "
+
+while {[llength $todo] > 0} {
+ set new_todo {}
+ foreach d [split 123456789 ""] {
+ foreach p $todo {
+ set candidate $d$p
+ if {[is_prime $candidate]} {
+ puts -nonewline $candidate
+ puts -nonewline " "
+ incr count -1
+ lappend new_todo $candidate
+ if {$count <= 0} {
+ break
+ }
+ }
+ if {$count <= 0} {
+ break
+ }
+ }
+ if {$count <= 0} {
+ break
+ }
+ }
+ set todo $new_todo
+}
+
+puts ""
+
diff --git a/challenge-147/abigail/tcl/ch-2.tcl b/challenge-147/abigail/tcl/ch-2.tcl
index 6565977dd1..bc7e975f75 100644
--- a/challenge-147/abigail/tcl/ch-2.tcl
+++ b/challenge-147/abigail/tcl/ch-2.tcl
@@ -8,4 +8,24 @@
# Run as: tclsh ch-2.tcl
#
-puts "1560090 7042750"
+set pentagon [dict create]
+set p 0
+set n 0
+set done 0
+
+while {!$done} {
+ set p [expr $p + $n + $n + $n + 1]
+ incr n
+ dict set pentagon $p 1
+
+ foreach seen [dict keys $pentagon] {
+ if {$seen + $seen <= $p
+ && [dict exists $pentagon [expr $p - $seen]]
+ && [dict exists $pentagon [expr $p - $seen - $seen]]} {
+ puts -nonewline "${seen} "
+ puts [expr $p - $seen]
+ set done 1
+ break
+ }
+ }
+}