aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-01-22 09:44:01 +0000
committerGitHub <noreply@github.com>2025-01-22 09:44:01 +0000
commitcf1c6f4dc1d22d9cf4b40df561d9c8231169b858 (patch)
treeb68ef9e223644ba3a35653bca2e2b086b84413bc
parent24d59f1e00bccc06340c6a6fcbf7862221530080 (diff)
parent134096a0a3865ae0a96fadfcd602f0ed780f5f22 (diff)
downloadperlweeklychallenge-club-cf1c6f4dc1d22d9cf4b40df561d9c8231169b858.tar.gz
perlweeklychallenge-club-cf1c6f4dc1d22d9cf4b40df561d9c8231169b858.tar.bz2
perlweeklychallenge-club-cf1c6f4dc1d22d9cf4b40df561d9c8231169b858.zip
Merge pull request #11479 from deadmarshal/TWC305
TWC305
-rw-r--r--challenge-305/deadmarshal/blog.txt1
-rw-r--r--challenge-305/deadmarshal/java/Ch1.java30
-rw-r--r--challenge-305/deadmarshal/java/Ch2.java36
-rw-r--r--challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m356
-rw-r--r--challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile6
-rw-r--r--challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m349
-rw-r--r--challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile4
-rw-r--r--challenge-305/deadmarshal/perl/ch-1.pl17
-rw-r--r--challenge-305/deadmarshal/perl/ch-2.pl17
9 files changed, 216 insertions, 0 deletions
diff --git a/challenge-305/deadmarshal/blog.txt b/challenge-305/deadmarshal/blog.txt
new file mode 100644
index 0000000000..03e9b594b1
--- /dev/null
+++ b/challenge-305/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2025/01/twc305.html
diff --git a/challenge-305/deadmarshal/java/Ch1.java b/challenge-305/deadmarshal/java/Ch1.java
new file mode 100644
index 0000000000..31a92f703c
--- /dev/null
+++ b/challenge-305/deadmarshal/java/Ch1.java
@@ -0,0 +1,30 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Ch1 {
+ public static void main(String[] args) {
+ System.out.println(binary_prefix(new int[]{1, 0, 1}));
+ System.out.println(binary_prefix(new int[]{1, 1, 0}));
+ System.out.println(binary_prefix(
+ new int[]{1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1}));
+ }
+
+ private static boolean is_prime(int n) {
+ if (n <= 1) return false;
+ if ((n == 2) || (n == 3)) return true;
+ if ((n % 2 == 0) || (n % 3 == 0)) return false;
+ for (int i = 5; i < Math.sqrt(n); i += 6)
+ if ((n % i == 0) || (n % (i + 2) == 0)) return false;
+ return true;
+ }
+
+ private static List<Boolean> binary_prefix(int[] arr) {
+ StringBuilder sb = new StringBuilder();
+ List<Boolean> ret = new ArrayList<>();
+ for (int i = 0; i < arr.length; ++i) {
+ sb.append(arr[i]);
+ ret.add(is_prime(Integer.parseInt(sb.toString(), 2)));
+ }
+ return ret;
+ }
+}
diff --git a/challenge-305/deadmarshal/java/Ch2.java b/challenge-305/deadmarshal/java/Ch2.java
new file mode 100644
index 0000000000..5268988edd
--- /dev/null
+++ b/challenge-305/deadmarshal/java/Ch2.java
@@ -0,0 +1,36 @@
+import java.util.Arrays;
+import java.util.Comparator;
+
+public class Ch2 {
+ public static void main(String[] args) {
+ String[] arr1 = new String[]{"perl", "python", "raku"};
+ String[] arr2 = new String[]{"the", "weekly", "challenge"};
+ char[] c1 =
+ new char[]{'h', 'l', 'a', 'b', 'y', 'd', 'e', 'f', 'g', 'i', 'r', 'k',
+ 'm', 'n', 'o', 'p', 'q', 'j', 's', 't', 'u', 'v', 'w', 'x', 'c', 'z'};
+ char[] c2 =
+ new char[]{'c', 'o', 'r', 'l', 'd', 'a', 'b', 't', 'e', 'f', 'g', 'h',
+ 'i', 'j', 'k', 'm', 'n', 'p', 'q', 's', 'w', 'u', 'v', 'x', 'y', 'z'};
+ alien_dictionary(arr1, c1);
+ alien_dictionary(arr2, c2);
+ System.out.println(Arrays.toString(arr1));
+ System.out.println(Arrays.toString(arr2));
+ }
+
+ private static void alien_dictionary(String[] words, char[] alien_chars) {
+ String alienstr = String.valueOf(alien_chars);
+ Arrays.sort(words, new Comparator<String>() {
+ @Override
+ public int compare(String o1, String o2) {
+ return translate(o1, alienstr).compareTo(translate(o2, alienstr));
+ }
+ });
+ }
+
+ private static String translate(String str, String alien) {
+ char[] ret = new char[str.length()];
+ for (int i = 0; i < str.length(); ++i)
+ ret[i] = alien.charAt(str.charAt(i) - 'a');
+ return String.valueOf(ret);
+ }
+}
diff --git a/challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3 b/challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3
new file mode 100644
index 0000000000..a8b002c688
--- /dev/null
+++ b/challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3
@@ -0,0 +1,56 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO,Math,Fmt,Scan,BoolSeq;
+IMPORT FloatMode,Lex,StableError;
+
+VAR
+ A1 := ARRAY[0..2] OF INTEGER{1,0,1};
+ A2 := ARRAY[0..2] OF INTEGER{1,1,0};
+ A3 := ARRAY[0..19] OF INTEGER{1,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1};
+
+PROCEDURE IsPrime(READONLY N:INTEGER):BOOLEAN =
+ BEGIN
+ IF N <= 1 THEN RETURN FALSE END;
+ IF N = 2 OR N = 3 THEN RETURN TRUE END;
+ IF N MOD 2 = 0 OR N MOD 3 = 0 THEN RETURN FALSE END;
+ FOR I := 5 TO FLOOR(Math.sqrt(FLOAT(N,LONGREAL))) BY 6 DO
+ IF N MOD I = 0 OR N MOD (I+2) = 0 THEN RETURN FALSE END
+ END;
+ RETURN TRUE
+ END IsPrime;
+
+PROCEDURE BinaryPrefix(VAR A:ARRAY OF INTEGER):BoolSeq.T
+ RAISES{FloatMode.Trap,Lex.Error} =
+ VAR
+ Bin:TEXT := "";
+ Ret := NEW(BoolSeq.T).init();
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ Bin := Bin & Fmt.Int(A[I]);
+ Ret.addhi(IsPrime(Scan.Int(Bin,2)))
+ END;
+ RETURN Ret
+ END BinaryPrefix;
+
+PROCEDURE PrintSeq(READONLY S:BoolSeq.T) =
+ BEGIN
+ FOR I := 0 TO S.size()-1 DO
+ SIO.PutBool(S.get(I));
+ SIO.PutChar(' ')
+ END;
+ SIO.Nl()
+ END PrintSeq;
+
+BEGIN
+ TRY
+ PrintSeq(BinaryPrefix(A1));
+ PrintSeq(BinaryPrefix(A2));
+ PrintSeq(BinaryPrefix(A3))
+ EXCEPT
+ FloatMode.Trap => StableError.Halt("FloatMode.Trap exception occurred!")
+ | Lex.Error => StableError.Halt("Lex.Error exception occurred!")
+ ELSE
+ StableError.Halt("Some other exception occurred!")
+ END;
+END Ch1.
+
diff --git a/challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile b/challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile
new file mode 100644
index 0000000000..31334692ec
--- /dev/null
+++ b/challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile
@@ -0,0 +1,6 @@
+import("libm3")
+import("libsio")
+import("stable")
+sequence("Bool","Boolean")
+implementation("Ch1")
+program("Ch1")
diff --git a/challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3 b/challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3
new file mode 100644
index 0000000000..594e22c606
--- /dev/null
+++ b/challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3
@@ -0,0 +1,49 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO,Text,TextArraySort;
+
+VAR
+ A1 := ARRAY[0..2] OF TEXT{"perl","python","raku"};
+ A2 := ARRAY[0..2] OF TEXT{"the","weekly","challenge"};
+ C1 := ARRAY[0..25] OF CHAR{'h','l','a','b','y','d','e','f','g','i',
+ 'r','k','m','n','o','p','q','j','s','t',
+ 'u','v','w','x','c','z'};
+ C2 := ARRAY[0..25] OF CHAR{'c','o','r','l','d','a','b','t','e','f',
+ 'g','h','i','j','k','m','n','p','q','s',
+ 'w','u','v','x','y','z'};
+
+PROCEDURE AlienDictionary(VAR A:ARRAY OF TEXT;
+ VAR Alien:ARRAY OF CHAR) =
+ PROCEDURE Translate(READONLY Str:TEXT;
+ VAR Alien:ARRAY OF CHAR):TEXT =
+ VAR Ret := NEW(REF ARRAY OF CHAR,Text.Length(Str));
+ BEGIN
+ FOR I := 0 TO Text.Length(Str)-1 DO
+ Ret[I] := Alien[ORD(Text.GetChar(Str,I)) - ORD('a')]
+ END;
+ RETURN Text.FromChars(Ret^)
+ END Translate;
+ PROCEDURE Compare(A,B:TEXT):[-1..1] =
+ BEGIN
+ RETURN Text.Compare(Translate(A,Alien),Translate(B,Alien))
+ END Compare;
+ BEGIN
+ TextArraySort.Sort(A,Compare)
+ END AlienDictionary;
+
+PROCEDURE PrintArray(VAR A:ARRAY OF TEXT) =
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ SIO.PutText(A[I]);
+ SIO.PutChar(' ')
+ END;
+ SIO.Nl()
+ END PrintArray;
+
+BEGIN
+ AlienDictionary(A1,C1);
+ AlienDictionary(A2,C2);
+ PrintArray(A1);
+ PrintArray(A2)
+END Ch2.
+
diff --git a/challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile b/challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile
new file mode 100644
index 0000000000..78802242fe
--- /dev/null
+++ b/challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch2")
+program("Ch2")
diff --git a/challenge-305/deadmarshal/perl/ch-1.pl b/challenge-305/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..b4f450ed33
--- /dev/null
+++ b/challenge-305/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Math::Prime::Util qw(is_prime);
+use Data::Show;
+
+sub binary_prefix{
+ my ($arr) = @_;
+ my ($bin,@res) = ('');
+ map{$bin .= $_; push @res,is_prime(oct("0b$bin")) ? 1 : 0} @$arr;
+ @res
+}
+
+print show binary_prefix([1,0,1]);
+print show binary_prefix([1,1,0]);
+print show binary_prefix([1,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1]);
+
diff --git a/challenge-305/deadmarshal/perl/ch-2.pl b/challenge-305/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..40f167f7e9
--- /dev/null
+++ b/challenge-305/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Data::Show;
+
+sub alien_dictionary{
+ my ($words,$alien) = @_;
+ my $r = join '',@$alien;
+ sort{eval "\$a =~ tr/a-z/$r/r" cmp
+ eval "\$b =~ tr/a-z/$r/r"} @$words
+}
+
+print show alien_dictionary(['perl','python','raku'],
+ [qw/h l a b y d e f g i r k m n o p q j s t u v w x c z/]);
+print show alien_dictionary(['the','weekly','challenge'],
+ [qw/c o r l d a b t e f g h i j k m n p q s w u v x y z/]);
+