aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-12-06 10:53:29 +0000
committerGitHub <noreply@github.com>2020-12-06 10:53:29 +0000
commitcd03f8f1fbed3e5769295291513eabf08312bd29 (patch)
tree190de5f535a115f1d2795559651ce3a56f179fad
parenta922b1a04252ff0329fb17c433592ffa32fbcf2d (diff)
parent336c48be15e4ea6ee86401ee44e7ebd8062fabf9 (diff)
downloadperlweeklychallenge-club-cd03f8f1fbed3e5769295291513eabf08312bd29.tar.gz
perlweeklychallenge-club-cd03f8f1fbed3e5769295291513eabf08312bd29.tar.bz2
perlweeklychallenge-club-cd03f8f1fbed3e5769295291513eabf08312bd29.zip
Merge pull request #2918 from nunovieira220/challenge-089
Add solution to challenge 089
-rw-r--r--challenge-089/nunovieira220/js/ch-1.js19
-rw-r--r--challenge-089/nunovieira220/js/ch-2.js74
-rw-r--r--challenge-089/nunovieira220/perl/ch-1.pl26
-rw-r--r--challenge-089/nunovieira220/perl/ch-2.pl85
4 files changed, 204 insertions, 0 deletions
diff --git a/challenge-089/nunovieira220/js/ch-1.js b/challenge-089/nunovieira220/js/ch-1.js
new file mode 100644
index 0000000000..8392a0ea7a
--- /dev/null
+++ b/challenge-089/nunovieira220/js/ch-1.js
@@ -0,0 +1,19 @@
+// Input
+const N = 4;
+
+// GCD
+const gcd = (a, b) => {
+ return b == 0 ? a : gcd(b, a % b);
+}
+
+// GCD Sum
+let res = 0;
+
+for(let i = 1; i <= N; i++) {
+ for(let j = i + 1; j <= N; j++) {
+ res += gcd(i, j);
+ }
+}
+
+// Output
+console.log(res); \ No newline at end of file
diff --git a/challenge-089/nunovieira220/js/ch-2.js b/challenge-089/nunovieira220/js/ch-2.js
new file mode 100644
index 0000000000..6158dcb27b
--- /dev/null
+++ b/challenge-089/nunovieira220/js/ch-2.js
@@ -0,0 +1,74 @@
+// Check if can have 15
+const check15 = (...args) => {
+ const zeros = args.filter(n => n === 0).length;
+ const sum = args.reduce((a, b) => a + b);
+
+ if(zeros === 1 && sum !== 15) return false;
+ if(zeros === 2 && sum <= 5) return false;
+ if(zeros === 2 && available[15 - sum] === 0) return false;
+ return true;
+};
+
+// Test if element is safe
+const isSafe = (row, col, val) => {
+ // Verify availability
+ if(!available[val]) return false;
+
+ // Verify row
+ if(!check15(res[row][0], res[row][1], res[row][2], val)) return false;
+
+ // Verify column
+ if(!check15(res[0][col], res[1][col], res[2][col], val)) return false;
+
+ // Verify y=x diagonal
+ if(row == col && !check15(res[0][0], res[1][1], res[2][2], val)) return false;
+
+ // Verify y=-x diagonal
+ if(row + col == 2 && !check15(res[0][2], res[1][1], res[2][0], val)) return false;
+
+ return true;
+};
+
+// Solve Magical Matrix
+const solve = () => {
+ let row = -1;
+ let col = -1;
+
+ for (let i = 0; i < 3; i++) {
+ index = res[i].indexOf(0);
+
+ if (index > -1) {
+ row = i;
+ col = index;
+ break;
+ }
+ }
+
+ if (col == -1) return true;
+
+ let result = false;
+
+ for(let i = 1; i < 10; i++) {
+ if (isSafe(row, col, i)) {
+ available[i] = 0;
+ res[row][col] = i;
+
+ result = solve();
+ if(result) break;
+
+ available[res[row][col]] = 1;
+ res[row][col] = 0;
+ }
+ }
+
+ return result;
+}
+
+// Magical Matrix
+const available = Array(10).fill(1);
+const res = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
+
+solve();
+
+// Output
+console.log(res); \ No newline at end of file
diff --git a/challenge-089/nunovieira220/perl/ch-1.pl b/challenge-089/nunovieira220/perl/ch-1.pl
new file mode 100644
index 0000000000..2534ba9c65
--- /dev/null
+++ b/challenge-089/nunovieira220/perl/ch-1.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature qw(say);
+
+# Input
+my $N = 4;
+
+# GCD Sum
+my $res = 0;
+
+for(my $i = 1; $i <= $N; $i++) {
+ for(my $j = $i + 1; $j <= $N; $j++) {
+ $res += gcd($i, $j);
+ }
+}
+
+# Output
+say($res);
+
+# GCD
+sub gcd {
+ my ($a, $b) = @_;
+ return $b == 0 ? $a : gcd($b, $a % $b);
+} \ No newline at end of file
diff --git a/challenge-089/nunovieira220/perl/ch-2.pl b/challenge-089/nunovieira220/perl/ch-2.pl
new file mode 100644
index 0000000000..7bbff0271d
--- /dev/null
+++ b/challenge-089/nunovieira220/perl/ch-2.pl
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature qw(say);
+use List::MoreUtils qw(first_index);
+use List::Util qw(reduce);
+use Data::Dumper::OneLine;
+
+# Magical Matrix
+my @available = (1) x 10;
+my @N = ([0, 0, 0], [0, 0, 0], [0, 0, 0]);
+
+solve();
+
+# Output
+say Dumper($_) for(@N);
+
+# Solve Magical Matrix
+sub solve {
+ my $row = -1;
+ my $col = -1;
+
+ for (my $i = 0; $i < 3; $i++) {
+ my $index = first_index { $_ == 0 } @{$N[$i]};
+
+ if ($index > -1) {
+ $row = $i;
+ $col = $index;
+ last;
+ }
+ }
+
+ return 1 if ($col == -1);
+
+ my $result = 0;
+
+ for(my $i = 1; $i < 10; $i++) {
+ if (isSafe($row, $col, $i)) {
+ $available[$i] = 0;
+ $N[$row][$col] = $i;
+
+ $result = solve();
+ last if ($result);
+
+ $available[$N[$row][$col]] = 1;
+ $N[$row][$col] = 0;
+ }
+ }
+
+ return $result;
+}
+
+# Test if element is safe
+sub isSafe {
+ my ($row, $col, $val) = @_;
+
+ # Verify availability
+ return 0 if(!$available[$val]);
+
+ # Verify row
+ return 0 if(!check15($N[$row][0], $N[$row][1], $N[$row][2], $val));
+
+ # Verify column
+ return 0 if(!check15($N[0][$col], $N[1][$col], $N[2][$col], $val));
+
+ # Verify y=x diagonal
+ return 0 if($row == $col && !check15($N[0][0], $N[1][1], $N[2][2], $val));
+
+ # Verify y=-x diagonal
+ return 0 if($row + $col == 2 && !check15($N[0][2], $N[1][1], $N[2][0], $val));
+
+ return 1;
+}
+
+# Check if can have 15
+sub check15 {
+ my $zeros = scalar(grep { $_ == 0 } @_);
+ my $sum = reduce { $a + $b } @_;
+
+ return 0 if($zeros == 1 && $sum != 15);
+ return 0 if($zeros == 2 && $sum <= 5);
+ return 0 if($zeros == 2 && $available[15 - $sum] == 0);
+ return 1;
+}