aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-141/adam-russell/blog.txt1
-rw-r--r--challenge-141/adam-russell/cxx/ch-1.cxx43
-rw-r--r--challenge-141/adam-russell/cxx/ch-2.cxx67
-rw-r--r--challenge-141/adam-russell/perl/ch-1.pl31
-rw-r--r--challenge-141/adam-russell/perl/ch-2.pl24
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";
+}