aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolgár Márton <polgar@astron.hu>2022-11-26 02:59:25 +0100
committerPolgár Márton <polgar@astron.hu>2022-11-26 02:59:25 +0100
commit8e3cd31242f19ddf2a5553a289df2bd0c0b8b4e0 (patch)
treebe0f58739b5e47764f6ac1e2924be7be93d24263
parent7160c6fd2ad52dc7c7e117c1e59ff7de4821603e (diff)
downloadperlweeklychallenge-club-8e3cd31242f19ddf2a5553a289df2bd0c0b8b4e0.tar.gz
perlweeklychallenge-club-8e3cd31242f19ddf2a5553a289df2bd0c0b8b4e0.tar.bz2
perlweeklychallenge-club-8e3cd31242f19ddf2a5553a289df2bd0c0b8b4e0.zip
A shot at week 192 by 2colours
-rwxr-xr-xchallenge-192/2colours/raku/ch-1.raku10
-rwxr-xr-xchallenge-192/2colours/raku/ch-2.raku28
2 files changed, 38 insertions, 0 deletions
diff --git a/challenge-192/2colours/raku/ch-1.raku b/challenge-192/2colours/raku/ch-1.raku
new file mode 100755
index 0000000000..2208626234
--- /dev/null
+++ b/challenge-192/2colours/raku/ch-1.raku
@@ -0,0 +1,10 @@
+#!/usr/bin/env raku
+
+subset PosInt of Int where * > 0;
+
+sub MAIN(PosInt $n) {
+ $n.msb // 0 andthen
+ 2 +< $_ - 1 andthen
+ $_ - $n andthen
+ .say;
+} \ No newline at end of file
diff --git a/challenge-192/2colours/raku/ch-2.raku b/challenge-192/2colours/raku/ch-2.raku
new file mode 100755
index 0000000000..3a66a53045
--- /dev/null
+++ b/challenge-192/2colours/raku/ch-2.raku
@@ -0,0 +1,28 @@
+#!/usr/bin/env raku
+
+subset Choice of List where ((Int, Int), Int);
+
+sub next-placement(@normal-values) {
+ @normal-values.pairs.grep(*.value != 0).rotor(2 => -1).grep({ [!=] $_>>.value>>.sign }) andthen .so ?? .min({ [R-] $_>>.key }) !! Nil
+}
+
+multi dist-steps(@ where { .sum !%% .elems } ) { -1 }
+multi dist-steps(@list) {
+ my $average = @list.sum div +@list;
+ my @norm-list = @list >>->> $average;
+ my @costs = gather while @norm-list.&next-placement -> $endpoints {
+ my $moved-amount = $endpoints.>>.value>>.abs.min;
+ my $distance = [R-] $endpoints>>.key;
+ take $moved-amount * $distance;
+ $_ -= $moved-amount * .sign for $endpoints>>.value;
+ };
+ @costs.sum
+}
+
+my token natural-number { 0 | <[1..9]> <[0..9]>* }
+subset NatList of Str where /^ '(' <natural-number>* % [\s* ',' \s*] ')' $/;
+sub MAIN($n) {
+ die 'Please provide a valid list of natural numbers' unless $n ~~ NatList;
+ my @list = $<natural-number>>>.Int;
+ @list.&dist-steps.say;
+} \ No newline at end of file