diff options
| author | Philip Hood <hood@panix.com> | 2020-12-21 19:51:23 -0500 |
|---|---|---|
| committer | Philip Hood <hood@panix.com> | 2020-12-21 19:51:23 -0500 |
| commit | f0949455bffac9ffd78476afd7c858399b0dbbb2 (patch) | |
| tree | 373289f02e5bc6b8bf65878e40e7211748560e17 | |
| parent | 122c18bebe8097db1b5059619bc61ed1ba006fc4 (diff) | |
| download | perlweeklychallenge-club-f0949455bffac9ffd78476afd7c858399b0dbbb2.tar.gz perlweeklychallenge-club-f0949455bffac9ffd78476afd7c858399b0dbbb2.tar.bz2 perlweeklychallenge-club-f0949455bffac9ffd78476afd7c858399b0dbbb2.zip | |
challenge 92, 1 & 2 - in raku
| -rwxr-xr-x | challenge-092/pkmnx/raku/ch-01.raku | 26 | ||||
| -rwxr-xr-x | challenge-092/pkmnx/raku/ch-02.raku | 68 |
2 files changed, 94 insertions, 0 deletions
diff --git a/challenge-092/pkmnx/raku/ch-01.raku b/challenge-092/pkmnx/raku/ch-01.raku new file mode 100755 index 0000000000..f5216f5cc0 --- /dev/null +++ b/challenge-092/pkmnx/raku/ch-01.raku @@ -0,0 +1,26 @@ +#!/usr/bin/env raku + +# see usage: +# +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-092/pkmnx/raku$ ./ch-01.raku "abc" "xyz" +# Input: $A = "abc"; $B = "xyz" +# Output: 1 +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-092/pkmnx/raku$ ./ch-01.raku "abb" "xyy" +# Input: $A = "abb"; $B = "xyy" +# Output: 1 +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-092/pkmnx/raku$ ./ch-01.raku "sum" "add" +# Input: $A = "sum"; $B = "add" +# Output: 0 + +sub MAIN( Str $A, Str $B ) { + + my $fn = sub ($x) { + my $h = {}; + $x.comb().map({ $h{$_}++ }); + $h.values.sort().join("|"); + }; + + printf( "Input: \$A = \"%s\"; \$B = \"%s\"\n", $A, $B ); + printf( "Output: %s\n", ($fn($A) ~~ $fn($B) ?? 1 !! 0 ) ); + +} diff --git a/challenge-092/pkmnx/raku/ch-02.raku b/challenge-092/pkmnx/raku/ch-02.raku new file mode 100755 index 0000000000..a951bc5e4f --- /dev/null +++ b/challenge-092/pkmnx/raku/ch-02.raku @@ -0,0 +1,68 @@ +#!/usr/bin/env raku + +# see usage: +# +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-092/pkmnx/raku$ echo "(1,5), (7,9) (10,11)" | ./ch-02.raku +# Input $S = (1,5), (7,9); $N = (10,11) +# Output: (1,5), (7,9), (10,11) +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-092/pkmnx/raku$ echo "(1,2), (3,7), (8,10); $N = (5,8)" | ./ch-02.raku +# Input $S = (1,2), (3,7), (8,10); $N = (5,8) +# Output: (1,2), (3,10) +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-092/pkmnx/raku$ echo "Input $S = (1,4), (8,10); $N = (2,6)" | ./ch-02.raku +# Input $S = (1,4), (8,10); $N = (2,6) +# Output: (1,6), (8,10) + +sub MAIN () { + + my $cnt = 0; + my $ar = []; + for lines() -> $l { + for ( $l ~~ m:g/ (\-*\d+) \s* ','\s* (\-*\d+) / ) -> ($m,$n) { + $ar.push( ($m +0, $n +0).sort({ $^a <=> $^b }) ); + $cnt++; + } + } + die "not enough nums to process!" if $cnt < 2; + + my $display = {}; + + my $stopReducing = False; + repeat { + + if ($ar.elems) { + my $tail = $ar.pop; + + if ( !$display ) { + $display = { t => $tail, ar => $ar }; + } + + my $nar = []; + $ar.sort({ $^a[0] <=> $^b[0] }).map({ $nar.push($_) }); + $ar = $nar; + + my $cnt = 0; + for (^$ar.elems ) -> $in { + my $it = $ar[$in]; + if ( $tail and $tail[0] >= $it[0] and $tail[0] <= $it[1] ) { + if ( $tail[1] >= $it[1] ) { + $ar[$in] = ( $it[0], $tail[1] ); + } + $cnt++; + } + } + + if ( $cnt == 0 ) { + $ar.push($tail); + $stopReducing = True; + } + } + + } until $stopReducing; + + + my $dFn = sub ($in) { $in.map({ "(" ~ $_.join(",") ~ ")" }).join(", ") }; + + printf( "Input \$S = %s; \$N = (%s)\n", $dFn($display{"ar"}), $display{"t"}.join(",") ); + printf( "Output: %s\n", $dFn($ar) ); + +} |
