aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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';