aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Hood <hood@panix.com>2020-12-21 19:51:23 -0500
committerPhilip Hood <hood@panix.com>2020-12-21 19:51:23 -0500
commitf0949455bffac9ffd78476afd7c858399b0dbbb2 (patch)
tree373289f02e5bc6b8bf65878e40e7211748560e17
parent122c18bebe8097db1b5059619bc61ed1ba006fc4 (diff)
downloadperlweeklychallenge-club-f0949455bffac9ffd78476afd7c858399b0dbbb2.tar.gz
perlweeklychallenge-club-f0949455bffac9ffd78476afd7c858399b0dbbb2.tar.bz2
perlweeklychallenge-club-f0949455bffac9ffd78476afd7c858399b0dbbb2.zip
challenge 92, 1 & 2 - in raku
-rwxr-xr-xchallenge-092/pkmnx/raku/ch-01.raku26
-rwxr-xr-xchallenge-092/pkmnx/raku/ch-02.raku68
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) );
+
+}