aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-01-07 23:49:11 +0000
committerGitHub <noreply@github.com>2024-01-07 23:49:11 +0000
commit943d089df6c6ccc87d07549b2b5739758bc2b629 (patch)
treea541f094401e5ff385be0e4caaa36ca9e708e761
parent8d699603635f1a47af9fd27a178d19719163e557 (diff)
parent4fe414b35b4387f8ca60a22ad906ad5a478ad361 (diff)
downloadperlweeklychallenge-club-943d089df6c6ccc87d07549b2b5739758bc2b629.tar.gz
perlweeklychallenge-club-943d089df6c6ccc87d07549b2b5739758bc2b629.tar.bz2
perlweeklychallenge-club-943d089df6c6ccc87d07549b2b5739758bc2b629.zip
Merge pull request #9362 from jaldhar/challenge-247
Challenge 247 by Jaldhar H. Vyas.
-rw-r--r--challenge-247/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-247/jaldhar-h-vyas/perl/ch-1.pl59
-rwxr-xr-xchallenge-247/jaldhar-h-vyas/perl/ch-2.pl12
-rwxr-xr-xchallenge-247/jaldhar-h-vyas/raku/ch-1.raku63
-rwxr-xr-xchallenge-247/jaldhar-h-vyas/raku/ch-2.raku14
5 files changed, 149 insertions, 0 deletions
diff --git a/challenge-247/jaldhar-h-vyas/blog.txt b/challenge-247/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..395bb62acb
--- /dev/null
+++ b/challenge-247/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2024/01/perl_weekly_challenge_week_247.html
diff --git a/challenge-247/jaldhar-h-vyas/perl/ch-1.pl b/challenge-247/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..27379a2105
--- /dev/null
+++ b/challenge-247/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+use List::Util qw/ shuffle /;
+
+my @names1 = ('Mr. Wall',
+ 'Mrs. Wall',
+ 'Mr. Anwar',
+ 'Mrs. Anwar',
+ 'Mr. Conway',
+ 'Mr. Cross',
+ );
+
+my @names2 = ('Mr. Wall',
+ 'Mrs. Wall',
+ 'Mr. Anwar',
+ );
+
+
+sub secretSanta {
+ my @names = @_;
+ my %pairs;
+
+ @names = shuffle(@names);
+ if (scalar @names % 2) { # odd number of participants
+ for my $i (0 .. scalar @names - 2) {
+ $pairs{$names[$i]} = $names[$i + 1];
+ }
+ $pairs{$names[-1]} = $names[0];
+
+ } else { # even number of participants
+ while (scalar @names) {
+ my ($title1, $surname1) = split q{ }, $names[0];
+ my ($title2, $surname2) = split q{ }, $names[1];
+
+ if ($surname1 eq $surname2) {
+ @names = shuffle(@names);
+ } else {
+ $pairs{$names[0]} = $names[1];
+ $pairs{$names[1]} = $names[0];
+ splice @names, 0, 2;
+ }
+ }
+ }
+
+ return %pairs;
+}
+
+my %list1 = secretSanta(@names1);
+while (my ($giver, $receiver) = each %list1) {
+ say "$giver -> $receiver";
+}
+
+print "\n";
+
+my %list2 = secretSanta(@names2);
+while (my ($giver, $receiver) = each %list2) {
+ say "$giver -> $receiver";
+}
diff --git a/challenge-247/jaldhar-h-vyas/perl/ch-2.pl b/challenge-247/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..1d88f5b6d3
--- /dev/null
+++ b/challenge-247/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+
+my @chars = split //, shift @ARGV;
+my %pairs;
+
+for my $i (1 .. scalar @chars - 1) {
+ $pairs{join q{}, ($chars[$i - 1], $chars[$i])}++;
+}
+
+say [sort { $pairs{$b} <=> $pairs{$a} || $a cmp $b } keys %pairs]->[0];
diff --git a/challenge-247/jaldhar-h-vyas/raku/ch-1.raku b/challenge-247/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..7aefd524f8
--- /dev/null
+++ b/challenge-247/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,63 @@
+#!/usr/bin/raku
+
+my @names1 = (
+ 'Mr. Wall',
+ 'Mrs. Wall',
+ 'Mr. Anwar',
+ 'Mrs. Anwar',
+ 'Mr. Conway',
+ 'Mr. Cross',
+);
+
+my @names2 = (
+ 'Mr. Wall',
+ 'Mrs. Wall',
+ 'Mr. Anwar',
+);
+
+
+sub secretSanta(@list) {
+ my %pairs;
+
+ my @names = @list.pick(*);
+ if @names.elems % 2 { # odd number of participants
+ for 0 .. @names.elems - 2 -> $i {
+ %pairs{@names[$i]} = @names[$i + 1];
+ }
+ %pairs{@names[*-1]} = @names[0];
+
+ } else { # even number of participants
+ while @names.elems {
+ my ($, $surname1) = @names[0].words;
+ my ($, $surname2) = @names[1].words;
+
+ if $surname1 eq $surname2 {
+ @names = @names.pick(*);
+ } else {
+ %pairs{@names[0]} = @names[1];
+ %pairs{@names[1]} = @names[0];
+ splice @names, 0, 2;
+ }
+ }
+ }
+
+ return %pairs;
+}
+
+
+sub MAIN(
+
+) {
+ my %list1 = secretSanta(@names1.List);
+ for %list1.pairs -> $p {
+ say $p.key, ' -> ', $p.value;
+ }
+
+ print "\n";
+
+ my %list2 = secretSanta(@names2.List);
+ for %list2.pairs -> $p {
+ say $p.key, ' -> ', $p.value;
+ }
+
+} \ No newline at end of file
diff --git a/challenge-247/jaldhar-h-vyas/raku/ch-2.raku b/challenge-247/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..773be13984
--- /dev/null
+++ b/challenge-247/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,14 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ Str $s
+) {
+ my @chars = $s.comb;
+ my %pairs;
+
+ for 1 .. @chars.end -> $i {
+ %pairs{(@chars[$i - 1], @chars[$i]).join}++;
+ }
+
+ say %pairs.keys.sort({ %pairs{$^b} <=> %pairs{$^a} || $^a cmp $^b })[0];
+} \ No newline at end of file