diff options
| author | Abigail <abigail@abigail.freedom.nl> | 2022-01-16 22:57:51 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.freedom.nl> | 2022-01-17 01:06:10 +0100 |
| commit | 47b1be11f603186d1c9702fe509e9bed557967b3 (patch) | |
| tree | 505031c4745ebc8b72eabaf4cb0cb74ce9bdc5dd | |
| parent | 1009553cceb45eb905ca454598980d33ca35ee7b (diff) | |
| download | perlweeklychallenge-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.tcl | 43 | ||||
| -rw-r--r-- | challenge-147/abigail/tcl/ch-2.tcl | 22 |
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 + } + } +} |
