diff options
Diffstat (limited to 'challenge-214')
98 files changed, 5521 insertions, 77 deletions
diff --git a/challenge-214/arne-sommer/blog.txt b/challenge-214/arne-sommer/blog.txt new file mode 100644 index 0000000000..cdf6b72676 --- /dev/null +++ b/challenge-214/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/bagging-scorepoints.html diff --git a/challenge-214/arne-sommer/raku/ch-1.raku b/challenge-214/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..13dd968aad --- /dev/null +++ b/challenge-214/arne-sommer/raku/ch-1.raku @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@scores where @scores.elems > 0 && all(@scores) ~~ UInt, :v(:$verbose)); + +my %freq = @scores>>.Int.Bag; +my @sort = @scores.sort.squish.reverse; + +say ": Frequency: { %freq.raku }" if $verbose; + +my %gold = (1 => 'G', 2 => 'S', 3 => 'B'); +my %rank; + +for @sort -> $score +{ + state $rank = 1; + %rank{$score} = %gold{$rank} // $rank; + say ": Score $score with rank: %rank{$score} and frequency: %freq{$score}" if $verbose; + $rank += %freq{$score}; +} + +say "(" ~ @scores.map({ %rank{$_} }).join(",") ~ ")"; + + diff --git a/challenge-214/arne-sommer/raku/ch-2.raku b/challenge-214/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..5479fa301e --- /dev/null +++ b/challenge-214/arne-sommer/raku/ch-2.raku @@ -0,0 +1,41 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@numbers where @numbers.elems > 0 && all(@numbers) ~~ Numeric, :v(:$verbose)); + +my $score = 0; +my %freq; +my $cheat = False; + +while (@numbers.elems) +{ + $cheat + ?? ( $cheat = False ) + !! ( %freq = @numbers.Bag ); + + my $size = @numbers.elems; + + for %freq.keys.sort -> $value + { + my $freq = %freq{$value}; + my $index = @numbers.first($value, :k); + + if all(@numbers[$index .. $index + $freq -1]) eq $value + { + sink @numbers.splice($index, $freq); + $score += $freq * $freq; + say ": Removed the value $value ($freq items, at index: $index .. { $index + $freq -1}). New score: $score" if $verbose; + } + } + + if @numbers.elems == $size + { + my $val = %freq.keys.sort({ %freq{$_} }).first; + %freq{$val}--; + $cheat = True; + say ": Enable cheat mode on value $val" if $verbose; + } +} + +say "ERROR: Unable to reduce @numbers[]" if @numbers.elems; + +say $score; diff --git a/challenge-214/arne-sommer/raku/collect-points b/challenge-214/arne-sommer/raku/collect-points new file mode 100755 index 0000000000..219cc9421f --- /dev/null +++ b/challenge-214/arne-sommer/raku/collect-points @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@numbers where @numbers.elems > 0 && all(@numbers) ~~ Numeric, :v(:$verbose)); + +my $score = 0; + +while (@numbers.elems) +{ + my %freq = @numbers.Bag; + + for %freq.keys.sort -> $value + { + my $freq = %freq{$value}; + my $index = @numbers.first($value, :k); + + if all(@numbers[$index .. $index + $freq -1]) eq $value + { + sink @numbers.splice($index, $freq); + $score += $freq * $freq; + say ": Removed the value $value ($freq items, at index: $index .. { $index + $freq -1}). New score: $score" if $verbose; + } + } +} + +say $score; diff --git a/challenge-214/arne-sommer/raku/collect-points-cheat b/challenge-214/arne-sommer/raku/collect-points-cheat new file mode 100755 index 0000000000..5479fa301e --- /dev/null +++ b/challenge-214/arne-sommer/raku/collect-points-cheat @@ -0,0 +1,41 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@numbers where @numbers.elems > 0 && all(@numbers) ~~ Numeric, :v(:$verbose)); + +my $score = 0; +my %freq; +my $cheat = False; + +while (@numbers.elems) +{ + $cheat + ?? ( $cheat = False ) + !! ( %freq = @numbers.Bag ); + + my $size = @numbers.elems; + + for %freq.keys.sort -> $value + { + my $freq = %freq{$value}; + my $index = @numbers.first($value, :k); + + if all(@numbers[$index .. $index + $freq -1]) eq $value + { + sink @numbers.splice($index, $freq); + $score += $freq * $freq; + say ": Removed the value $value ($freq items, at index: $index .. { $index + $freq -1}). New score: $score" if $verbose; + } + } + + if @numbers.elems == $size + { + my $val = %freq.keys.sort({ %freq{$_} }).first; + %freq{$val}--; + $cheat = True; + say ": Enable cheat mode on value $val" if $verbose; + } +} + +say "ERROR: Unable to reduce @numbers[]" if @numbers.elems; + +say $score; diff --git a/challenge-214/arne-sommer/raku/collect-points-last b/challenge-214/arne-sommer/raku/collect-points-last new file mode 100755 index 0000000000..c11c023438 --- /dev/null +++ b/challenge-214/arne-sommer/raku/collect-points-last @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@numbers where @numbers.elems > 0 && all(@numbers) ~~ Numeric, :v(:$verbose)); + +my $score = 0; + +while (@numbers.elems) +{ + my %freq = @numbers.Bag; + my $size = @numbers.elems; + + for %freq.keys.sort -> $value + { + my $freq = %freq{$value}; + my $index = @numbers.first($value, :k); + + if all(@numbers[$index .. $index + $freq -1]) eq $value + { + sink @numbers.splice($index, $freq); + $score += $freq * $freq; + say ": Removed the value $value ($freq items, at index: $index .. { $index + $freq -1}). New score: $score" if $verbose; + } + } + + last if @numbers.elems == $size; +} + +say "ERROR: Unable to reduce @numbers[]" if @numbers.elems; + +say $score; diff --git a/challenge-214/arne-sommer/raku/rank-scores b/challenge-214/arne-sommer/raku/rank-scores new file mode 100755 index 0000000000..13dd968aad --- /dev/null +++ b/challenge-214/arne-sommer/raku/rank-scores @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@scores where @scores.elems > 0 && all(@scores) ~~ UInt, :v(:$verbose)); + +my %freq = @scores>>.Int.Bag; +my @sort = @scores.sort.squish.reverse; + +say ": Frequency: { %freq.raku }" if $verbose; + +my %gold = (1 => 'G', 2 => 'S', 3 => 'B'); +my %rank; + +for @sort -> $score +{ + state $rank = 1; + %rank{$score} = %gold{$rank} // $rank; + say ": Score $score with rank: %rank{$score} and frequency: %freq{$score}" if $verbose; + $rank += %freq{$score}; +} + +say "(" ~ @scores.map({ %rank{$_} }).join(",") ~ ")"; + + diff --git a/challenge-214/athanasius/perl/ch-1.pl b/challenge-214/athanasius/perl/ch-1.pl new file mode 100644 index 0000000000..4d7ec02f41 --- /dev/null +++ b/challenge-214/athanasius/perl/ch-1.pl @@ -0,0 +1,215 @@ +#!perl + +################################################################################ +=comment + +Perl Weekly Challenge 214 +========================= + +TASK #1 +------- +*Rank Score* + +Submitted by: Mohammad S Anwar + +You are given a list of scores (>=1). + +Write a script to rank each score in descending order. First three will get +medals i.e. G (Gold), S (Silver) and B (Bronze). Rest will just get the ranking +number. + + Using the standard model of giving equal scores equal rank, then advancing + that number of ranks. + +Example 1 + + Input: @scores = (1,2,4,3,5) + Output: (5,4,S,B,G) + + Score 1 is the 5th rank. + Score 2 is the 4th rank. + Score 4 is the 2nd rank i.e. Silver (S). + Score 3 is the 3rd rank i.e. Bronze (B). + Score 5 is the 1st rank i.e. Gold (G). + +Example 2 + + Input: @scores = (8,5,6,7,4) + Output: (G,4,B,S,5) + + Score 8 is the 1st rank i.e. Gold (G). + Score 5 is the 4th rank. + Score 6 is the 3rd rank i.e. Bronze (B). + Score 7 is the 2nd rank i.e. Silver (S). + Score 4 is the 5th rank. + +Example 3 + + Input: @list = (3,5,4,2) + Output: (B,G,S,4) + +Example 4 + + Input: @scores = (2,5,2,1,7,5,1) + Output: (4,S,4,6,G,S,6) + +=cut +################################################################################ + +#--------------------------------------# +# Copyright © 2023 PerlMonk Athanasius # +#--------------------------------------# |
