aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-05-28 10:40:04 +0100
committerGitHub <noreply@github.com>2024-05-28 10:40:04 +0100
commit9d9ab993cf4822e4c5210eae0552cec775c48ef5 (patch)
tree6b55e2cfa652535ce8246a9874bb87ce01ac5245
parente6ae176ee1951c5871249e0e0c4f1a6f6e5d95af (diff)
parenta41401173d5365ab6bd76f07bbcd81c3198301a4 (diff)
downloadperlweeklychallenge-club-9d9ab993cf4822e4c5210eae0552cec775c48ef5.tar.gz
perlweeklychallenge-club-9d9ab993cf4822e4c5210eae0552cec775c48ef5.tar.bz2
perlweeklychallenge-club-9d9ab993cf4822e4c5210eae0552cec775c48ef5.zip
Merge pull request #10173 from deadmarshal/TWC271
TWC271
-rw-r--r--challenge-271/deadmarshal/blog.txt1
-rw-r--r--challenge-271/deadmarshal/lua/ch-1.lua23
-rw-r--r--challenge-271/deadmarshal/lua/ch-2.lua32
-rw-r--r--challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m338
-rw-r--r--challenge-271/deadmarshal/modula-3/ch1/src/m3makefile5
-rw-r--r--challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m350
-rw-r--r--challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i32
-rw-r--r--challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m32
-rw-r--r--challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig10
-rw-r--r--challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg33
-rw-r--r--challenge-271/deadmarshal/modula-3/ch2/src/m3makefile9
-rw-r--r--challenge-271/deadmarshal/perl/ch-1.pl15
-rw-r--r--challenge-271/deadmarshal/perl/ch-2.pl13
-rw-r--r--challenge-271/deadmarshal/raku/ch-1.raku16
-rw-r--r--challenge-271/deadmarshal/raku/ch-2.raku15
-rw-r--r--challenge-271/deadmarshal/ruby/ch1.rb12
-rw-r--r--challenge-271/deadmarshal/ruby/ch2.rb13
17 files changed, 289 insertions, 0 deletions
diff --git a/challenge-271/deadmarshal/blog.txt b/challenge-271/deadmarshal/blog.txt
new file mode 100644
index 0000000000..bab013fdfb
--- /dev/null
+++ b/challenge-271/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2024/05/twc271.html
diff --git a/challenge-271/deadmarshal/lua/ch-1.lua b/challenge-271/deadmarshal/lua/ch-1.lua
new file mode 100644
index 0000000000..159d148473
--- /dev/null
+++ b/challenge-271/deadmarshal/lua/ch-1.lua
@@ -0,0 +1,23 @@
+#!/usr/bin/env lua
+
+local function sum(t)
+ assert(type(t) == 'table','t must be a table!')
+ local s = 0
+ for i=1,#t do s = s + t[i] end
+ return s
+end
+
+local function maximum_ones(t)
+ assert(type(t) == 'table','t must be a table!')
+ local max = 0
+ for i=1,#t do
+ local s = sum(t[i])
+ if s > max then max = s end
+ end
+ return max
+end
+
+print(maximum_ones{{0,1},{1,0}})
+print(maximum_ones{{0,0,0},{1,0,1}})
+print(maximum_ones{{0,0},{1,1},{0,0}})
+
diff --git a/challenge-271/deadmarshal/lua/ch-2.lua b/challenge-271/deadmarshal/lua/ch-2.lua
new file mode 100644
index 0000000000..ee051c1084
--- /dev/null
+++ b/challenge-271/deadmarshal/lua/ch-2.lua
@@ -0,0 +1,32 @@
+#!/usr/bin/env lua
+
+local function decimal_to_binary(n)
+ assert(type(n) == 'number','n must be a number!')
+ local bin = ""
+ while n > 0 do
+ bin = (n % 2) .. bin
+ n = n // 2
+ end
+ return bin
+end
+
+local function pop_count(n)
+ assert(type(n) == 'number','n must be a number!')
+ local bin, count = decimal_to_binary(n),0
+ for pos=1,#bin do
+ if bin:sub(pos,pos) == "1" then count = count + 1 end
+ end
+ return count
+end
+
+local function sort_by_one_bits(t)
+ assert(type(t) == 'table','t must be a table!')
+ table.sort(t,function(a,b)
+ local pa,pb = pop_count(a),pop_count(b)
+ return pa == pb and a < b or pa < pb end)
+ return t
+end
+
+print(table.unpack(sort_by_one_bits{0,1,2,3,4,5,6,7,8}))
+print(table.unpack(sort_by_one_bits{1024,512,256,128,64}))
+
diff --git a/challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..0a143d0948
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,38 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO;
+
+VAR
+ A1:ARRAY[0..1],[0..1] OF CARDINAL := ARRAY[0..1],[0..1] OF CARDINAL{
+ ARRAY[0..1] OF CARDINAL{0,1},
+ ARRAY[0..1] OF CARDINAL{1,0}};
+ A2:ARRAY[0..1],[0..2] OF CARDINAL := ARRAY[0..1],[0..2] OF CARDINAL{
+ ARRAY[0..2] OF CARDINAL{0,..},
+ ARRAY[0..2] OF CARDINAL{1,0,1}};
+ A3:ARRAY[0..2],[0..1] OF CARDINAL := ARRAY[0..2],[0..1] OF CARDINAL{
+ ARRAY[0..1] OF CARDINAL{0,..},
+ ARRAY[0..1] OF CARDINAL{1,1},
+ ARRAY[0..1] OF CARDINAL{0,..}};
+
+PROCEDURE MaximumOnes(VAR A:ARRAY OF ARRAY OF CARDINAL):CARDINAL =
+ VAR Max,Count:CARDINAL := 0;
+ PROCEDURE ArraySum(VAR A:ARRAY OF CARDINAL):CARDINAL =
+ VAR Sum:CARDINAL := 0;
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO INC(Sum,A[I]) END;
+ RETURN Sum
+ END ArraySum;
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ Count := ArraySum(A[I]);
+ IF Count > Max THEN Max := I+1 END
+ END;
+ RETURN Max
+ END MaximumOnes;
+
+BEGIN
+ SIO.PutInt(MaximumOnes(A1)); SIO.Nl();
+ SIO.PutInt(MaximumOnes(A2)); SIO.Nl();
+ SIO.PutInt(MaximumOnes(A3)); SIO.Nl();
+END Ch1.
+
diff --git a/challenge-271/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-271/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..9f66e4a51f
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,5 @@
+import("libm3")
+import("libsio")
+implementation("Ch1")
+program("ch1")
+
diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..6828b5d647
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,50 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO,Fmt,Text,Integer,IntSorting;
+
+VAR
+ A1:ARRAY[0..8] OF INTEGER := ARRAY[0..8] OF INTEGER{0,1,2,3,4,5,6,7,8};
+ A2:ARRAY[0..4] OF INTEGER := ARRAY[0..4] OF INTEGER{1024,512,256,128,64};
+
+PROCEDURE PopCount(READONLY N:INTEGER):INTEGER =
+ VAR
+ Temp:TEXT := Fmt.Int(N,2);
+ Count:INTEGER := 0;
+ BEGIN
+ FOR I := 0 TO Text.Length(Temp)-1 DO
+ IF Text.GetChar(Temp,I) = '1' THEN INC(Count) END
+ END;
+ RETURN Count
+ END PopCount;
+
+PROCEDURE Compare(READONLY a,b:INTEGER):[-1..1] =
+ VAR
+ Pa,Pb:INTEGER;
+ BEGIN
+ Pa := PopCount(a);
+ Pb := PopCount(b);
+ IF Pa = Pb THEN RETURN Integer.Compare(a,b) END;
+ RETURN Integer.Compare(Pa,Pb);
+ END Compare;
+
+PROCEDURE SortByBits(VAR A:ARRAY OF INTEGER) =
+ BEGIN
+ IntSorting.QuickSort(A,FIRST(A),LAST(A),Compare)
+ END SortByBits;
+
+PROCEDURE PrintArray(VAR A:ARRAY OF INTEGER) =
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ SIO.PutInt(A[I]);
+ SIO.PutChar(' ')
+ END;
+ SIO.Nl()
+ END PrintArray;
+
+BEGIN
+ SortByBits(A1);
+ SortByBits(A2);
+ PrintArray(A1);
+ PrintArray(A2)
+END Ch2.
+
diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3 b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3
new file mode 100644
index 0000000000..4f2c039f64
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3
@@ -0,0 +1,2 @@
+INTERFACE IntSorting = Sorting(Integer) END IntSorting.
+
diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3 b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3
new file mode 100644
index 0000000000..1d70cff8ee
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3
@@ -0,0 +1,2 @@
+MODULE IntSorting = Sorting(Integer) END IntSorting.
+
diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig
new file mode 100644
index 0000000000..a33044f351
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig
@@ -0,0 +1,10 @@
+GENERIC INTERFACE Sorting(Elem);
+
+TYPE
+ CompareProc = PROCEDURE(READONLY a,b:Elem.T):[-1..1];
+
+PROCEDURE QuickSort(VAR A:ARRAY OF Elem.T;
+ READONLY Left,Right:INTEGER;
+ Proc:CompareProc);
+
+END Sorting.
diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg
new file mode 100644
index 0000000000..36904491d0
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg
@@ -0,0 +1,33 @@
+GENERIC MODULE Sorting(Elem);
+
+PROCEDURE Swap(VAR A,B:Elem.T) =
+ VAR Temp:Elem.T := A;
+ BEGIN
+ A := B;
+ B := Temp
+ END Swap;
+
+PROCEDURE QuickSort(VAR A:ARRAY OF Elem.T;
+ READONLY Left,Right:INTEGER;
+ Proc:CompareProc) =
+ VAR
+ I,J:INTEGER;
+ Pivot:Elem.T;
+ BEGIN
+ I := Left; J := Right;
+ Pivot := A[(Left+Right) DIV 2];
+ REPEAT
+ WHILE Proc(Pivot,A[I]) > 0 DO INC(I) END;
+ WHILE Proc(Pivot,A[J]) < 0 DO DEC(J) END;
+ IF I <= J THEN
+ Swap(A[I],A[J]);
+ INC(I); DEC(J)
+ END;
+ UNTIL I > J;
+ IF Left < J THEN QuickSort(A,Left,J,Proc) END;
+ IF I < Right THEN QuickSort(A,I,Right,Proc) END
+ END QuickSort;
+
+BEGIN
+END Sorting.
+
diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-271/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..964269577a
--- /dev/null
+++ b/challenge-271/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,9 @@
+import("libm3")
+import("libsio")
+
+module("IntSorting")
+generic_module("Sorting")
+
+implementation("Ch2")
+program("ch2")
+
diff --git a/challenge-271/deadmarshal/perl/ch-1.pl b/challenge-271/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..6871dc816d
--- /dev/null
+++ b/challenge-271/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::Util qw(sum0);
+
+sub maximum_ones{
+ my $max = 0;
+ map{my $c = sum0 @{$_[0]->[$_]}; $max = $_+1 if $c > $max} 0..$#{$_[0]};
+ $max
+}
+
+printf "%d\n",maximum_ones([[0,1],[1,0]]);
+printf "%d\n",maximum_ones([[0,0,0],[1,0,1]]);
+printf "%d\n",maximum_ones([[0,0],[1,1],[0,0]]);
+
diff --git a/challenge-271/deadmarshal/perl/ch-2.pl b/challenge-271/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..00ac2b5976
--- /dev/null
+++ b/challenge-271/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,13 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use ntheory qw(hammingweight);
+use Data::Show;
+
+sub sort_by_one_bits{
+ sort{hammingweight($a) <=> hammingweight($b) || $a <=> $b} @{$_[0]}
+}
+
+print show sort_by_one_bits([0,1,2,3,4,5,6,7,8]);
+print show sort_by_one_bits([1024,512,256,128,64]);
+
diff --git a/challenge-271/deadmarshal/raku/ch-1.raku b/challenge-271/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..338b796f1b
--- /dev/null
+++ b/challenge-271/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/env raku
+
+sub maximum-ones(@arr)
+{
+ my $max = 0;
+ for 0..@arr.end -> $i {
+ my $c = @arr[$i].sum;
+ $max = $i+1 if $c > $max
+ }
+ $max
+}
+
+say maximum-ones([[0,1],[1,0]]);
+say maximum-ones([[0,0,0],[1,0,1]]);
+say maximum-ones([[0,0],[1,1],[0,0]]);
+
diff --git a/challenge-271/deadmarshal/raku/ch-2.raku b/challenge-271/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..c3493f8477
--- /dev/null
+++ b/challenge-271/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,15 @@
+#!/usr/bin/env raku
+
+sub population-count(Int $n where * >= 0)
+{
+ [+] $n.base(2).comb
+}
+
+sub sort-by-one-bits(@arr)
+{
+ @arr.sort: {population-count($^a) <=> population-count($^b) || $^a <=> $^b}
+}
+
+say sort-by-one-bits([0,1,2,3,4,5,6,7,8]);
+say sort-by-one-bits([1024,512,256,128,64]);
+
diff --git a/challenge-271/deadmarshal/ruby/ch1.rb b/challenge-271/deadmarshal/ruby/ch1.rb
new file mode 100644
index 0000000000..5e63fda639
--- /dev/null
+++ b/challenge-271/deadmarshal/ruby/ch1.rb
@@ -0,0 +1,12 @@
+#!/usr/bin/env ruby
+
+def maximum_ones(arr)
+ max = 0
+ arr.each_with_index {|e,i| max = i+1 if e.sum > max}
+ max
+end
+
+p maximum_ones([[0,1],[1,0]])
+p maximum_ones([[0,0,0],[1,0,1]])
+p maximum_ones([[0,0],[1,1],[0,0]])
+
diff --git a/challenge-271/deadmarshal/ruby/ch2.rb b/challenge-271/deadmarshal/ruby/ch2.rb
new file mode 100644
index 0000000000..ce9b5f0658
--- /dev/null
+++ b/challenge-271/deadmarshal/ruby/ch2.rb
@@ -0,0 +1,13 @@
+#!/usr/bin/env ruby
+
+def sort_by_one_bits(arr)
+ arr.sort do |a,b|
+ pa = a.digits(2).count(1)
+ pb = b.digits(2).count(1)
+ pa == pb ? a <=> b : pa <=> pb
+ end
+end
+
+p sort_by_one_bits([0,1,2,3,4,5,6,7,8])
+p sort_by_one_bits([1024,512,256,128,64])
+