diff options
| author | Abigail <abigail@abigail.be> | 2021-10-26 01:38:18 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-10-26 01:38:18 +0200 |
| commit | fb5bf8970ed9e1caf0ddcc71e6dd3ffd9162d1af (patch) | |
| tree | fcee9a785be0a8389e3725726771eb6c7bd288d1 | |
| parent | 06a9225e5fc1b019c41bea9504c016310b15d824 (diff) | |
| download | perlweeklychallenge-club-fb5bf8970ed9e1caf0ddcc71e6dd3ffd9162d1af.tar.gz perlweeklychallenge-club-fb5bf8970ed9e1caf0ddcc71e6dd3ffd9162d1af.tar.bz2 perlweeklychallenge-club-fb5bf8970ed9e1caf0ddcc71e6dd3ffd9162d1af.zip | |
Tcl solutions for week 136
| -rw-r--r-- | challenge-136/abigail/tcl/ch-1.tcl | 47 | ||||
| -rw-r--r-- | challenge-136/abigail/tcl/ch-2.tcl | 28 |
2 files changed, 75 insertions, 0 deletions
diff --git a/challenge-136/abigail/tcl/ch-1.tcl b/challenge-136/abigail/tcl/ch-1.tcl new file mode 100644 index 0000000000..53a25f8956 --- /dev/null +++ b/challenge-136/abigail/tcl/ch-1.tcl @@ -0,0 +1,47 @@ +# +# See ../README.md +# + +# +# Run as: tclsh ch-1.tcl < input-file +# + +# +# Find the GCD, using Stein's algorithm +# (https://en.wikipedia.org/wiki/Binary_GCD_algorithm) +# +proc gcd {u v} { + set u_odd [expr $u % 2] + set v_odd [expr $v % 2] + if {$u == $v || $v == 0} {return $u} + if { $u == 0} {return $v} + if {$u_odd == 0 && $v_odd == 0} { + return [expr [gcd [expr $u >> 1] [expr $v >> 1]] << 1] + } + if {$u_odd == 0 && $v_odd > 0} { + return [gcd [expr $u >> 1] $v] + } + if {$u_odd > 0 && $v_odd == 0} { + return [gcd $u [expr $v >> 1]] + } + if {$u > $v} { + return [gcd [expr $u - $v] $v] + } + return [gcd [expr $v - $u] $u] +} + + +while {[gets stdin line] >= 0} { + lassign [split $line " "] m n + set ggcd [gcd $m $n] + set valid 0 + if {$ggcd > 1} { + while {$ggcd % 2 == 0} { + set ggcd [expr $ggcd / 2] + } + if {$ggcd == 1} { + set valid 1 + } + } + puts $valid +} diff --git a/challenge-136/abigail/tcl/ch-2.tcl b/challenge-136/abigail/tcl/ch-2.tcl new file mode 100644 index 0000000000..6062392bce --- /dev/null +++ b/challenge-136/abigail/tcl/ch-2.tcl @@ -0,0 +1,28 @@ +# +# See ../README.md +# + +# +# Run as: tclsh ch-2.tcl < input-file +# + +proc _count {target this_fib prev_fib} { + if {$target < $this_fib} { + return 0 + } + if {$target == $this_fib} { + return 1 + } + return [expr [_count [expr $target - $this_fib] \ + [expr $this_fib + $prev_fib] $this_fib] + \ + [_count $target \ + [expr $this_fib + $prev_fib] $this_fib]] +} + +proc count {target} { + return [_count $target 1 1] +} + +while {[gets stdin line] >= 0} { + puts [count $line] +} |
