aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeadmarshal <adeadmarshal@gmail.com>2024-07-22 16:32:56 +0330
committerdeadmarshal <adeadmarshal@gmail.com>2024-07-22 16:32:56 +0330
commit91d8796de5dfd9cb380e2d2a642e9c93059fa8ff (patch)
treeff68c05918d5a7b25804fb8ae6d3a5fd6cb40ad2
parent7cc71a882e416db99d281ec66b276be1d0acc481 (diff)
downloadperlweeklychallenge-club-91d8796de5dfd9cb380e2d2a642e9c93059fa8ff.tar.gz
perlweeklychallenge-club-91d8796de5dfd9cb380e2d2a642e9c93059fa8ff.tar.bz2
perlweeklychallenge-club-91d8796de5dfd9cb380e2d2a642e9c93059fa8ff.zip
TWC279
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/Ch1.m343
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/Pair.ig20
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/Pair.mg48
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/m3makefile11
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.i31
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.m31
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.i31
-rw-r--r--challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.m31
-rw-r--r--challenge-279/deadmarshal/modula-3/ch2/src/Ch2.m321
-rw-r--r--challenge-279/deadmarshal/modula-3/ch2/src/m3makefile5
-rw-r--r--challenge-279/deadmarshal/perl/ch-1.pl14
-rw-r--r--challenge-279/deadmarshal/perl/ch-2.pl12
-rw-r--r--challenge-279/deadmarshal/python/ch1.py10
-rw-r--r--challenge-279/deadmarshal/python/ch2.py10
-rw-r--r--challenge-279/deadmarshal/raku/ch-1.raku12
-rw-r--r--challenge-279/deadmarshal/raku/ch-2.raku11
-rw-r--r--challenge-279/deadmarshal/ruby/ch1.rb11
-rw-r--r--challenge-279/deadmarshal/ruby/ch2.rb10
18 files changed, 242 insertions, 0 deletions
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-279/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..eb9c9146ea
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,43 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO,Integer,Text;
+IMPORT CharIntPair,CharIntPairArraySort;
+
+VAR
+ L1:ARRAY[0..3] OF CHAR := ARRAY OF CHAR{'R','E','P','L'};
+ W1:ARRAY[0..3] OF CARDINAL := ARRAY OF CARDINAL{3,2,1,4};
+ L2:ARRAY[0..3] OF CHAR := ARRAY OF CHAR{'A','U','R','K'};
+ W2:ARRAY[0..3] OF CARDINAL := ARRAY OF CARDINAL{2,4,1,3};
+ L3:ARRAY[0..5] OF CHAR := ARRAY OF CHAR{'O','H','Y','N','P','T'};
+ W3:ARRAY[0..5] OF CARDINAL := ARRAY OF CARDINAL{5,4,2,6,1,3};
+
+PROCEDURE Compare(READONLY a,b:CharIntPair.T):[-1..1] =
+ BEGIN
+ RETURN Integer.Compare(CharIntPair.Second(a),
+ CharIntPair.Second(b))
+ END Compare;
+
+PROCEDURE SortLetters(READONLY L:ARRAY OF CHAR;
+ READONLY W:ARRAY OF CARDINAL):TEXT =
+ VAR
+ A:REF ARRAY OF CharIntPair.T :=
+ NEW(REF ARRAY OF CharIntPair.T,NUMBER(L));
+ Sorted:REF ARRAY OF CHAR :=
+ NEW(REF ARRAY OF CHAR,NUMBER(L));
+ BEGIN
+ FOR I := FIRST(L) TO LAST(L) DO
+ A[I] := CharIntPair.Create(L[I],W[I])
+ END;
+ CharIntPairArraySort.Sort(A^,Compare);
+ FOR I := FIRST(A^) TO LAST(A^) DO
+ Sorted[I] := CharIntPair.First(A[I])
+ END;
+ RETURN Text.FromChars(Sorted^)
+ END SortLetters;
+
+BEGIN
+ SIO.PutText(SortLetters(L1,W1)); SIO.Nl();
+ SIO.PutText(SortLetters(L2,W2)); SIO.Nl();
+ SIO.PutText(SortLetters(L3,W3)); SIO.Nl()
+END Ch1.
+
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/Pair.ig b/challenge-279/deadmarshal/modula-3/ch1/src/Pair.ig
new file mode 100644
index 0000000000..1f0e017c4f
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/Pair.ig
@@ -0,0 +1,20 @@
+GENERIC INTERFACE Pair(E1,E2);
+
+IMPORT Word;
+
+CONST
+ Brand = "Pair(" & E1.Brand & "," & E2.Brand & ")";
+
+TYPE
+ T <: REFANY;
+
+PROCEDURE Create(READONLY First:E1.T;
+ READONLY Second:E2.T):T;
+PROCEDURE Equal(READONLY a,b:T):BOOLEAN;
+PROCEDURE Hash(READONLY a:T):Word.T;
+PROCEDURE Compare(READONLY a,b:T):[-1..1];
+PROCEDURE First(READONLY Pair:T):E1.T;
+PROCEDURE Second(READONLY Pair:T):E2.T;
+
+END Pair.
+
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/Pair.mg b/challenge-279/deadmarshal/modula-3/ch1/src/Pair.mg
new file mode 100644
index 0000000000..5a9049cbc2
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/Pair.mg
@@ -0,0 +1,48 @@
+GENERIC MODULE Pair(E1,E2);
+
+IMPORT Word;
+
+REVEAL T = BRANDED REF RECORD
+ First:E1.T;
+ Second:E2.T;
+END;
+
+PROCEDURE Create(READONLY First:E1.T;
+ READONLY Second:E2.T):T =
+ BEGIN
+ RETURN NEW(T,First := First,Second := Second)
+ END Create;
+
+PROCEDURE First(READONLY Pair:T):E1.T =
+ BEGIN
+ RETURN Pair.First
+ END First;
+
+PROCEDURE Second(READONLY Pair:T):E2.T =
+ BEGIN
+ RETURN Pair.Second
+ END Second;
+
+PROCEDURE Equal(READONLY a,b:T):BOOLEAN =
+ BEGIN
+ RETURN E1.Equal(a.First,b.First) AND E2.Equal(a.Second,b.Second)
+ END Equal;
+
+PROCEDURE Hash(READONLY a:T):Word.T =
+ BEGIN
+ RETURN E1.Hash(a.First)
+ END Hash;
+
+PROCEDURE Compare(READONLY a,b:T):[-1..1] =
+BEGIN
+ IF E1.Compare(a.First,b.First) < 0 AND
+ E2.Compare(a.Second,b.Second) < 0 THEN RETURN -1
+ ELSIF E1.Compare(a.First,b.First) > 0 AND
+ E2.Compare(a.Second,b.Second) > 0 THEN RETURN 1
+ ELSE RETURN 0
+ END;
+ END Compare;
+
+BEGIN
+END Pair.
+
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-279/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..eb2e2cdc49
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,11 @@
+import("libm3")
+import("libsio")
+
+generic_module("Pair")
+
+module("specializations/CharIntPair")
+module("specializations/CharIntPairArraySort")
+
+implementation("Ch1")
+program("ch1")
+
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.i3 b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.i3
new file mode 100644
index 0000000000..defdf60b57
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.i3
@@ -0,0 +1 @@
+INTERFACE CharIntPair = Pair(Char,Integer) END CharIntPair.
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.m3 b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.m3
new file mode 100644
index 0000000000..005acc8c3c
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPair.m3
@@ -0,0 +1 @@
+MODULE CharIntPair = Pair(Char,Integer) END CharIntPair.
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.i3 b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.i3
new file mode 100644
index 0000000000..43a4e0835c
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.i3
@@ -0,0 +1 @@
+INTERFACE CharIntPairArraySort = ArraySort(CharIntPair) END CharIntPairArraySort.
diff --git a/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.m3 b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.m3
new file mode 100644
index 0000000000..9a48680a10
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch1/src/specializations/CharIntPairArraySort.m3
@@ -0,0 +1 @@
+MODULE CharIntPairArraySort = ArraySort(CharIntPair) END CharIntPairArraySort.
diff --git a/challenge-279/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-279/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..467f03c5ae
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,21 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO,Text;
+
+PROCEDURE SplitString(READONLY t:TEXT):BOOLEAN =
+ VAR Count:CARDINAL := 0;
+ BEGIN
+ FOR I := 0 TO Text.Length(t)-1 DO
+ IF Text.GetChar(t,I) IN SET OF CHAR{'a','e','i','o','u'} THEN
+ INC(Count)
+ END
+ END;
+ RETURN Count MOD 2 = 0
+ END SplitString;
+
+BEGIN
+ SIO.PutBool(SplitString("perl")); SIO.Nl();
+ SIO.PutBool(SplitString("book")); SIO.Nl();
+ SIO.PutBool(SplitString("good morning")); SIO.Nl()
+END Ch2.
+
diff --git a/challenge-279/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-279/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..798c627ef3
--- /dev/null
+++ b/challenge-279/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,5 @@
+import("libm3")
+import("libsio")
+implementation("Ch2")
+program("ch2")
+
diff --git a/challenge-279/deadmarshal/perl/ch-1.pl b/challenge-279/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..5b1e0b8b4b
--- /dev/null
+++ b/challenge-279/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::Util qw(zip);
+
+sub sort_letters{
+ my %h = map {$_->[0] => $_->[1]} zip $_[0],$_[1];
+ join '',sort{$h{$a} <=> $h{$b}} keys %h
+}
+
+printf "%s\n",sort_letters(['R','E','P','L'],[3,2,1,4]);
+printf "%s\n",sort_letters(['A','U','R','K'],[2,4,1,3]);
+printf "%s\n",sort_letters(['O','H','Y','N','P','T'],[5,4,2,6,1,3]);
+
diff --git a/challenge-279/deadmarshal/perl/ch-2.pl b/challenge-279/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..f3f945081e
--- /dev/null
+++ b/challenge-279/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub split_string{
+ $_[0] =~ tr/aeiouy// % 2 == 0
+}
+
+printf "%d\n",split_string('perl');
+printf "%d\n",split_string('book');
+printf "%d\n",split_string('good morning');
+
diff --git a/challenge-279/deadmarshal/python/ch1.py b/challenge-279/deadmarshal/python/ch1.py
new file mode 100644
index 0000000000..f1125f2bcb
--- /dev/null
+++ b/challenge-279/deadmarshal/python/ch1.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+
+def sort_letters(letters,weights):
+ d = dict(zip(letters,weights))
+ return ''.join(sorted(d.keys(),key=lambda k: d[k]))
+
+print(sort_letters(['R','E','P','L'],[3,2,1,4]))
+print(sort_letters(['A','U','R','K'],[2,4,1,3]))
+print(sort_letters(['O','H','Y','N','P','T'],[5,4,2,6,1,3]))
+
diff --git a/challenge-279/deadmarshal/python/ch2.py b/challenge-279/deadmarshal/python/ch2.py
new file mode 100644
index 0000000000..915438046e
--- /dev/null
+++ b/challenge-279/deadmarshal/python/ch2.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+
+def split_string(s):
+ vowels = 'aeiouAEIOU'
+ return sum(s.count(v) for v in vowels) % 2 == 0
+
+print(split_string('perl'))
+print(split_string('book'))
+print(split_string('good morning'))
+
diff --git a/challenge-279/deadmarshal/raku/ch-1.raku b/challenge-279/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..be130856e0
--- /dev/null
+++ b/challenge-279/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,12 @@
+#!/usr/bin/env raku
+
+sub sort-letters(@letters,@weights)
+{
+ my %h = @letters Z=> @weights;
+ %h.sort(*.value)>>.keys.join('')
+}
+
+say sort-letters(['R','E','P','L'],[3,2,1,4]);
+say sort-letters(['A','U','R','K'],[2,4,1,3]);
+say sort-letters(['O','H','Y','N','P','T'],[5,4,2,6,1,3]);
+
diff --git a/challenge-279/deadmarshal/raku/ch-2.raku b/challenge-279/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..58fa466255
--- /dev/null
+++ b/challenge-279/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,11 @@
+#!/usr/bin/env raku
+
+sub split-string($str)
+{
+ $str.lc.comb(/<[aeiou]>/).elems %% 2
+}
+
+say split-string('perl');
+say split-string('book');
+say split-string('good morning');
+
diff --git a/challenge-279/deadmarshal/ruby/ch1.rb b/challenge-279/deadmarshal/ruby/ch1.rb
new file mode 100644
index 0000000000..db943b0d1e
--- /dev/null
+++ b/challenge-279/deadmarshal/ruby/ch1.rb
@@ -0,0 +1,11 @@
+#!/usr/bin/env ruby
+
+def sort_letters(letters, numbers)
+ h = Hash[letters.zip(numbers)]
+ letters.sort_by{|k| h[k]}.join('')
+end
+
+puts sort_letters(['R','E','P','L'],[3,2,1,4])
+puts sort_letters(['A','U','R','K'],[2,4,1,3])
+puts sort_letters(['O','H','Y','N','P','T'],[5,4,2,6,1,3])
+
diff --git a/challenge-279/deadmarshal/ruby/ch2.rb b/challenge-279/deadmarshal/ruby/ch2.rb
new file mode 100644
index 0000000000..896128f2ec
--- /dev/null
+++ b/challenge-279/deadmarshal/ruby/ch2.rb
@@ -0,0 +1,10 @@
+#!/usr/bin/env ruby
+
+def split_string(str)
+ str.count('aeiouy') % 2 == 0
+end
+
+puts split_string('perl')
+puts split_string('book')
+puts split_string('good morning')
+