diff options
| author | Philip Hood <hood@panix.com> | 2021-04-05 18:47:04 -0400 |
|---|---|---|
| committer | Philip Hood <hood@panix.com> | 2021-04-05 18:47:04 -0400 |
| commit | 707e1f4e6867a2de5a39b5c3e65fb6b367f977c2 (patch) | |
| tree | 049cdf265a4837b32664b0e5526fb777824ecd2c /challenge-106 | |
| parent | d44b2193b81c369285cf9ee9f9e5efa5104859e2 (diff) | |
| download | perlweeklychallenge-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-x | challenge-106/pkmnx/raku/ch-1.raku | 22 | ||||
| -rwxr-xr-x | challenge-106/pkmnx/raku/ch-2.raku | 70 |
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(""); + +} |
