diff options
| author | Simon Green <mail@simon.green> | 2022-11-17 22:50:07 +1100 |
|---|---|---|
| committer | Simon Green <mail@simon.green> | 2022-11-17 22:50:07 +1100 |
| commit | 8203bca3a019823f328b70720bf4168b9eefc5d3 (patch) | |
| tree | 3f70ab43da46ad784b72204f7ce2d1ec07ed19fd | |
| parent | 0df63088f99a782b77e5661449ec508ab5940035 (diff) | |
| download | perlweeklychallenge-club-8203bca3a019823f328b70720bf4168b9eefc5d3.tar.gz perlweeklychallenge-club-8203bca3a019823f328b70720bf4168b9eefc5d3.tar.bz2 perlweeklychallenge-club-8203bca3a019823f328b70720bf4168b9eefc5d3.zip | |
Simon's solution to challenge 191
| -rwxr-xr-x | challenge-191/sgreen/perl/ch-1.pl | 15 | ||||
| -rwxr-xr-x | challenge-191/sgreen/perl/ch-2.pl | 43 | ||||
| -rwxr-xr-x | challenge-191/sgreen/python/ch-1.py | 15 | ||||
| -rwxr-xr-x | challenge-191/sgreen/python/ch-2.py | 32 |
4 files changed, 105 insertions, 0 deletions
diff --git a/challenge-191/sgreen/perl/ch-1.pl b/challenge-191/sgreen/perl/ch-1.pl new file mode 100755 index 0000000000..487f9f15af --- /dev/null +++ b/challenge-191/sgreen/perl/ch-1.pl @@ -0,0 +1,15 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use experimental 'signatures'; + +sub main (@nums) { + # Sort the list numerically + @nums = sort { $a <=> $b } @nums; + + say $nums[-1] > 2 * $nums[-2] ? 1 : -1; +} + +main(@ARGV); diff --git a/challenge-191/sgreen/perl/ch-2.pl b/challenge-191/sgreen/perl/ch-2.pl new file mode 100755 index 0000000000..69e9686bea --- /dev/null +++ b/challenge-191/sgreen/perl/ch-2.pl @@ -0,0 +1,43 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use experimental 'signatures'; + +use List::Util 'none'; + +sub find_solutions ( $front, $back ) { + # Recursive function to find possible solutions. Front is the numbers we + # have processed, back is what remains + if ( scalar(@$back) == 0 ) { + return 1; + } + + # Iterate over the next value + my $count = 0; + + foreach my $i ( @{ $back->[0] } ) { + # Call the recursive function if we haven't used this number already + if ( none { $_ == $i } @$front ) { + $count += + find_solutions( [ @$front, $i ], [ @{$back}[ 1 .. $#$back ] ] ); + } + } + + # Return the number of matches up the recursive function + return $count; +} + +sub main ($n) { + # Generate a list of list with a possible value for each number + my @possible = (); + + foreach my $i ( 1 .. $n ) { + push @possible, [ grep { $_ % $i == 0 or $i % $_ == 0 } ( 1 .. $n ) ]; + } + + say find_solutions( [], \@possible ); +} + +main( $ARGV[0] ) diff --git a/challenge-191/sgreen/python/ch-1.py b/challenge-191/sgreen/python/ch-1.py new file mode 100755 index 0000000000..38e9b0b853 --- /dev/null +++ b/challenge-191/sgreen/python/ch-1.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +import sys + + +def main(s): + # Sort the list numerically + nums = [int(x) for x in s] + nums.sort() + + print(1 if nums[-1] > 2 * nums[-2] else -1) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/challenge-191/sgreen/python/ch-2.py b/challenge-191/sgreen/python/ch-2.py new file mode 100755 index 0000000000..6c610e6d88 --- /dev/null +++ b/challenge-191/sgreen/python/ch-2.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 + +import sys + +def find_solutions(front, back): + '''Recursive function to find possible solutions. Front is the numbers we + have processed, back is what remains''' + if len(back) == 0: + return 1 + + # Iterate over the next value + count = 0 + for i in back[0]: + # Call the recursive function if we haven't used this number already + if i not in front: + count += find_solutions([*front, i], back[1:]) + + # Return the number of matches up the recursive function + return count + +def main(n): + '''Main function''' + # Generate a list of list with a possible value for each number + possible = [] + for i in range(1, n+1): + possible.append([j for j in range(1, n+1) if j % i == 0 or i % j == 0]) + + print(find_solutions([], possible)) + + +if __name__ == '__main__': + main(int(sys.argv[1])) |
