aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli <adeadmarshal@gmail.com>2025-07-30 11:05:56 +0330
committerAli <adeadmarshal@gmail.com>2025-07-30 11:05:56 +0330
commit4b7cf462c5ea159866becd61eb82ce9aa2f77320 (patch)
tree75edd82dc75078346c78567326b61ef6ee2e7837
parent1ff2c9796a511d63231d3757acb27e4046a91fb2 (diff)
downloadperlweeklychallenge-club-4b7cf462c5ea159866becd61eb82ce9aa2f77320.tar.gz
perlweeklychallenge-club-4b7cf462c5ea159866becd61eb82ce9aa2f77320.tar.bz2
perlweeklychallenge-club-4b7cf462c5ea159866becd61eb82ce9aa2f77320.zip
TWC331
-rw-r--r--challenge-331/deadmarshal/blog.txt1
-rw-r--r--challenge-331/deadmarshal/java/Ch1.java12
-rw-r--r--challenge-331/deadmarshal/java/Ch2.java27
-rw-r--r--challenge-331/deadmarshal/modula-3/Ch1/src/Ch1.m341
-rw-r--r--challenge-331/deadmarshal/modula-3/Ch1/src/m3makefile4
-rw-r--r--challenge-331/deadmarshal/modula-3/Ch2/src/Ch2.m332
-rw-r--r--challenge-331/deadmarshal/modula-3/Ch2/src/m3makefile4
-rw-r--r--challenge-331/deadmarshal/perl/ch-1.pl12
-rw-r--r--challenge-331/deadmarshal/perl/ch-2.pl19
9 files changed, 152 insertions, 0 deletions
diff --git a/challenge-331/deadmarshal/blog.txt b/challenge-331/deadmarshal/blog.txt
new file mode 100644
index 0000000000..bdbd5a4be3
--- /dev/null
+++ b/challenge-331/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2025/07/twc331.html
diff --git a/challenge-331/deadmarshal/java/Ch1.java b/challenge-331/deadmarshal/java/Ch1.java
new file mode 100644
index 0000000000..23d9fe58f7
--- /dev/null
+++ b/challenge-331/deadmarshal/java/Ch1.java
@@ -0,0 +1,12 @@
+public class Ch1 {
+ public static void main(String[] args) {
+ System.out.println(last_word("The Weekly Challenge"));
+ System.out.println(last_word(" Hello World "));
+ System.out.println(last_word("Let's begin the fun"));
+ }
+
+ private static int last_word(String s) {
+ String[] arr = s.trim().split(" ");
+ return arr[arr.length - 1].length();
+ }
+}
diff --git a/challenge-331/deadmarshal/java/Ch2.java b/challenge-331/deadmarshal/java/Ch2.java
new file mode 100644
index 0000000000..db7b5c136b
--- /dev/null
+++ b/challenge-331/deadmarshal/java/Ch2.java
@@ -0,0 +1,27 @@
+public class Ch2 {
+ public static void main(String[] args) {
+ System.out.println(buddy_strings("fuck", "fcuk"));
+ System.out.println(buddy_strings("love", "love"));
+ System.out.println(buddy_strings("fodo", "food"));
+ System.out.println(buddy_strings("feed", "feed"));
+ }
+
+ private static boolean buddy_strings(String s1, String s2) {
+ if (s1.length() != s2.length()) return false;
+ int diff = 0;
+ int[] count1 = new int[26];
+ int[] count2 = new int[26];
+ for (int i = 0; i < s1.length(); ++i) {
+ int a = s1.charAt(i), b = s2.charAt(i);
+ ++count1[a - 'a'];
+ ++count2[b - 'a'];
+ if (a != b) ++diff;
+ }
+ boolean f = false;
+ for (int i = 0; i < 26; ++i) {
+ if (count1[i] != count2[i]) return false;
+ if (count1[i] > 1) f = true;
+ }
+ return diff == 2 || (diff == 0 && f);
+ }
+}
diff --git a/challenge-331/deadmarshal/modula-3/Ch1/src/Ch1.m3 b/challenge-331/deadmarshal/modula-3/Ch1/src/Ch1.m3
new file mode 100644
index 0000000000..28b7e0c7dc
--- /dev/null
+++ b/challenge-331/deadmarshal/modula-3/Ch1/src/Ch1.m3
@@ -0,0 +1,41 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO,Text,TextConv,ASCII;
+
+PROCEDURE Trim(READONLY Str:TEXT):TEXT =
+ VAR
+ Start:CARDINAL := 0;
+ Stop:CARDINAL := Text.Length(Str);
+ C:CHAR;
+ BEGIN
+ WHILE Start < Stop DO
+ C := Text.GetChar(Str,Start);
+ IF NOT C IN ASCII.Spaces THEN EXIT END;
+ INC(Start)
+ END;
+ WHILE Start < Stop DO
+ C := Text.GetChar(Str,Stop-1);
+ IF NOT C IN ASCII.Spaces THEN EXIT END;
+ DEC(Stop)
+ END;
+ RETURN Text.Sub(Str,Start,Stop-Start)
+ END Trim;
+
+PROCEDURE LastWord(READONLY Str:TEXT):CARDINAL =
+ CONST
+ S = SET OF CHAR{' ', '\t', '\n', '\r', '\f'};
+ VAR
+ Trimmed := Trim(Str);
+ Len := TextConv.ExplodedSize(Trimmed,S);
+ A := NEW(REF ARRAY OF TEXT,Len);
+ BEGIN
+ TextConv.Explode(Trimmed,A^,S);
+ RETURN Text.Length(A[LAST(A^)])
+ END LastWord;
+
+BEGIN
+ SIO.PutInt(LastWord("The Weekly Challenge")); SIO.Nl();
+ SIO.PutInt(LastWord(" Hello World ")); SIO.Nl();
+ SIO.PutInt(LastWord("Let's begin the fun")); SIO.Nl()
+END Ch1.
+
diff --git a/challenge-331/deadmarshal/modula-3/Ch1/src/m3makefile b/challenge-331/deadmarshal/modula-3/Ch1/src/m3makefile
new file mode 100644
index 0000000000..643b33d043
--- /dev/null
+++ b/challenge-331/deadmarshal/modula-3/Ch1/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch1")
+program("Ch1")
diff --git a/challenge-331/deadmarshal/modula-3/Ch2/src/Ch2.m3 b/challenge-331/deadmarshal/modula-3/Ch2/src/Ch2.m3
new file mode 100644
index 0000000000..fe93af35e9
--- /dev/null
+++ b/challenge-331/deadmarshal/modula-3/Ch2/src/Ch2.m3
@@ -0,0 +1,32 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO,Text;
+
+PROCEDURE BuddyStrings(READONLY S1,S2:TEXT):BOOLEAN =
+ VAR
+ Flag := FALSE;
+ Diff:CARDINAL := 0;
+ Count1,Count2 := ARRAY[0..25] OF CARDINAL{0,..};
+ BEGIN
+ IF Text.Length(S1) # Text.Length(S2) THEN RETURN FALSE END;
+ FOR I := 0 TO Text.Length(S1)-1 DO
+ WITH A = Text.GetChar(S1,I),B = Text.GetChar(S2,I) DO
+ INC(Count1[ORD(A)-ORD('a')]);
+ INC(Count2[ORD(B)-ORD('a')]);
+ IF A # B THEN INC(Diff) END
+ END
+ END;
+ FOR I := FIRST(Count1) TO LAST(Count1) DO
+ IF Count1[I] # Count2[I] THEN RETURN FALSE END;
+ IF Count1[I] > 1 THEN Flag := TRUE END
+ END;
+ RETURN Diff = 2 OR Diff = 0 AND Flag
+ END BuddyStrings;
+
+BEGIN
+ SIO.PutBool(BuddyStrings("fuck","fcuk")); SIO.Nl();
+ SIO.PutBool(BuddyStrings("love","love")); SIO.Nl();
+ SIO.PutBool(BuddyStrings("fodo","food")); SIO.Nl();
+ SIO.PutBool(BuddyStrings("feed","feed")); SIO.Nl()
+END Ch2.
+
diff --git a/challenge-331/deadmarshal/modula-3/Ch2/src/m3makefile b/challenge-331/deadmarshal/modula-3/Ch2/src/m3makefile
new file mode 100644
index 0000000000..78802242fe
--- /dev/null
+++ b/challenge-331/deadmarshal/modula-3/Ch2/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch2")
+program("Ch2")
diff --git a/challenge-331/deadmarshal/perl/ch-1.pl b/challenge-331/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..f6fccc6c15
--- /dev/null
+++ b/challenge-331/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub last_word{
+ length((split /\s/,$_[0])[-1])
+}
+
+printf "%d\n",last_word('The Weekly Challenge');
+printf "%d\n",last_word(' Hello World ');
+printf "%d\n",last_word('Let\'s begin the fun');
+
diff --git a/challenge-331/deadmarshal/perl/ch-2.pl b/challenge-331/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..0ffc9903cc
--- /dev/null
+++ b/challenge-331/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::MoreUtils qw(uniq pairwise);
+
+sub buddy_strings{
+ return 0 if length($_[0]) != length($_[1]);
+ my @s1 = split '',$_[0];
+ return 1 if $_[0] eq $_[1] and @s1 > uniq(@s1);
+ my @s2 = split '',$_[1];
+ return 0 if (join('',sort @s1) ne join('',sort @s2));
+ (grep{$_ != 0} (pairwise{$a cmp $b} @s1,@s2)) == 2
+}
+
+printf "%d\n",buddy_strings('fuck','fcuk');
+printf "%d\n",buddy_strings('love','love');
+printf "%d\n",buddy_strings('fodo','food');
+printf "%d\n",buddy_strings('feed','feed');
+