diff options
| author | 冯昶 <fengchang@novel-supertv.com> | 2023-05-02 14:47:44 +0800 |
|---|---|---|
| committer | 冯昶 <fengchang@novel-supertv.com> | 2023-05-02 14:47:44 +0800 |
| commit | fb913ef4e973a29450b92ca89588e839bf6635f6 (patch) | |
| tree | 94abff55c6006a2b0a4b1da93a5e661753e00fea /challenge-214 | |
| parent | efea8410c80647939ae587536a4f1f66dd2c3a4a (diff) | |
| parent | 6cc2e38f43011f65d7deaf1e03cf55e4306a53e5 (diff) | |
| download | perlweeklychallenge-club-fb913ef4e973a29450b92ca89588e839bf6635f6.tar.gz perlweeklychallenge-club-fb913ef4e973a29450b92ca89588e839bf6635f6.tar.bz2 perlweeklychallenge-club-fb913ef4e973a29450b92ca89588e839bf6635f6.zip | |
Merge remote-tracking branch 'upstream/master'
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 + |
