aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Mai <lukasmai.403@gmail.com>2025-07-21 08:52:06 +0200
committerLukas Mai <lukasmai.403@gmail.com>2025-07-21 08:53:49 +0200
commit3cb2ce975524b9c6bfd18c3aa2f5061d32493f70 (patch)
tree0145911105668b486d3ed85119be5e4e351196c8
parente0f7e800fc8f1b2cb50896852a0a3ed61980f510 (diff)
downloadperlweeklychallenge-club-3cb2ce975524b9c6bfd18c3aa2f5061d32493f70.tar.gz
perlweeklychallenge-club-3cb2ce975524b9c6bfd18c3aa2f5061d32493f70.tar.bz2
perlweeklychallenge-club-3cb2ce975524b9c6bfd18c3aa2f5061d32493f70.zip
add perl solutions for 331
-rw-r--r--challenge-331/mauke/perl/ch-1.pl2
-rw-r--r--challenge-331/mauke/perl/ch-2.pl28
2 files changed, 30 insertions, 0 deletions
diff --git a/challenge-331/mauke/perl/ch-1.pl b/challenge-331/mauke/perl/ch-1.pl
new file mode 100644
index 0000000000..fe86ad9f42
--- /dev/null
+++ b/challenge-331/mauke/perl/ch-1.pl
@@ -0,0 +1,2 @@
+#!/usr/bin/env -S perl -lp
+$_=/\b(\w+)\W*\z/?length$1:0
diff --git a/challenge-331/mauke/perl/ch-2.pl b/challenge-331/mauke/perl/ch-2.pl
new file mode 100644
index 0000000000..afde7757b1
--- /dev/null
+++ b/challenge-331/mauke/perl/ch-2.pl
@@ -0,0 +1,28 @@
+use v5.40;
+
+sub has_duplicate_chars($string) {
+ my %seen;
+ for my $c (split //, $string) {
+ return true
+ if $seen{$c}++;
+ }
+ false
+}
+
+sub are_buddies($source, $target) {
+ my $delta = $source ^. $target;
+ $delta =~ /[^\0]/g
+ or return has_duplicate_chars($source);
+ my $p1 = $-[0];
+ $delta =~ /[^\0]/g
+ or return false;
+ my $p2 = $-[0];
+ return substr($source, $p1, 1) eq substr($target, $p2, 1)
+ && substr($source, $p2, 1) eq substr($target, $p1, 1)
+ && scalar($delta !~ /[^\0]/g);
+}
+
+@ARGV == 2
+ or die "Usage: $0 SOURCE TARGET\n";
+my ($fst, $snd) = @ARGV;
+say are_buddies($fst, $snd) ? 'true' : 'false';