aboutsummaryrefslogtreecommitdiff
path: root/challenge-075
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-08-24 14:04:24 +0100
committerGitHub <noreply@github.com>2020-08-24 14:04:24 +0100
commitd2924c499dc7cbe181d58d3bc1ff4b2b7eab3ca1 (patch)
treeb409e954e220a1aadd8d1749b9a790b601a5e9c3 /challenge-075
parentefe7a8d6350936d0c464212f29f6d4658ee78ddc (diff)
parent55bafec3e9eb285b114136eba8b6fa0a9a16080d (diff)
downloadperlweeklychallenge-club-d2924c499dc7cbe181d58d3bc1ff4b2b7eab3ca1.tar.gz
perlweeklychallenge-club-d2924c499dc7cbe181d58d3bc1ff4b2b7eab3ca1.tar.bz2
perlweeklychallenge-club-d2924c499dc7cbe181d58d3bc1ff4b2b7eab3ca1.zip
Merge pull request #2135 from andemark/branch-for-challenge-075
Branch for challenge 075
Diffstat (limited to 'challenge-075')
-rw-r--r--challenge-075/mark-anderson/raku/ch-1.raku41
-rw-r--r--challenge-075/mark-anderson/raku/ch-2.raku51
2 files changed, 92 insertions, 0 deletions
diff --git a/challenge-075/mark-anderson/raku/ch-1.raku b/challenge-075/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..0108c2a3b6
--- /dev/null
+++ b/challenge-075/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,41 @@
+=begin usage
+
+usage: raku ch-1.raku 6 1 2 4
+
+output: 111111
+ 11112
+ 1122
+ 114
+ 222
+ 24
+
+ 6 combinations
+
+=end usage
+
+# This program just creates the nested loops needed to create the
+# combinations and then executes that code.
+
+use MONKEY-SEE-NO-EVAL;
+
+unit sub MAIN(Int $S, *@C where @C.all ~~ Int);
+
+my $eval = "my \@results;\n";
+
+for ^@C -> $i {
+my $sum-str = (map { "\$v$_" }, 0..$i).join(" + ");
+my $out-str = (map { "\@C[$_] x \$v$_ div \@C[$_]" }, 0..$i).join(",\n");
+
+$eval ~= q :to/END/;
+loop (my $v\qq[$i] = 0; $v\qq[$i] <= $S; $v\qq[$i] += @C[\qq[$i]]) {
+@results.unshift: [\qq[$out-str]] if \qq[$sum-str] == $S;
+next if \qq[$sum-str] >= $S;
+
+END
+}
+
+$eval ~= "}" x @C;
+$eval ~= "\nsay .join for \@results;";
+$eval ~= "\nsay \"\\n\", @results.elems, \" combinations\";";
+
+EVAL $eval;
diff --git a/challenge-075/mark-anderson/raku/ch-2.raku b/challenge-075/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..bb5f9ac2a1
--- /dev/null
+++ b/challenge-075/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,51 @@
+=begin usage
+
+Usage: raku ch-2.raku 1 2 3 4
+
+Output:
+
+4 #
+3 # #
+2 # # #
+1 # # # #
+ - - - -
+ 1 2 3 4
+
+6: (3 x 2) formed by columns (3, 4)
+6: (2 x 3) formed by columns (2, 3, 4)
+
+=end usage
+
+# These subsets ensure that the arguments are Ints and there
+# are at least 2 which are 2 or bigger to form a rectangle.
+
+subset IntArray of Array where .all ~~ Int;
+
+subset MoreThan1IntArray of IntArray where .elems > 1;
+
+subset AtLeast2BiggerThan1 of MoreThan1IntArray where .grep(* > 1).elems >= 2;
+
+unit sub MAIN(*@array where @array ~~ AtLeast2BiggerThan1);
+
+my %h;
+
+for 2..@array.elems -> $i {
+ for @array.rotor($i => 1-$i) -> $list {
+ %h{$list} = $list.min * $list.elems;
+ }
+}
+
+for @array.max ... 1 -> $i {
+ say "$i " ~ do
+ for @array -> $v {
+ if $v >= $i { "#" } else { " " }
+ }
+}
+
+printf "%s%s\n%s%s\n\n", " ", " -" x @array.elems, " ", "{@array}";
+
+for %h.maxpairs -> $pair {
+ my @digits = $pair.key.comb(/\d+/);
+ say "{$pair.value}: ({@digits.min} x {@digits.elems}) formed by columns ",
+ @digits.fmt("%d", ", ").List;
+}