aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-08-25 21:01:50 +0100
committerGitHub <noreply@github.com>2025-08-25 21:01:50 +0100
commitc13fb4e8ab09d579048a1dcfe211b127ce792213 (patch)
tree7a4d18154334cbf194a615afe3b10ebcc65aee9d
parent778a877423d75f6299c57bb75c3edffd2f304e84 (diff)
parentb1387ca0c952c83280783df9483d94dcef0295cd (diff)
downloadperlweeklychallenge-club-c13fb4e8ab09d579048a1dcfe211b127ce792213.tar.gz
perlweeklychallenge-club-c13fb4e8ab09d579048a1dcfe211b127ce792213.tar.bz2
perlweeklychallenge-club-c13fb4e8ab09d579048a1dcfe211b127ce792213.zip
Merge pull request #12570 from deadmarshal/TWC336
TWC336
-rw-r--r--challenge-336/deadmarshal/blog.txt1
-rw-r--r--challenge-336/deadmarshal/go/ch1.go50
-rw-r--r--challenge-336/deadmarshal/go/ch2.go37
-rw-r--r--challenge-336/deadmarshal/odin/ch1.odin48
-rw-r--r--challenge-336/deadmarshal/odin/ch2.odin33
-rw-r--r--challenge-336/deadmarshal/perl/ch-1.pl19
-rw-r--r--challenge-336/deadmarshal/perl/ch-2.pl28
7 files changed, 216 insertions, 0 deletions
diff --git a/challenge-336/deadmarshal/blog.txt b/challenge-336/deadmarshal/blog.txt
new file mode 100644
index 0000000000..283a65b9b9
--- /dev/null
+++ b/challenge-336/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2025/08/twc336.html
diff --git a/challenge-336/deadmarshal/go/ch1.go b/challenge-336/deadmarshal/go/ch1.go
new file mode 100644
index 0000000000..70fd09b279
--- /dev/null
+++ b/challenge-336/deadmarshal/go/ch1.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+ "fmt"
+)
+
+func frequency(arr []int) map[int]int {
+ f := make(map[int]int)
+ for _, n := range arr {
+ f[n] = f[n] + 1
+ }
+ return f
+}
+
+func gcd(a, b int) int {
+ for b > 0 {
+ c := a % b
+ a = b
+ b = c
+ }
+ return a
+}
+
+func equalGroup(arr []int) bool {
+ h := frequency(arr)
+
+ values := make([]int, 0, len(h))
+ for _, v := range h {
+ values = append(values, v)
+ }
+
+ if len(values) == 0 {
+ return false
+ }
+
+ res := values[0]
+ for i := 1; i < len(values); i++ {
+ res = gcd(res, values[i])
+ }
+
+ return res > 1
+}
+
+func main() {
+ fmt.Println(equalGroup([]int{1, 1, 2, 2, 2, 2}))
+ fmt.Println(equalGroup([]int{1, 1, 1, 2, 2, 2, 3, 3}))
+ fmt.Println(equalGroup([]int{5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7}))
+ fmt.Println(equalGroup([]int{1, 2, 3, 4}))
+ fmt.Println(equalGroup([]int{8, 8, 9, 9, 10, 10, 11, 11}))
+}
diff --git a/challenge-336/deadmarshal/go/ch2.go b/challenge-336/deadmarshal/go/ch2.go
new file mode 100644
index 0000000000..3cb497a774
--- /dev/null
+++ b/challenge-336/deadmarshal/go/ch2.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+ "fmt"
+ "strconv"
+)
+
+func finalScore(arr []string) int {
+ stk := []int{}
+ sum := 0
+ for _, s := range arr {
+ if i, err := strconv.Atoi(s); err == nil {
+ stk = append(stk, i)
+ } else if s == "C" {
+ stk = stk[:len(stk)-1]
+ } else if s == "D" {
+ stk = append(stk, stk[len(stk)-1]*2)
+ } else {
+ stk = append(stk, stk[len(stk)-1]+stk[len(stk)-2])
+ }
+ }
+
+ for _, v := range stk {
+ sum += v
+ }
+ return sum
+}
+
+func main() {
+ fmt.Println(finalScore([]string{"5", "2", "C", "D", "+"}))
+ fmt.Println(finalScore([]string{"5", "-2", "4", "C", "D", "9",
+ "+", "+"}))
+ fmt.Println(finalScore([]string{"7", "D", "D", "C", "+", "3"}))
+ fmt.Println(finalScore([]string{"-5", "-10", "+", "D", "C", "+"}))
+ fmt.Println(finalScore([]string{"3", "6", "+", "D", "C", "8",
+ "+", "D", "-2", "C", "+"}))
+}
diff --git a/challenge-336/deadmarshal/odin/ch1.odin b/challenge-336/deadmarshal/odin/ch1.odin
new file mode 100644
index 0000000000..26a22e0580
--- /dev/null
+++ b/challenge-336/deadmarshal/odin/ch1.odin
@@ -0,0 +1,48 @@
+package main
+
+import "core:fmt"
+
+frequency :: proc(arr: []int) -> map[int]int {
+ f := make(map[int]int)
+ for n, _ in arr {
+ f[n] = f[n] + 1
+ }
+ return f
+}
+
+gcd :: proc(a, b: int) -> int {
+ if b == 0 {
+ return a
+ }
+ return gcd(b, a % b)
+}
+
+equalGroup :: proc(arr: []int) -> bool {
+ h := frequency(arr)
+ defer delete(h)
+
+ values := make([dynamic]int, len(h))
+ defer delete(values)
+
+ for _, v in h do append_elem(&values, v)
+
+ if len(values) == 0 {
+ return false
+ }
+
+ res := values[0]
+
+ for &v, _ in values {
+ res = gcd(res, v)
+ }
+
+ return res > 1
+}
+
+main :: proc() {
+ fmt.println(equalGroup([]int{1, 1, 2, 2, 2, 2}))
+ fmt.println(equalGroup([]int{1, 1, 1, 2, 2, 2, 3, 3}))
+ fmt.println(equalGroup([]int{5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7}))
+ fmt.println(equalGroup([]int{1, 2, 3, 4}))
+ fmt.println(equalGroup([]int{8, 8, 9, 9, 10, 10, 11, 11}))
+}
diff --git a/challenge-336/deadmarshal/odin/ch2.odin b/challenge-336/deadmarshal/odin/ch2.odin
new file mode 100644
index 0000000000..7fd57338a1
--- /dev/null
+++ b/challenge-336/deadmarshal/odin/ch2.odin
@@ -0,0 +1,33 @@
+package main
+
+import "core:fmt"
+import "core:strconv"
+
+finalScore :: proc(arr: []string) -> (sum: int) {
+ stk := [dynamic]int{}
+
+ for s, _ in arr {
+ if i, ok := strconv.parse_int(s, 10); ok == true {
+ append_elem(&stk, i)
+ } else if s == "C" {
+ pop(&stk)
+ } else if s == "D" {
+ append_elem(&stk, stk[len(stk) - 1] * 2)
+ } else {
+ append_elem(&stk, stk[len(stk) - 1] + stk[len(stk) - 2])
+ }
+ }
+
+ for v, _ in stk {
+ sum += v
+ }
+ return
+}
+
+main :: proc() {
+ fmt.println(finalScore([]string{"5", "2", "C", "D", "+"}))
+ fmt.println(finalScore([]string{"5", "-2", "4", "C", "D", "9", "+", "+"}))
+ fmt.println(finalScore([]string{"7", "D", "D", "C", "+", "3"}))
+ fmt.println(finalScore([]string{"-5", "-10", "+", "D", "C", "+"}))
+ fmt.println(finalScore([]string{"3", "6", "+", "D", "C", "8", "+", "D", "-2", "C", "+"}))
+}
diff --git a/challenge-336/deadmarshal/perl/ch-1.pl b/challenge-336/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..1d6a6f2ebc
--- /dev/null
+++ b/challenge-336/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Data::Show;
+use List::Util qw(reduce);
+use ntheory qw(gcd);
+
+sub equal_group{
+ my %h;
+ $h{$_}++ foreach @{$_[0]};
+ (reduce{gcd($a,$b)} values %h) > 1
+}
+
+printf "%d\n",equal_group([1,1,2,2,2,2]);
+printf "%d\n",equal_group([1,1,1,2,2,2,3,3]);
+printf "%d\n",equal_group([5,5,5,5,5,5,7,7,7,7,7,7]);
+printf "%d\n",equal_group([1,2,3,4]);
+printf "%d\n",equal_group([8,8,9,9,10,10,11,11]);
+
diff --git a/challenge-336/deadmarshal/perl/ch-2.pl b/challenge-336/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..f835300aa3
--- /dev/null
+++ b/challenge-336/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,28 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::Util qw(sum0);
+
+sub final_score{
+ my @stk;
+ for(@{$_[0]}) {
+ if(/\d+/) {
+ push @stk,$_
+ } elsif($_ eq 'C') {
+ pop @stk
+ } elsif($_ eq 'D') {
+ push @stk,$stk[-1] * 2
+ } else {
+ push @stk,$stk[-2] + $stk[-1]
+ }
+ }
+ sum0 @stk
+}
+
+printf "%d\n",final_score(['5','2','C','D','+']);
+printf "%d\n",final_score(['5','-2','4','C','D','9','+','+']);
+printf "%d\n",final_score(['7','D','D','C','+','3']);
+printf "%d\n",final_score(['-5','-10','+','D','C','+']);
+printf "%d\n",final_score(['3','6','+','D','C','8','+','D',
+ '-2','C','+']);
+