aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2023-05-29 13:59:26 +0200
committerLuca Ferrari <fluca1978@gmail.com>2023-05-29 13:59:26 +0200
commite974a5b268c837d3b8e4f1e0ce5b460fbbce8de9 (patch)
tree2f3431c8fe004449367587e3e83a5649873b713f
parent4c339bf933d5002678010d18b4a0394a87c677cd (diff)
downloadperlweeklychallenge-club-e974a5b268c837d3b8e4f1e0ce5b460fbbce8de9.tar.gz
perlweeklychallenge-club-e974a5b268c837d3b8e4f1e0ce5b460fbbce8de9.tar.bz2
perlweeklychallenge-club-e974a5b268c837d3b8e4f1e0ce5b460fbbce8de9.zip
Task 2 done
-rw-r--r--challenge-219/luca-ferrari/raku/ch-2.p647
1 files changed, 47 insertions, 0 deletions
diff --git a/challenge-219/luca-ferrari/raku/ch-2.p6 b/challenge-219/luca-ferrari/raku/ch-2.p6
new file mode 100644
index 0000000000..3e4b074d88
--- /dev/null
+++ b/challenge-219/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,47 @@
+#!raku
+
+#
+# Perl Weekly Challenge 219
+# Task 2
+#
+# See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-219/>
+#
+
+sub MAIN() {
+
+# my @costs = 2, 7, 25;
+ my @days = 1, 5, 6, 7, 9, 15;
+
+ # sort the days
+ @days .= sort;
+
+ my %costs;
+ %costs<1> = 2;
+ %costs<7> = 7;
+ %costs<30> = 25;
+
+ my @evaluated;
+ @evaluated.push: { cost => 0, days => @days };
+ my $current-cost = @days.elems * %costs<1>;
+
+ while ( @evaluated.elems > 0 ) {
+ my %entry = @evaluated.shift;
+
+ if ( %entry<days>.elems == 0 ) {
+ $current-cost = %entry<cost> if ( %entry<cost> < $current-cost );
+ }
+ else {
+ next if ( %entry<cost> >= $current-cost );
+
+ my $begin-date = %entry<days>[ 0 ];
+ for %costs.keys {
+ my $end-date = $begin-date + $_ - 1;
+ my @uncovered-days = %entry<days>.grep( * > $end-date );
+ my $cost = %entry<cost> + %costs{ $_ };
+ @evaluated.push: { cost => $cost, days => @uncovered-days };
+ }
+ }
+ }
+
+ say $current-cost;
+}