aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-05-17 10:44:30 +0100
committerGitHub <noreply@github.com>2024-05-17 10:44:30 +0100
commit6ef717acfb89bab3b62c0beebd56ff9883ca4f70 (patch)
tree75e53fbf2a346446c49128aebe9426706d84d85f
parent4c82c665be83d12cf9bcd5c0443fa678eb51198c (diff)
parent974e4b99fbb075faaf1847a5fb8c29f7f4f37609 (diff)
downloadperlweeklychallenge-club-6ef717acfb89bab3b62c0beebd56ff9883ca4f70.tar.gz
perlweeklychallenge-club-6ef717acfb89bab3b62c0beebd56ff9883ca4f70.tar.bz2
perlweeklychallenge-club-6ef717acfb89bab3b62c0beebd56ff9883ca4f70.zip
Merge pull request #10109 from deadmarshal/TWC269
TWC269
-rw-r--r--challenge-269/deadmarshal/blog.txt1
-rw-r--r--challenge-269/deadmarshal/go/ch1.go24
-rw-r--r--challenge-269/deadmarshal/go/ch2.go32
-rw-r--r--challenge-269/deadmarshal/java/Ch1.java18
-rw-r--r--challenge-269/deadmarshal/java/Ch2.java35
-rw-r--r--challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m325
-rw-r--r--challenge-269/deadmarshal/modula-3/ch1/src/m3makefile5
-rw-r--r--challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m350
-rw-r--r--challenge-269/deadmarshal/modula-3/ch2/src/m3makefile5
-rw-r--r--challenge-269/deadmarshal/perl/ch-1.pl12
-rw-r--r--challenge-269/deadmarshal/perl/ch-2.pl19
-rw-r--r--challenge-269/deadmarshal/raku/ch-1.raku11
-rw-r--r--challenge-269/deadmarshal/raku/ch-2.raku17
-rw-r--r--challenge-269/deadmarshal/ruby/ch1.rb10
-rw-r--r--challenge-269/deadmarshal/ruby/ch2.rb16
-rw-r--r--challenge-269/deadmarshal/sml/ch1.sml8
-rw-r--r--challenge-269/deadmarshal/sml/ch2.sml24
17 files changed, 312 insertions, 0 deletions
diff --git a/challenge-269/deadmarshal/blog.txt b/challenge-269/deadmarshal/blog.txt
new file mode 100644
index 0000000000..f3c076199d
--- /dev/null
+++ b/challenge-269/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2024/05/twc269.html
diff --git a/challenge-269/deadmarshal/go/ch1.go b/challenge-269/deadmarshal/go/ch1.go
new file mode 100644
index 0000000000..6db906549a
--- /dev/null
+++ b/challenge-269/deadmarshal/go/ch1.go
@@ -0,0 +1,24 @@
+package main
+
+import (
+ "fmt"
+)
+
+func bitwiseOr(arr []int) bool {
+ count := 0
+ for _, v := range arr {
+ if v%2 == 0 {
+ count++
+ }
+ if count > 1 {
+ return true
+ }
+ }
+ return false
+}
+
+func main() {
+ fmt.Println(bitwiseOr([]int{1, 2, 3, 4, 5}))
+ fmt.Println(bitwiseOr([]int{2, 3, 8, 16}))
+ fmt.Println(bitwiseOr([]int{1, 2, 5, 7, 9}))
+}
diff --git a/challenge-269/deadmarshal/go/ch2.go b/challenge-269/deadmarshal/go/ch2.go
new file mode 100644
index 0000000000..ee574a0d3d
--- /dev/null
+++ b/challenge-269/deadmarshal/go/ch2.go
@@ -0,0 +1,32 @@
+package main
+
+import (
+ "fmt"
+ "slices"
+)
+
+func distributeElements(arr []int) []int {
+ ret1 := []int{arr[0]}
+ arr = slices.Delete(arr, 0, 1)
+ ret2 := []int{arr[0]}
+ arr = slices.Delete(arr, 0, 1)
+ for len(arr) != 0 {
+ e := arr[0]
+ arr = slices.Delete(arr,0,1)
+ if ret1[len(ret1)-1] > ret2[len(ret2)-1] {
+ ret1 = append(ret1,e)
+ continue
+ }
+ ret2 = append(ret2,e)
+ }
+ return slices.Concat(nil,ret1,ret2)
+}
+
+func main() {
+ arr1 := []int{2, 1, 3, 4, 5}
+ arr2 := []int{3, 2, 4}
+ arr3 := []int{5, 4, 3, 8}
+ fmt.Println(distributeElements(arr1))
+ fmt.Println(distributeElements(arr2))
+ fmt.Println(distributeElements(arr3))
+}
diff --git a/challenge-269/deadmarshal/java/Ch1.java b/challenge-269/deadmarshal/java/Ch1.java
new file mode 100644
index 0000000000..732e99ca7e
--- /dev/null
+++ b/challenge-269/deadmarshal/java/Ch1.java
@@ -0,0 +1,18 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Ch1 {
+ public static void main(String[] args) {
+ List<Integer> list1 = new ArrayList<>(List.of(1, 2, 3, 4, 5));
+ List<Integer> list2 = new ArrayList<>(List.of(2, 3, 8, 16));
+ List<Integer> list3 = new ArrayList<>(List.of(1, 2, 5, 7, 9));
+ System.out.println(bitwise_or(list1));
+ System.out.println(bitwise_or(list2));
+ System.out.println(bitwise_or(list3));
+ }
+
+ private static boolean bitwise_or(List<Integer> list) {
+ return (list.stream().filter(e -> (e % 2) == 0).count() > 1);
+ }
+}
+
diff --git a/challenge-269/deadmarshal/java/Ch2.java b/challenge-269/deadmarshal/java/Ch2.java
new file mode 100644
index 0000000000..910f357eab
--- /dev/null
+++ b/challenge-269/deadmarshal/java/Ch2.java
@@ -0,0 +1,35 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Ch2 {
+ public static void main(String[] args) {
+ List<Integer> list1 = new ArrayList<>(List.of(2, 1, 3, 4, 5));
+ List<Integer> list2 = new ArrayList<>(List.of(3, 2, 4));
+ List<Integer> list3 = new ArrayList<>(List.of(5, 4, 3, 8));
+ try {
+ System.out.println(distribute_elements(list1));
+ System.out.println(distribute_elements(list2));
+ System.out.println(distribute_elements(list3));
+ } catch (NotEnoughElements e) {
+ System.err.println(e.getMessage());
+ }
+ }
+
+ private static List<Integer> distribute_elements(List<Integer> list)
+ throws NotEnoughElements {
+ if (list.size() < 2) throw new NotEnoughElements();
+ List<Integer> ret1 = new ArrayList<>(List.of(list.removeFirst()));
+ List<Integer> ret2 = new ArrayList<>(List.of(list.removeFirst()));
+ while (!list.isEmpty()) {
+ int e = list.removeFirst();
+ if (ret1.getLast() > ret2.getLast()) ret1.add(e);
+ else ret2.add(e);
+ }
+ ret1.addAll(ret2);
+ return ret1;
+ }
+
+ private static class NotEnoughElements extends Exception {
+ }
+}
+
diff --git a/challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..9127acdeb9
--- /dev/null
+++ b/challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,25 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO;
+
+VAR
+ A1:ARRAY[0..4] OF CARDINAL := ARRAY OF CARDINAL{1,2,3,4,5};
+ A2:ARRAY[0..3] OF CARDINAL := ARRAY OF CARDINAL{2,3,8,16};
+ A3:ARRAY[0..4] OF CARDINAL := ARRAY OF CARDINAL{1,2,5,7,9};
+
+PROCEDURE BitwiseOr(VAR A:ARRAY OF CARDINAL):BOOLEAN =
+ VAR Count:CARDINAL;
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ IF A[I] MOD 2 = 0 THEN INC(Count) END;
+ IF Count > 1 THEN RETURN TRUE END
+ END;
+ RETURN FALSE
+ END BitwiseOr;
+
+BEGIN
+ SIO.PutBool(BitwiseOr(A1)); SIO.Nl();
+ SIO.PutBool(BitwiseOr(A2)); SIO.Nl();
+ SIO.PutBool(BitwiseOr(A3)); SIO.Nl()
+END Ch1.
+
diff --git a/challenge-269/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-269/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..9f66e4a51f
--- /dev/null
+++ b/challenge-269/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,5 @@
+import("libm3")
+import("libsio")
+implementation("Ch1")
+program("ch1")
+
diff --git a/challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..b785695583
--- /dev/null
+++ b/challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,50 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO,IntSeq,Stdio;
+
+EXCEPTION NotEnoughElements;
+
+VAR
+ A1:ARRAY[0..4] OF CARDINAL := ARRAY OF CARDINAL{2,1,3,4,5};
+ A2:ARRAY[0..2] OF CARDINAL := ARRAY OF CARDINAL{3,2,4};
+ A3:ARRAY[0..3] OF CARDINAL := ARRAY OF CARDINAL{5,4,3,8};
+
+PROCEDURE DistributeElements(VAR A:ARRAY OF CARDINAL):IntSeq.T
+ RAISES{NotEnoughElements} =
+ VAR
+ I:INTEGER := FIRST(A)+2;
+ Ret1,Ret2:IntSeq.T := NEW(IntSeq.T).init();
+ BEGIN
+ IF NUMBER(A) < 2 THEN RAISE NotEnoughElements END;
+ Ret1.addhi(A[FIRST(A)]);
+ Ret2.addhi(A[FIRST(A)+1]);
+ WHILE(I # NUMBER(A)) DO
+ IF Ret1.gethi() > Ret2.gethi() THEN Ret1.addhi(A[I])
+ ELSE Ret2.addhi(A[I])
+ END;
+ INC(I)
+ END;
+ RETURN IntSeq.Cat(Ret1,Ret2)
+ END DistributeElements;
+
+PROCEDURE PrintSequence(READONLY Seq:IntSeq.T) =
+ BEGIN
+ FOR I := 0 TO Seq.size()-1 DO
+ SIO.PutInt(Seq.get(I));
+ SIO.PutChar(' ')
+ END;
+ SIO.Nl()
+ END PrintSequence;
+
+BEGIN
+ TRY
+ PrintSequence(DistributeElements(A1));
+ PrintSequence(DistributeElements(A2));
+ PrintSequence(DistributeElements(A3));
+ EXCEPT
+ NotEnoughElements =>
+ SIO.PutText("Not enough elements in array!\n",Stdio.stderr)
+ ELSE SIO.PutText("Some other exception occurred!\n",Stdio.stderr)
+ END;
+END Ch2.
+
diff --git a/challenge-269/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-269/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..798c627ef3
--- /dev/null
+++ b/challenge-269/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,5 @@
+import("libm3")
+import("libsio")
+implementation("Ch2")
+program("ch2")
+
diff --git a/challenge-269/deadmarshal/perl/ch-1.pl b/challenge-269/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..32e0142031
--- /dev/null
+++ b/challenge-269/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub bitwise_or{
+ (grep{($_ & 1) == 0} @{$_[0]}) > 1
+}
+
+printf "%d\n",bitwise_or([1,2,3,4,5]);
+printf "%d\n",bitwise_or([2,3,8,16]);
+printf "%d\n",bitwise_or([1,2,5,7,9]);
+
diff --git a/challenge-269/deadmarshal/perl/ch-2.pl b/challenge-269/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..132b2f6dea
--- /dev/null
+++ b/challenge-269/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Data::Show;
+
+sub distribute_elements{
+ my @ret1 = shift @{$_[0]};
+ my @ret2 = shift @{$_[0]};
+ while(@{$_[0]}){
+ my $e = shift @{$_[0]};
+ $ret1[-1] > $ret2[-1] ? push @ret1,$e : push @ret2,$e;
+ }
+ @ret1,@ret2
+}
+
+print show distribute_elements([2,1,3,4,5]);
+print show distribute_elements([3,2,4]);
+print show distribute_elements([5,4,3,8]);
+
diff --git a/challenge-269/deadmarshal/raku/ch-1.raku b/challenge-269/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..236357a537
--- /dev/null
+++ b/challenge-269/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,11 @@
+#!/usr/bin/env raku
+
+sub bitwise-or(@arr)
+{
+ (@arr.grep: {$_ +& 1 == 0}) > 1;
+}
+
+say bitwise-or([1,2,3,4,5]);
+say bitwise-or([2,3,8,16]);
+say bitwise-or([1,2,5,7,9]);
+
diff --git a/challenge-269/deadmarshal/raku/ch-2.raku b/challenge-269/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..62aa809585
--- /dev/null
+++ b/challenge-269/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,17 @@
+#!/usr/bin/env raku
+
+sub distribute-elements(@arr)
+{
+ my @ret1 = @arr.shift;
+ my @ret2 = @arr.shift;
+ while @arr {
+ my $e = @arr.shift;
+ @ret1[*-1] > @ret2[*-1] ?? @ret1.push($e) !! @ret2.push($e)
+ }
+ (@ret1,@ret2).flat
+}
+
+say distribute-elements([2,1,3,4,5]);
+say distribute-elements([3,2,4]);
+say distribute-elements([5,4,3,8]);
+
diff --git a/challenge-269/deadmarshal/ruby/ch1.rb b/challenge-269/deadmarshal/ruby/ch1.rb
new file mode 100644
index 0000000000..1ad74be0c2
--- /dev/null
+++ b/challenge-269/deadmarshal/ruby/ch1.rb
@@ -0,0 +1,10 @@
+#!/usr/bin/env ruby
+
+def bitwise_or(arr)
+ arr.select{|e| e % 2 == 0}.size > 1
+end
+
+p bitwise_or([1,2,3,4,5])
+p bitwise_or([2,3,8,16])
+p bitwise_or([1,2,5,7,9])
+
diff --git a/challenge-269/deadmarshal/ruby/ch2.rb b/challenge-269/deadmarshal/ruby/ch2.rb
new file mode 100644
index 0000000000..cce3602c5f
--- /dev/null
+++ b/challenge-269/deadmarshal/ruby/ch2.rb
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+
+def distribute_elements(arr)
+ ret1 = [arr.shift()]
+ ret2 = [arr.shift()]
+ while arr.size() > 0
+ e = arr.shift()
+ ret1[-1] > ret2[-1] ? ret1.push(e) : ret2.push(e)
+ end
+ ret1 + ret2
+end
+
+p distribute_elements([2,1,3,4,5])
+p distribute_elements([3,2,4])
+p distribute_elements([5,4,3,8])
+
diff --git a/challenge-269/deadmarshal/sml/ch1.sml b/challenge-269/deadmarshal/sml/ch1.sml
new file mode 100644
index 0000000000..5058571cce
--- /dev/null
+++ b/challenge-269/deadmarshal/sml/ch1.sml
@@ -0,0 +1,8 @@
+fun bitwise_or lst =
+ List.length(List.filter(fn e => e mod 2 = 0) lst) > 1
+
+val _ =
+ print(Bool.toString(bitwise_or([1,2,3,4,5])) ^ "\n");
+ print(Bool.toString(bitwise_or([2,3,8,16])) ^ "\n");
+ print(Bool.toString(bitwise_or([1,2,5,7,9])) ^ "\n");
+
diff --git a/challenge-269/deadmarshal/sml/ch2.sml b/challenge-269/deadmarshal/sml/ch2.sml
new file mode 100644
index 0000000000..9c7da522bb
--- /dev/null
+++ b/challenge-269/deadmarshal/sml/ch2.sml
@@ -0,0 +1,24 @@
+fun distribute_elements lst =
+ let fun aux [] acc1 acc2 = acc1 @ acc2
+ | aux (x::xs) acc1 acc2 =
+ if (List.hd(List.rev acc1)) > (List.hd(List.rev acc2))
+ then aux xs (acc1 @ [x]) acc2
+ else aux xs acc1 (acc2 @ [x])
+ in
+ aux (List.tl (List.tl lst)) [List.hd lst] [List.hd(List.tl lst)]
+ end
+
+fun print_list(nil) = ()
+ | print_list(x::xs) = (
+ print(Int.toString(x));
+ print(" ");
+ print_list(xs);
+ print("\n")
+ );
+
+val _ = (
+ print_list(distribute_elements([2,1,3,4,5]));
+ print_list(distribute_elements([3,2,4]));
+ print_list(distribute_elements([5,4,3,8]))
+)
+