aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-06-01 22:55:17 +0100
committerGitHub <noreply@github.com>2025-06-01 22:55:17 +0100
commit81e3add01b84064c3d96337dbc52467fd16e4718 (patch)
treee4247709a0fbdccadfa81704dfb3d19183d06e75
parent72a1c60daab582b75fc1439c852a7c868adc0172 (diff)
parent3f60830631991617073def2572583ced364b8513 (diff)
downloadperlweeklychallenge-club-81e3add01b84064c3d96337dbc52467fd16e4718.tar.gz
perlweeklychallenge-club-81e3add01b84064c3d96337dbc52467fd16e4718.tar.bz2
perlweeklychallenge-club-81e3add01b84064c3d96337dbc52467fd16e4718.zip
Merge pull request #12112 from kjetillll/challenge-321-kjetillll
https://theweeklychallenge.org/blog/perl-weekly-challenge-321/
-rw-r--r--challenge-321/kjetillll/perl/ch-1.pl75
-rw-r--r--challenge-321/kjetillll/perl/ch-2.pl8
2 files changed, 83 insertions, 0 deletions
diff --git a/challenge-321/kjetillll/perl/ch-1.pl b/challenge-321/kjetillll/perl/ch-1.pl
new file mode 100644
index 0000000000..eff24c732d
--- /dev/null
+++ b/challenge-321/kjetillll/perl/ch-1.pl
@@ -0,0 +1,75 @@
+use warnings; use strict; use List::Util 'uniq';
+
+#----four alternatives:
+
+sub f1 {
+ my @n = sort { $a <=> $b } @_;
+ my %avg; $avg{ ( shift(@n) + pop(@n) ) / 2 }++ while @n >= 2;
+ 0 + keys %avg
+}
+
+sub f2 {
+ my($n,$h)=(@_,{});
+ !ref$n ? f2( [ sort { $a <=> $b } @_ ] )
+ :@$n ? f2( [ @$n[ 1 .. $#$n-1 ] ], { %$h, $$n[0] + $$n[-1] => 1 } )
+ : +keys %$h
+}
+
+sub f3 {
+ ! ref $_[0] ? f3( {}, sort { $a <=> $b } @_ )
+ : @_ > 2 ? f3( { %{ shift() }, shift() + pop() => 1 }, @_ )
+ : +keys %{ shift() }
+}
+
+sub f4 {
+ my @n = sort { $a <=> $b } @_;
+ +keys %{ { map { $n[$_]+$n[-1-$_], 1 } 0 .. $#n/2 } }
+}
+
+sub f5 {
+ my @n = sort { $a <=> $b } @_;
+ 0+uniq map $n[$_]+$n[-1-$_], 0 .. $#n/2
+}
+
+
+#----tests
+binmode STDOUT, ':encoding(UTF-8)';
+my @tests=map{my@i=/\d+/g;{output=>pop@i,input=>\@i}}join('',<DATA>)=~/Input: .*? Output: \d+/gs;
+for my $f ( \&f1, \&f2, \&f3, \&f4, \&f5 ){
+ print $f->( @{ $$_{input} } ) == $$_{output}
+ ? "\N{FIRST PLACE MEDAL}" : "\N{PILE OF POO}"
+ for @tests;
+}
+__DATA__
+
+https://theweeklychallenge.org/blog/perl-weekly-challenge-321/
+
+ Example 1
+ Input: @nums = (1, 2, 4, 3, 5, 6)
+ Output: 1
+
+ Step 1: Min = 1, Max = 6, Avg = 3.5
+ Step 2: Min = 2, Max = 5, Avg = 3.5
+ Step 3: Min = 3, Max = 4, Avg = 3.5
+
+ The count of distinct average is 1.
+
+ Example 2
+ Input: @nums = (0, 2, 4, 8, 3, 5)
+ Output: 2
+
+ Step 1: Min = 0, Max = 8, Avg = 4
+ Step 2: Min = 2, Max = 5, Avg = 3.5
+ Step 3: Min = 3, Max = 4, Avg = 3.5
+
+ The count of distinct average is 2.
+
+ Example 3
+ Input: @nums = (7, 3, 1, 0, 5, 9)
+ Output: 2
+
+ Step 1: Min = 0, Max = 9, Avg = 4.5
+ Step 2: Min = 1, Max = 7, Avg = 4
+ Step 3: Min = 3, Max = 5, Avg = 4
+
+ The count of distinct average is 2.
diff --git a/challenge-321/kjetillll/perl/ch-2.pl b/challenge-321/kjetillll/perl/ch-2.pl
new file mode 100644
index 0000000000..2517cc6a3f
--- /dev/null
+++ b/challenge-321/kjetillll/perl/ch-2.pl
@@ -0,0 +1,8 @@
+
+sub fixstr { my $str = shift; 1 while $str =~ s/[^#]?#//; $str }
+sub eqstr { fixstr( $_[0] ) eq fixstr( $_[1] ) }
+
+print eqstr("ab#c", "ad#c") ? "🥇" : "💩";
+print eqstr("ab##", "a#b#") ? "🥇" : "💩";
+print ! eqstr("a#b", "c") ? "🥇" : "💩";
+print eqstr("##a##c", "c") ? "🥇" : "💩";