diff options
| -rw-r--r-- | challenge-141/adam-russell/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-141/adam-russell/cxx/ch-1.cxx | 43 | ||||
| -rw-r--r-- | challenge-141/adam-russell/cxx/ch-2.cxx | 67 | ||||
| -rw-r--r-- | challenge-141/adam-russell/perl/ch-1.pl | 31 | ||||
| -rw-r--r-- | challenge-141/adam-russell/perl/ch-2.pl | 24 |
5 files changed, 166 insertions, 0 deletions
diff --git a/challenge-141/adam-russell/blog.txt b/challenge-141/adam-russell/blog.txt new file mode 100644 index 0000000000..f6cb97edcd --- /dev/null +++ b/challenge-141/adam-russell/blog.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/2021/12/05/perl diff --git a/challenge-141/adam-russell/cxx/ch-1.cxx b/challenge-141/adam-russell/cxx/ch-1.cxx new file mode 100644 index 0000000000..3c69fb930f --- /dev/null +++ b/challenge-141/adam-russell/cxx/ch-1.cxx @@ -0,0 +1,43 @@ +#include<cmath> +#include<vector> +#include<iostream> + +class NumberDivisors{ + private: + std::vector<int> factor(int); + public: + std::vector<int> first_ten_with_eight(); +}; + +std::vector<int> NumberDivisors::factor(int n){ + std::vector<int> factors; + factors.push_back(1); + factors.push_back(n); + for(int i = 2; i <= std::sqrt(n); i++){ + if(n % i == 0) + factors.push_back(i); + if(n % i == 0 && std::lround(std::pow(i,2)) != n) + factors.push_back(n / i); + } + return factors; +} + +std::vector<int> NumberDivisors::first_ten_with_eight(){ + int i = 0; + std::vector<int> divisible; + do{ + std::vector<int> factors = this->factor(i); + if(factors.size() == 8) + divisible.push_back(i); + i++; + }while(divisible.size() < 10); + return divisible; +} + +int main(int argc, char** argv){ + NumberDivisors divisorator; + std::vector<int> first_ten = divisorator.first_ten_with_eight(); + for(int i : first_ten) + std::cout << i << " "; + std::cout << std::endl; +} diff --git a/challenge-141/adam-russell/cxx/ch-2.cxx b/challenge-141/adam-russell/cxx/ch-2.cxx new file mode 100644 index 0000000000..e708e8c91a --- /dev/null +++ b/challenge-141/adam-russell/cxx/ch-2.cxx @@ -0,0 +1,67 @@ +#include<cmath> +#include<vector> +#include<iostream> +#include<algorithm> + +class LikeNumbers{ + public: + std::vector<int> like_numbers(int, int); + private: + int vector2int(std::vector<int>); + std::vector<int> int2digits(int); +}; + +std::vector<int> LikeNumbers::int2digits(int i){ + std::vector<int> digits; + do{ + int digit = i % 10; + digits.push_back(digit); + i = i / 10; + }while(i != 0); + return digits; +} + +int LikeNumbers::vector2int(std::vector<int> v){ + int x = 1; + int r = 0; + for(int i: v){ + r = r + (i * x); + x = x * 10; + } + return r; +} + +std::vector<int> LikeNumbers::like_numbers(int i, int j){ + std::vector<int> digits = this->int2digits(i); + std::vector<int> like; + int power_set_size = std::pow(2, digits.size()); + for(int k = 1; k < power_set_size - 1; k++){ + std::vector<int> included_digits; + for(int l = 0; l < digits.size(); l++){ + if( k >> l & 1) + included_digits.push_back(digits.at(l)); + } + int number = this->vector2int(included_digits); + if(number % j == 0) + like.push_back(number); + } + std::sort(like.begin(), like.end()); + return like; +} + +int main(int argc, char** argv){ + LikeNumbers ln; + std::vector<int> like; + like = ln.like_numbers(1234, 2); + std::cout << like.size() << ": "; + for(int i : like){ + std::cout << i << " "; + } + std::cout << std::endl; + like = ln.like_numbers(768, 4); + std::cout << like.size() << ": "; + for(int i : like){ + std::cout << i << " "; + } + std::cout << std::endl; +} diff --git a/challenge-141/adam-russell/perl/ch-1.pl b/challenge-141/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..bc9d36902f --- /dev/null +++ b/challenge-141/adam-russell/perl/ch-1.pl @@ -0,0 +1,31 @@ +use strict; +use warnings; +## +# Write a script to find lowest 10 positive integers +# having exactly 8 divisors. +## + +sub factor{ + my($n) = @_; + my @factors = (1, $n); + foreach my $j (2..sqrt($n)){ + push @factors, $j if $n % $j == 0; + push @factors, ($n / $j) if $n % $j == 0 && $j ** 2 != $n; + } + return @factors; +} + +sub first_ten_with_eight{ + my $i = 0; + my @first_ten; + do{ + my @factors = factor($i); + push @first_ten, $i if @factors == 8; + $i++; + }while(@first_ten != 10); + return @first_ten; +} + +MAIN:{ + print join(", ", first_ten_with_eight()) . "\n"; +} diff --git a/challenge-141/adam-russell/perl/ch-2.pl b/challenge-141/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..c5e3a80dd2 --- /dev/null +++ b/challenge-141/adam-russell/perl/ch-2.pl @@ -0,0 +1,24 @@ +use strict; +use warnings; +## +# You are given positive integers, $m and $n. +# Write a script to find total count of integers +# created using the digits of $m which is also +# divisible by $n. +## +use Data::PowerSet q/powerset/; + +sub like_numbers{ + my($m, $n) = @_; + my @divisible; + for my $subset (@{powerset(split(//, $m))}){ + my $i = join("", @$subset); + push @divisible, $i if $i && $i != $m && $i % $n == 0; + } + return @divisible; +} + +MAIN:{ + print like_numbers(1234, 2) . "\n"; + print like_numbers(768, 4) . "\n"; +} |
