aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-284/wlmb/blog.txt1
-rwxr-xr-xchallenge-284/wlmb/perl/ch-1.pl14
-rwxr-xr-xchallenge-284/wlmb/perl/ch-2.pl31
3 files changed, 46 insertions, 0 deletions
diff --git a/challenge-284/wlmb/blog.txt b/challenge-284/wlmb/blog.txt
new file mode 100644
index 0000000000..bc6ecbf095
--- /dev/null
+++ b/challenge-284/wlmb/blog.txt
@@ -0,0 +1 @@
+https://wlmb.github.io/2024/08/26/PWC283/
diff --git a/challenge-284/wlmb/perl/ch-1.pl b/challenge-284/wlmb/perl/ch-1.pl
new file mode 100755
index 0000000000..f918e73f48
--- /dev/null
+++ b/challenge-284/wlmb/perl/ch-1.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+# Perl weekly challenge 283
+# Task 1: Lucky Integer
+#
+# See https://wlmb.github.io/2024/08/26/PWC283/#task-1-lucky-integer
+use v5.36;
+use List::Util qw(max);
+die <<~"FIN" unless @ARGV;
+ Usage: $0 N1 N2...
+ to find the largest lucky number among N1 N2...
+ FIN
+my %frequency_of;
+$frequency_of{$_}++ for @ARGV;
+say "@ARGV -> ", (max grep {$_==$frequency_of{$_}} keys %frequency_of)//-1;
diff --git a/challenge-284/wlmb/perl/ch-2.pl b/challenge-284/wlmb/perl/ch-2.pl
new file mode 100755
index 0000000000..4846ef1d98
--- /dev/null
+++ b/challenge-284/wlmb/perl/ch-2.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/env perl
+# Perl weekly challenge 283
+# Task 2: Relative Sort
+#
+# See https://wlmb.github.io/2024/08/26/PWC283/#task-2-relative-sort
+use v5.36;
+use experimental qw(for_list);
+use Scalar::Util qw(looks_like_number);
+use List::Util qw(all);
+die <<~"FIN" unless @ARGV && @ARGV%2==0;
+ Usage: $0 L11 L12 L21 L22...
+ to sort the elements of the list Li1 using the ranks given by Li2.
+ Lij is a string containing a list of string separated numbers.
+ FIN
+for my ($list, $order)(@ARGV){
+ my @list=split " ", $list;
+ my @order=split " ", $order;
+ warn("Expected only numbers: $list; $order"), next
+ unless all {looks_like_number($_)} (@list, @order);
+ my %rank_of;
+ $rank_of{$order[$_]}=$_ for 0..@order-1;
+ my %is_ranked;
+ $is_ranked{$_}=defined $rank_of{$_}?1:0 for @list;
+ my @sorted;
+ @sorted= sort {
+ ($is_ranked{$b} <=> $is_ranked{$a})
+ || ($rank_of{$a}||0) <=> ($rank_of{$b}||0)
+ || $a <=> $b
+ } @list;
+ say "@list; @order -> @sorted";
+}