diff options
| author | KjetilS <kjetilskotheim@gmail.com> | 2025-08-25 19:53:42 +0200 |
|---|---|---|
| committer | KjetilS <kjetilskotheim@gmail.com> | 2025-08-25 19:53:42 +0200 |
| commit | 1e42626ce7a1b2a935326f3e609fafc896c119bd (patch) | |
| tree | ba847f210b215a8c04fdfa2bac881918d203a908 | |
| parent | 5b758b1a0f21ae54f4cdbfd96bff6c16519943ab (diff) | |
| download | perlweeklychallenge-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.pl | 20 | ||||
| -rw-r--r-- | challenge-336/kjetillll/perl/ch-2.pl | 18 |
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 ] |
