diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-09-17 09:11:21 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-17 09:11:21 +0100 |
| commit | 61ed1965dca92005b484ecc0e0dac504cf885558 (patch) | |
| tree | 6ed4e1dbf133dd287e8399d73ff4bec9829fc56f | |
| parent | d429f2de33ddfa98e751a6849fa08e7227712778 (diff) | |
| parent | de605ab5d0b5839224d64aadaac2499ec0e4d9b1 (diff) | |
| download | perlweeklychallenge-club-61ed1965dca92005b484ecc0e0dac504cf885558.tar.gz perlweeklychallenge-club-61ed1965dca92005b484ecc0e0dac504cf885558.tar.bz2 perlweeklychallenge-club-61ed1965dca92005b484ecc0e0dac504cf885558.zip | |
Merge pull request #12693 from deadmarshal/TWC339
TWC339
| -rw-r--r-- | challenge-339/deadmarshal/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/erlang/ch1.erl | 20 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/erlang/ch2.erl | 23 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/go/ch1.go | 20 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/go/ch2.go | 22 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/haskell/ch1.hs | 20 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/haskell/ch2.hs | 13 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/java/Ch1.java | 17 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/java/Ch2.java | 21 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/odin/ch1.odin | 18 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/odin/ch2.odin | 21 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/perl/ch-1.pl | 16 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/perl/ch-2.pl | 16 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/raku/ch-1.raku | 14 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/raku/ch-2.raku | 13 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/scheme/ch1.scm | 16 | ||||
| -rw-r--r-- | challenge-339/deadmarshal/scheme/ch2.scm | 19 |
17 files changed, 290 insertions, 0 deletions
diff --git a/challenge-339/deadmarshal/blog.txt b/challenge-339/deadmarshal/blog.txt new file mode 100644 index 0000000000..c133ac5939 --- /dev/null +++ b/challenge-339/deadmarshal/blog.txt @@ -0,0 +1 @@ +https://deadmarshal.blogspot.com/2025/09/twc339.html diff --git a/challenge-339/deadmarshal/erlang/ch1.erl b/challenge-339/deadmarshal/erlang/ch1.erl new file mode 100644 index 0000000000..a76fbeec77 --- /dev/null +++ b/challenge-339/deadmarshal/erlang/ch1.erl @@ -0,0 +1,20 @@ +-module(ch1). +-export([max_diff/1,main/0]). + +-spec max_diff([integer()]) -> integer(). +max_diff([]) -> undefined; +max_diff(L) -> + N = length(L), + S = lists:sort(L), + E = lists:last(S) * lists:nth(N-1,S), + F = hd(S) * lists:nth(2,S), + E - F. + +main() -> + io:format("~p~n~p~n~p~n~p~n~p~n", + [max_diff([5,9,3,4,6]), + max_diff([1,-2,3,-4]), + max_diff([-3,-1,-2,-4]), + max_diff([10,2,0,5,1]), + max_diff([7,8,9,10,10])]). + diff --git a/challenge-339/deadmarshal/erlang/ch2.erl b/challenge-339/deadmarshal/erlang/ch2.erl new file mode 100644 index 0000000000..9cc1579046 --- /dev/null +++ b/challenge-339/deadmarshal/erlang/ch2.erl @@ -0,0 +1,23 @@ +-module(ch2). +-export([peak_point/1,main/0]). + +scanl(F,Init,L) -> + {Res,_} = lists:foldl( + fun(X,{AccList,Current}) -> + Next = F(Current,X), + {[Next|AccList],Next} + end, + {[Init],Init},L), + lists:reverse(Res). + +peak_point(L) -> + lists:max(scanl(fun erlang:'+'/2,0,L)). + +main() -> + io:format("~p~n~p~n~p~n~p~n~p~n", + [peak_point([-5,1,5,-9,2]), + peak_point([10,10,10,-25]), + peak_point([3,-4,2,5,-6,1]), + peak_point([-1,-2,-3,-4]), + peak_point([-10,15,5])]). + diff --git a/challenge-339/deadmarshal/go/ch1.go b/challenge-339/deadmarshal/go/ch1.go new file mode 100644 index 0000000000..8425726384 --- /dev/null +++ b/challenge-339/deadmarshal/go/ch1.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + "slices" +) + +func maxDiff(arr []int) int { + slices.Sort(arr) + n := len(arr) + return arr[n-1]*arr[n-2] - arr[0]*arr[1] +} + +func main() { + fmt.Println(maxDiff([]int{5, 9, 3, 4, 6})) + fmt.Println(maxDiff([]int{1, -2, 3, -4})) + fmt.Println(maxDiff([]int{-3, -1, -2, -4})) + fmt.Println(maxDiff([]int{10, 2, 0, 5, 1})) + fmt.Println(maxDiff([]int{7, 8, 9, 10, 10})) +} diff --git a/challenge-339/deadmarshal/go/ch2.go b/challenge-339/deadmarshal/go/ch2.go new file mode 100644 index 0000000000..ffa8facb75 --- /dev/null +++ b/challenge-339/deadmarshal/go/ch2.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "slices" +) + +func peakPoint(arr []int) int { + res := []int{0} + for _, e := range arr { + res = append(res, res[len(res)-1]+e) + } + return slices.Max(res) +} + +func main() { + fmt.Println(peakPoint([]int{-5, 1, 5, -9, 2})) + fmt.Println(peakPoint([]int{10, 10, 10, -25})) + fmt.Println(peakPoint([]int{3, -4, 2, 5, -6, 1})) + fmt.Println(peakPoint([]int{-1, -2, -3, -4})) + fmt.Println(peakPoint([]int{-10, 15, 5})) +} diff --git a/challenge-339/deadmarshal/haskell/ch1.hs b/challenge-339/deadmarshal/haskell/ch1.hs new file mode 100644 index 0000000000..a807f76894 --- /dev/null +++ b/challenge-339/deadmarshal/haskell/ch1.hs @@ -0,0 +1,20 @@ +module Ch1 where + +import Data.List + +maxDiff :: [Int] -> Int +maxDiff xs = e - f + where + e = (s !! (len-1)) * (s !! (len-2)) + f = head s * (s !! 1) + len = length s + s = sort xs + +main :: IO () +main = do + print $ maxDiff [5,9,3,4,6] + print $ maxDiff [1,-2,3,-4] + print $ maxDiff [-3,-1,-2,-4] + print $ maxDiff [10,2,0,5,1] + print $ maxDiff [7,8,9,10,10] + diff --git a/challenge-339/deadmarshal/haskell/ch2.hs b/challenge-339/deadmarshal/haskell/ch2.hs new file mode 100644 index 0000000000..226efad940 --- /dev/null +++ b/challenge-339/deadmarshal/haskell/ch2.hs @@ -0,0 +1,13 @@ +module Ch2 where + +peakPoint :: Integral a => [a] -> a +peakPoint = maximum . scanl (+) 0 + +main :: IO () +main = do + print $ peakPoint [-5,1,5,-9,2] + print $ peakPoint [10,10,10,-25] + print $ peakPoint [3,-4,2,5,-6,1] + print $ peakPoint [-1,-2,-3,-4] + print $ peakPoint [-10,15,5] + diff --git a/challenge-339/deadmarshal/java/Ch1.java b/challenge-339/deadmarshal/java/Ch1.java new file mode 100644 index 0000000000..c2b5bf781c --- /dev/null +++ b/challenge-339/deadmarshal/java/Ch1.java @@ -0,0 +1,17 @@ +import java.util.Arrays; + +public class Ch1 { + public static void main(String[] args) { + System.out.println(max_diff(new int[] { 5, 9, 3, 4, 6 })); + System.out.println(max_diff(new int[] { 1, -2, 3, -4 })); + System.out.println(max_diff(new int[] { -3, -1, -2, -4 })); + System.out.println(max_diff(new int[] { 10, 2, 0, 5, 1 })); + System.out.println(max_diff(new int[] { 7, 8, 9, 10, 10 })); + } + + private static int max_diff(int[] arr) { + Arrays.sort(arr); + final int n = arr.length; + return arr[n - 1] * arr[n - 2] - arr[0] * arr[1]; + } +} diff --git a/challenge-339/deadmarshal/java/Ch2.java b/challenge-339/deadmarshal/java/Ch2.java new file mode 100644 index 0000000000..22d7449bd0 --- /dev/null +++ b/challenge-339/deadmarshal/java/Ch2.java @@ -0,0 +1,21 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Ch2 { + public static void main(String[] args) { + System.out.println(peak_point(new int[] { -5, 1, 5, -9, 2 })); + System.out.println(peak_point(new int[] { 10, 10, 10, -25 })); + System.out.println(peak_point(new int[] { 3, -4, 2, 5, -6, 1 })); + System.out.println(peak_point(new int[] { -1, -2, -3, -4 })); + System.out.println(peak_point(new int[] { -10, 15, 5 })); + } + + private static int peak_point(int[] arr) { + List<Integer> l = new ArrayList<>(); + l.add(0); + for (var e : arr) + l.add(l.getLast() + e); + return Collections.max(l); + } +} diff --git a/challenge-339/deadmarshal/odin/ch1.odin b/challenge-339/deadmarshal/odin/ch1.odin new file mode 100644 index 0000000000..9f0ab1b6e6 --- /dev/null +++ b/challenge-339/deadmarshal/odin/ch1.odin @@ -0,0 +1,18 @@ +package main + +import "core:fmt" +import "core:slice" + +max_diff :: proc(arr: []int) -> int { + slice.sort(arr) + n := len(arr) + return arr[n - 1] * arr[n - 2] - arr[0] * arr[1] +} + +main :: proc() { + fmt.println(max_diff([]int{5, 9, 3, 4, 6})) + fmt.println(max_diff([]int{1, -2, 3, -4})) + fmt.println(max_diff([]int{-3, -1, -2, -4})) + fmt.println(max_diff([]int{10, 2, 0, 5, 1})) + fmt.println(max_diff([]int{7, 8, 9, 10, 10})) +} diff --git a/challenge-339/deadmarshal/odin/ch2.odin b/challenge-339/deadmarshal/odin/ch2.odin new file mode 100644 index 0000000000..1d502900d6 --- /dev/null +++ b/challenge-339/deadmarshal/odin/ch2.odin @@ -0,0 +1,21 @@ +package main + +import "core:fmt" +import "core:slice" + +peak_point :: proc(arr: []int) -> int { + res := [dynamic]int{} + defer delete(res) + reserve(&res, len(arr)) + append_elem(&res, 0) + for e, _ in arr do append_elem(&res, res[len(res) - 1] + e) + return slice.max(res[:]) +} + +main :: proc() { + fmt.println(peak_point([]int{-5, 1, 5, -9, 2})) + fmt.println(peak_point([]int{10, 10, 10, -25})) + fmt.println(peak_point([]int{3, -4, 2, 5, -6, 1})) + fmt.println(peak_point([]int{-1, -2, -3, -4})) + fmt.println(peak_point([]int{-10, 15, 5})) +} diff --git a/challenge-339/deadmarshal/perl/ch-1.pl b/challenge-339/deadmarshal/perl/ch-1.pl new file mode 100644 index 0000000000..d846d1156e --- /dev/null +++ b/challenge-339/deadmarshal/perl/ch-1.pl @@ -0,0 +1,16 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +sub max_diff{ + my ($arr) = @_; + @$arr = sort{$a <=> $b} @$arr; + $arr->[-1] * $arr->[-2] - $arr->[0] * $arr->[1] +} + +printf "%d\n",max_diff([5,9,3,4,6]); +printf "%d\n",max_diff([1,-2,3,-4]); +printf "%d\n",max_diff([-3,-1,-2,-4]); +printf "%d\n",max_diff([10,2,0,5,1]); +printf "%d\n",max_diff([7,8,9,10,10]); + diff --git a/challenge-339/deadmarshal/perl/ch-2.pl b/challenge-339/deadmarshal/perl/ch-2.pl new file mode 100644 index 0000000000..e37833f1a9 --- /dev/null +++ b/challenge-339/deadmarshal/perl/ch-2.pl @@ -0,0 +1,16 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use List::Util qw(max); + +sub peak_point{ + my $s = 0; + max 0,map {$s += $_} @{$_[0]} +} + +printf "%d\n",peak_point([-5,1,5,-9,2]); +printf "%d\n",peak_point([10,10,10,-25]); +printf "%d\n",peak_point([3,-4,2,5,-6,1]); +printf "%d\n",peak_point([-1,-2,-3,-4]); +printf "%d\n",peak_point([-10,15,5]); + diff --git a/challenge-339/deadmarshal/raku/ch-1.raku b/challenge-339/deadmarshal/raku/ch-1.raku new file mode 100644 index 0000000000..87897b8bef --- /dev/null +++ b/challenge-339/deadmarshal/raku/ch-1.raku @@ -0,0 +1,14 @@ +#!/usr/bin/env raku + +sub max-diff(@arr) +{ + my @s = @arr.sort; + ([*] @s.tail(2)) - ([*] @s.head(2)) +} + +say max-diff([5,9,3,4,6]); +say max-diff([1,-2,3,-4]); +say max-diff([-3,-1,-2,-4]); +say max-diff([10,2,0,5,1]); +say max-diff([7,8,9,10,10]); + diff --git a/challenge-339/deadmarshal/raku/ch-2.raku b/challenge-339/deadmarshal/raku/ch-2.raku new file mode 100644 index 0000000000..ad4cf38d07 --- /dev/null +++ b/challenge-339/deadmarshal/raku/ch-2.raku @@ -0,0 +1,13 @@ +#!/usr/bin/env raku + +sub peak-point(@arr) +{ + ([\+] (0,|@arr)).max +} + +say peak-point([-5,1,5,-9,2]); +say peak-point([10,10,10,-25]); +say peak-point([3,-4,2,5,-6,1]); +say peak-point([-1,-2,-3,-4]); +say peak-point([-10,15,5]); + diff --git a/challenge-339/deadmarshal/scheme/ch1.scm b/challenge-339/deadmarshal/scheme/ch1.scm new file mode 100644 index 0000000000..96b1a81e5f --- /dev/null +++ b/challenge-339/deadmarshal/scheme/ch1.scm @@ -0,0 +1,16 @@ +(define (max-diff xs) + (let* ((s (sort < xs)) + (n (length xs)) + (e (* (list-ref s (sub1 n)) + (list-ref s (- n 2)))) + (f (* (car s) + (list-ref s 1)))) + (- e f))) + +(begin + (display (max-diff '(5 9 3 4 6))) (newline) + (display (max-diff '(1 -2 3 -4))) (newline) + (display (max-diff '(-3 -1 -2 -4))) (newline) + (display (max-diff '(10 2 0 5 1))) (newline) + (display (max-diff '(7 8 9 10 10))) (newline)) + diff --git a/challenge-339/deadmarshal/scheme/ch2.scm b/challenge-339/deadmarshal/scheme/ch2.scm new file mode 100644 index 0000000000..83905c1250 --- /dev/null +++ b/challenge-339/deadmarshal/scheme/ch2.scm @@ -0,0 +1,19 @@ +(define (scanl f init xs) + (let loop ((acc init) + (rest xs) + (result (list init))) + (if (null? rest) + (reverse result) + (let ((next (f acc (car rest)))) + (loop next (cdr rest) (cons next result)))))) + +(define (peak-point xs) + (apply max (scanl + 0 xs))) + +(begin + (display (peak-point '(-5 1 5 -9 2))) (newline) + (display (peak-point '(10 10 10 -25))) (newline) + (display (peak-point '(3 -4 2 5 -6 1))) (newline) + (display (peak-point '(-1 -2 -3 -4))) (newline) + (display (peak-point '(-10 15 5))) (newline)) + |
