aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-01-13 13:25:55 +0000
committerGitHub <noreply@github.com>2020-01-13 13:25:55 +0000
commite9d26196d376052866b0c8180a7ccb7e91587345 (patch)
tree679caa47bc77cd73dfc79d29882a15e9caf9c061
parentd4bf6f609d2714b3862f693c2eafbc7744241ffb (diff)
parentc79525030ea6d637b206d2825ed85e3a8255f14b (diff)
downloadperlweeklychallenge-club-e9d26196d376052866b0c8180a7ccb7e91587345.tar.gz
perlweeklychallenge-club-e9d26196d376052866b0c8180a7ccb7e91587345.tar.bz2
perlweeklychallenge-club-e9d26196d376052866b0c8180a7ccb7e91587345.zip
Merge pull request #1133 from Scimon/master
The challenge description was a bit vague but I think I've solved it
-rw-r--r--challenge-043/simon-proctor/raku/ch-1.p650
-rw-r--r--challenge-043/simon-proctor/raku/ch-2.p620
2 files changed, 70 insertions, 0 deletions
diff --git a/challenge-043/simon-proctor/raku/ch-1.p6 b/challenge-043/simon-proctor/raku/ch-1.p6
new file mode 100644
index 0000000000..8e5d3da233
--- /dev/null
+++ b/challenge-043/simon-proctor/raku/ch-1.p6
@@ -0,0 +1,50 @@
+#!/usr/bin/env perl6
+
+use v6;
+
+# I'm not 100% sure what the task is asking for I think it's about using the Rings as sets so you can put numbers in the intersections.
+# (Note after running it I've found a solution with 1 number per set / intersection. So the code is based on this.
+
+# First up define the available areas
+sub reset-sets () {
+ {
+ blue => 8, yellow => 7, black => 0, green => 5, red => 9,
+ blue_yellow => 0, yellow_black => 0, black_green => 0, green_red => 0
+ };
+}
+
+my %sets = reset-sets();
+
+# Now define subs to calculate the totals for each set
+sub set-sum(%sets,@keys) {
+ return sub () {
+ [+] |%sets{@keys};
+ }
+}
+my &blue = set-sum(%sets,<<blue blue_yellow>>);
+my &yellow = set-sum(%sets,<<blue_yellow yellow yellow_black>>);
+my &black = set-sum(%sets,<<yellow_black black black_green>>);
+my &green = set-sum(%sets,<<black_green green green_red>>);
+my &red = set-sum(%sets,<<green_red red>>);
+
+my &complete = sub () { so blue() & yellow() & black() & green() & red() == 11 }
+
+say "Before";
+say "Current Sets {%sets.perl} : Totals : Blue {blue()} : Yellow {yellow() } : Black {black()} : Green {green()} : Red {red()} : Complete? {complete()}";
+
+my @options = [1,2,3,4,6];
+
+# First attempt, 1 number per pot.
+for @options.permutations -> @possible {
+ %sets = reset-sets();
+ %sets<<black blue_yellow yellow_black black_green green_red>> = @possible;
+ if ( complete() ) {
+ say "Solution";
+ say "Current Sets {%sets.perl} : Totals : Blue {blue()} : Yellow {yellow() } : Black {black()} : Green {green()} : Red {red()} : Complete? {complete()}";
+ exit;
+ }
+}
+
+say "Going to need to try something else";
+
+
diff --git a/challenge-043/simon-proctor/raku/ch-2.p6 b/challenge-043/simon-proctor/raku/ch-2.p6
new file mode 100644
index 0000000000..3cd3eb2a05
--- /dev/null
+++ b/challenge-043/simon-proctor/raku/ch-2.p6
@@ -0,0 +1,20 @@
+#!/usr/bin/enb perl6
+
+use v6;
+
+#| Calculate the self desscriptive number for the given base
+sub MAIN( UInt \base where 1 <= * <= 36 ) {
+ say calculate( base );
+}
+
+# No number available for these bases
+multi calculate( \base where * ~~ 1|2|3|6 ) {
+ "No self descriptive number for base {base}";
+}
+
+multi calculate(4) { "Either 1210 or 2020" }
+multi calculate(5) { "21200" }
+
+multi calculate(\base) {
+ ((base-4)*(base**(base-1))+(2*(base**(base-2)))+(base**(base-3))+(base**3)).base(base);
+}