aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-089/nunovieira220/js/ch-1.js19
-rw-r--r--challenge-089/nunovieira220/js/ch-2.js74
2 files changed, 93 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