aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-18 13:46:38 +0100
committerGitHub <noreply@github.com>2021-05-18 13:46:38 +0100
commit20bcd33a25d8620bec96a31ca74b11882aacd755 (patch)
tree25140cc151c7446cc1e3ce84cd4d890abbcd7fc5
parent511962e60872ab7379ede51e0d42e0d51b864668 (diff)
parent1a3f2b41e483f11242ce8ff89cc240dce671e305 (diff)
downloadperlweeklychallenge-club-20bcd33a25d8620bec96a31ca74b11882aacd755.tar.gz
perlweeklychallenge-club-20bcd33a25d8620bec96a31ca74b11882aacd755.tar.bz2
perlweeklychallenge-club-20bcd33a25d8620bec96a31ca74b11882aacd755.zip
Merge pull request #4102 from stuart-little/stuart-little_113_raku
1st commit on 113_raku
-rwxr-xr-xchallenge-113/stuart-little/raku/ch-1.p621
-rwxr-xr-xchallenge-113/stuart-little/raku/ch-2.p643
2 files changed, 64 insertions, 0 deletions
diff --git a/challenge-113/stuart-little/raku/ch-1.p6 b/challenge-113/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..2df0b1ccfb
--- /dev/null
+++ b/challenge-113/stuart-little/raku/ch-1.p6
@@ -0,0 +1,21 @@
+#!/usr/bin/env perl6
+use v6;
+
+# run <script> <number> <digit>
+
+sub lastDigSumm($nr,$dig,$nrSummands) {
+ return (($nr - $nrSummands * $dig) %% 10) && ($nrSummands * $dig <= $nr) && ($nrSummands * (($dig -1) * 10 + $dig) >= $nr);
+}
+
+sub lastDig($nr,$dig) {
+ return (1..9).grep({ lastDigSumm($nr,$dig,$_) }).Bool;
+}
+
+sub sol($nr,$dig) {
+ $dig == 0 && return ($nr >= 101 || ($nr %% 10));
+ return (($nr >= $dig * 11) || lastDig($nr,$dig));
+}
+
+say sol(|@*ARGS.map(*.Int)).Int;
+
+
diff --git a/challenge-113/stuart-little/raku/ch-2.p6 b/challenge-113/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..81d47b2aaf
--- /dev/null
+++ b/challenge-113/stuart-little/raku/ch-2.p6
@@ -0,0 +1,43 @@
+#!/usr/bin/env perl6
+use v6;
+
+use MONKEY-SEE-NO-EVAL;
+
+sub diffIfNum($nr,$str) {
+ return ($str.Int.defined) ?? (($nr - $str.Int).Str) !! ($str);
+}
+
+sub list2lol(@l) {
+ (@l.elems == 0 || @l[0] eq '.') && return [""];
+ my $ix = @l[1..*].keys.first( -> $i { 2*@l[1..$i+1].grep({ $_ eq '.' }).elems > $i+1});
+ return [list2lol(@l[1..$ix+1]),list2lol(@l[$ix+2..*]),@l[0].Str];
+}
+
+my @INPUT = (@*ARGS.elems) ?? (@*ARGS) !! (<1 2 4 . 7 . . . 3 5 . . 6 . .>);
+my $sum = @INPUT.grep({ $_.Int.defined }).map(*.Int).sum;
+my @outTreeList = @INPUT.map({ diffIfNum($sum,$_) });
+
+my $str=list2lol(@outTreeList).raku;
+EVAL qq!
+use Tree::DAG_Node;
+my \$lol = $str;
+my \$tree=Tree::DAG_Node->lol_to_tree(\$lol);
+print map(\"\$_\\n\", \@\{\$tree->tree2string(\{ no_attributes => 1 \})\});
+!, :lang<Perl5>;
+
+=finish
+run <script> <tree in preorder form with '.' for empty nodes, entered as space-separated values>
+
+ref: https://stackoverflow.com/a/2676849/11064961
+
+e.g. 1 2 4 . 7 . . . 3 5 . . 6 . . represents the tree
+
+ 1
+ / \
+ 2 3
+ / / \
+ 4 5 6
+ \
+ 7
+
+given as an example in the problem formulation at https://perlweeklychallenge.org/blog/perl-weekly-challenge-113/#TASK2