aboutsummaryrefslogtreecommitdiff
path: root/challenge-075
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-08-24 06:53:46 -0600
committerMark Anderson <mark@frontrangerunner.com>2020-08-24 06:53:46 -0600
commitf4b135ebe1aab846285a642818b3bd146ed5e000 (patch)
treeba7927b3622faefbd8e8da303a3491f5a6a954d6 /challenge-075
parentfbf3d5c6dc06db2c8e3bae1f25e4c46c8bd644d2 (diff)
downloadperlweeklychallenge-club-f4b135ebe1aab846285a642818b3bd146ed5e000.tar.gz
perlweeklychallenge-club-f4b135ebe1aab846285a642818b3bd146ed5e000.tar.bz2
perlweeklychallenge-club-f4b135ebe1aab846285a642818b3bd146ed5e000.zip
Challenge 75 Solutions (raku)
Diffstat (limited to 'challenge-075')
-rw-r--r--challenge-075/mark-anderson/raku/ch-1.p641
-rw-r--r--challenge-075/mark-anderson/raku/ch-2.p651
2 files changed, 92 insertions, 0 deletions
diff --git a/challenge-075/mark-anderson/raku/ch-1.p6 b/challenge-075/mark-anderson/raku/ch-1.p6
new file mode 100644
index 0000000000..0108c2a3b6
--- /dev/null
+++ b/challenge-075/mark-anderson/raku/ch-1.p6
@@ -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.p6 b/challenge-075/mark-anderson/raku/ch-2.p6
new file mode 100644
index 0000000000..bb5f9ac2a1
--- /dev/null
+++ b/challenge-075/mark-anderson/raku/ch-2.p6
@@ -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;
+}