diff options
| author | deadmarshal <adeadmarshal@gmail.com> | 2024-07-22 16:32:56 +0330 |
|---|---|---|
| committer | deadmarshal <adeadmarshal@gmail.com> | 2024-07-22 16:32:56 +0330 |
| commit | 91d8796de5dfd9cb380e2d2a642e9c93059fa8ff (patch) | |
| tree | ff68c05918d5a7b25804fb8ae6d3a5fd6cb40ad2 | |
| parent | 7cc71a882e416db99d281ec66b276be1d0acc481 (diff) | |
| download | perlweeklychallenge-club-91d8796de5dfd9cb380e2d2a642e9c93059fa8ff.tar.gz perlweeklychallenge-club-91d8796de5dfd9cb380e2d2a642e9c93059fa8ff.tar.bz2 perlweeklychallenge-club-91d8796de5dfd9cb380e2d2a642e9c93059fa8ff.zip | |
TWC279
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') + |
