aboutsummaryrefslogtreecommitdiff
path: root/challenge-106
diff options
context:
space:
mode:
authorPhilip Hood <hood@panix.com>2021-04-05 18:47:04 -0400
committerPhilip Hood <hood@panix.com>2021-04-05 18:47:04 -0400
commit707e1f4e6867a2de5a39b5c3e65fb6b367f977c2 (patch)
tree049cdf265a4837b32664b0e5526fb777824ecd2c /challenge-106
parentd44b2193b81c369285cf9ee9f9e5efa5104859e2 (diff)
downloadperlweeklychallenge-club-707e1f4e6867a2de5a39b5c3e65fb6b367f977c2.tar.gz
perlweeklychallenge-club-707e1f4e6867a2de5a39b5c3e65fb6b367f977c2.tar.bz2
perlweeklychallenge-club-707e1f4e6867a2de5a39b5c3e65fb6b367f977c2.zip
for 106, a little late.
Diffstat (limited to 'challenge-106')
-rwxr-xr-xchallenge-106/pkmnx/raku/ch-1.raku22
-rwxr-xr-xchallenge-106/pkmnx/raku/ch-2.raku70
2 files changed, 92 insertions, 0 deletions
diff --git a/challenge-106/pkmnx/raku/ch-1.raku b/challenge-106/pkmnx/raku/ch-1.raku
new file mode 100755
index 0000000000..b049f4c5b3
--- /dev/null
+++ b/challenge-106/pkmnx/raku/ch-1.raku
@@ -0,0 +1,22 @@
+#!/usr/bin/env raku
+
+## see usage:
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ time ./ch-1.raku 2 9 3 5
+## 4
+##
+## real 0m0.190s
+## ...
+
+sub MAIN( *@N where all(@N) ~~ Int ) {
+
+ die "No input." if @N.elems < 1;
+ 0.say && exit if @N.elems == 1;
+
+ @N = @N.sort;
+
+ ( 0..^@N.elems -1 ).map( -> $i {
+ my ($a,$b) = ( @N[$i], @N[$i +1] );
+ $b - $a;
+ }).max.say;
+
+}
diff --git a/challenge-106/pkmnx/raku/ch-2.raku b/challenge-106/pkmnx/raku/ch-2.raku
new file mode 100755
index 0000000000..baa21b6d10
--- /dev/null
+++ b/challenge-106/pkmnx/raku/ch-2.raku
@@ -0,0 +1,70 @@
+#!/usr/bin/env raku
+
+## see usage:
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ ./ch-2.raku 6 55
+## 0.1(09)
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ ./ch-2.raku 1 3
+## 0.(3)
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ ./ch-2.raku 1 2
+## 0.5
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ ./ch-2.raku 5 66
+## 0.0(75)
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ ./ch-2.raku 5 1
+## 5
+## pk@pkx:~/stuff/.../challenge-106/pkmnx/raku$ ./ch-2.raku 5 0
+## D must be >= 1.
+## in sub MAIN at ./ch-2.raku line 20
+
+sub MAIN( Int $N, Int $D ) {
+
+ die("D must be >= 1.") if $D < 1;
+
+ divi( $N, $D, {}, [] ).say;
+
+}
+
+sub divi( $N, $D, $sn, $ot ) {
+
+ my ( $cnt, $a, $b ) = ( 0, $N, $D );
+
+ while ( $a >= $b ) {
+ $a -= $b;
+ $cnt++;
+ }
+
+ my $na = $a * 10;
+ my $ky = ($a,$b).join(":");
+ $ot.push([ $ky, $cnt, $na, $b ]);
+
+ if ( $sn{$ky}:exists ) {
+ fin( True, $ky, $ot );
+ } else {
+ if ( $na > 0 ) {
+ $sn{$ky}++;
+ divi( $na, $b, $sn, $ot );
+ } else {
+ fin( False, $ky, $ot );
+ }
+ }
+
+}
+
+sub fin( $b, $ky, $ot ) {
+
+ my ( $nb, $v, $cnt, $ncnt ) = ( $b, [], 0, 0 );
+
+ $ot.map(-> $i {
+ $v.push( $i[1] );
+ if ( $nb && ($i[0] ~~ $ky) ) {
+ $v.push("(");
+ $nb = False;
+ $cnt++;
+ }
+ $ncnt++;
+ });
+
+ $v.push(")") if $cnt > 0;
+ $v[0] = ($v[0],".").join("") if $v.elems > 1;
+ $v.join("");
+
+}