aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetilS <kjetilskotheim@gmail.com>2025-08-25 19:53:42 +0200
committerKjetilS <kjetilskotheim@gmail.com>2025-08-25 19:53:42 +0200
commit1e42626ce7a1b2a935326f3e609fafc896c119bd (patch)
treeba847f210b215a8c04fdfa2bac881918d203a908
parent5b758b1a0f21ae54f4cdbfd96bff6c16519943ab (diff)
downloadperlweeklychallenge-club-1e42626ce7a1b2a935326f3e609fafc896c119bd.tar.gz
perlweeklychallenge-club-1e42626ce7a1b2a935326f3e609fafc896c119bd.tar.bz2
perlweeklychallenge-club-1e42626ce7a1b2a935326f3e609fafc896c119bd.zip
https://theweeklychallenge.org/blog/perl-weekly-challenge-336/
-rw-r--r--challenge-336/kjetillll/perl/ch-1.pl20
-rw-r--r--challenge-336/kjetillll/perl/ch-2.pl18
2 files changed, 38 insertions, 0 deletions
diff --git a/challenge-336/kjetillll/perl/ch-1.pl b/challenge-336/kjetillll/perl/ch-1.pl
new file mode 100644
index 0000000000..7b52f4e3a5
--- /dev/null
+++ b/challenge-336/kjetillll/perl/ch-1.pl
@@ -0,0 +1,20 @@
+use v5.10; use strict; use warnings; use List::Util qw( uniq ); use Math::Prime::Util::GMP qw( factor );
+
+sub f {
+ my @a = sort { $a <=> $b } @_;
+ for my $size ( uniq factor 0+@a ){
+ my @g = @a;
+ uniq( splice @g, 0, $size ) == 1 or next while @g;
+ return 1
+ }
+ return 0
+}
+
+my($true,$false)=(1,0);
+say pop(@$_) == f(@$_) ? "ok" : "error " for
+[ 1,1,2,2,2,2 => $true ], # Groups: (1,1), (2,2), (2,2)
+[ 1,1,1,2,2,2,3,3 => $false ], # Groups: (1,1,1), (2,2,2), (3,3)
+[ 5,5,5,5,5,5,7,7,7,7,7,7 => $true ], # Groups: (5,5,5,5,5,5), (7,7,7,7,7,7)
+[ 1,2,3,4 => $false ], #
+[ 8,8,9,9,10,10,11,11 => $true ], # Groups: (8,8), (9,9), (10,10), (11,11)
+
diff --git a/challenge-336/kjetillll/perl/ch-2.pl b/challenge-336/kjetillll/perl/ch-2.pl
new file mode 100644
index 0000000000..e244d9eddd
--- /dev/null
+++ b/challenge-336/kjetillll/perl/ch-2.pl
@@ -0,0 +1,18 @@
+sub f {
+ my @s;
+ for( @_ ) {
+ if ( /-?\d+/ ){ push @s, $_ }
+ elsif( /\+/ ){ push @s, $s[-2] + $s[-1] }
+ elsif( /C/ ){ pop @s }
+ elsif( /D/ ){ push @s, 2 * $s[-1] }
+ else { die "Invalid element $_" }
+ }
+ eval join '+', @s
+}
+
+print f( $$_[0] =~ /\S+/g ) == $$_[1] ? "ok\n" : "error\n" for
+[ '5 2 C D +' => 30 ],
+[ '5 -2 4 C D 9 + +' => 27 ],
+[ '7 D D C + 3' => 45 ],
+[ '-5 -10 + D C +' => -55 ],
+[ '3 6 + D C 8 + D -2 C +' => 128 ]