From f4b135ebe1aab846285a642818b3bd146ed5e000 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 24 Aug 2020 06:53:46 -0600 Subject: Challenge 75 Solutions (raku) --- challenge-075/mark-anderson/raku/ch-1.p6 | 41 +++++++++++++++++++++++++ challenge-075/mark-anderson/raku/ch-2.p6 | 51 ++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 challenge-075/mark-anderson/raku/ch-1.p6 create mode 100644 challenge-075/mark-anderson/raku/ch-2.p6 (limited to 'challenge-075') 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; +} -- cgit From 55bafec3e9eb285b114136eba8b6fa0a9a16080d Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 24 Aug 2020 06:57:04 -0600 Subject: Challenge 75 Solutions --- challenge-075/mark-anderson/raku/ch-1.p6 | 41 ------------------------ challenge-075/mark-anderson/raku/ch-1.raku | 41 ++++++++++++++++++++++++ challenge-075/mark-anderson/raku/ch-2.p6 | 51 ------------------------------ challenge-075/mark-anderson/raku/ch-2.raku | 51 ++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 92 deletions(-) delete mode 100644 challenge-075/mark-anderson/raku/ch-1.p6 create mode 100644 challenge-075/mark-anderson/raku/ch-1.raku delete mode 100644 challenge-075/mark-anderson/raku/ch-2.p6 create mode 100644 challenge-075/mark-anderson/raku/ch-2.raku (limited to 'challenge-075') diff --git a/challenge-075/mark-anderson/raku/ch-1.p6 b/challenge-075/mark-anderson/raku/ch-1.p6 deleted file mode 100644 index 0108c2a3b6..0000000000 --- a/challenge-075/mark-anderson/raku/ch-1.p6 +++ /dev/null @@ -1,41 +0,0 @@ -=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-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.p6 b/challenge-075/mark-anderson/raku/ch-2.p6 deleted file mode 100644 index bb5f9ac2a1..0000000000 --- a/challenge-075/mark-anderson/raku/ch-2.p6 +++ /dev/null @@ -1,51 +0,0 @@ -=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; -} 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; +} -- cgit