diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2023-05-29 13:59:26 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2023-05-29 13:59:26 +0200 |
| commit | e974a5b268c837d3b8e4f1e0ce5b460fbbce8de9 (patch) | |
| tree | 2f3431c8fe004449367587e3e83a5649873b713f | |
| parent | 4c339bf933d5002678010d18b4a0394a87c677cd (diff) | |
| download | perlweeklychallenge-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.p6 | 47 |
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; +} |
