diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-12-06 10:53:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-06 10:53:29 +0000 |
| commit | cd03f8f1fbed3e5769295291513eabf08312bd29 (patch) | |
| tree | 190de5f535a115f1d2795559651ce3a56f179fad | |
| parent | a922b1a04252ff0329fb17c433592ffa32fbcf2d (diff) | |
| parent | 336c48be15e4ea6ee86401ee44e7ebd8062fabf9 (diff) | |
| download | perlweeklychallenge-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.js | 19 | ||||
| -rw-r--r-- | challenge-089/nunovieira220/js/ch-2.js | 74 | ||||
| -rw-r--r-- | challenge-089/nunovieira220/perl/ch-1.pl | 26 | ||||
| -rw-r--r-- | challenge-089/nunovieira220/perl/ch-2.pl | 85 |
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; +} |
