aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Russell <ac.russell@live.com>2021-11-28 15:59:51 -0500
committerAdam Russell <ac.russell@live.com>2021-11-28 15:59:51 -0500
commit888bb54c49223e753764e398e3e6f108ecc7638c (patch)
tree758cf841e96df47bf5756513464e0dae71edabd1
parent68ac62b23aad0ad243a08ae791f5016c00358eb3 (diff)
downloadperlweeklychallenge-club-888bb54c49223e753764e398e3e6f108ecc7638c.tar.gz
perlweeklychallenge-club-888bb54c49223e753764e398e3e6f108ecc7638c.tar.bz2
perlweeklychallenge-club-888bb54c49223e753764e398e3e6f108ecc7638c.zip
Prolog and C++ solutions for challenge 140
-rw-r--r--challenge-140/adam-russell/blog.txt1
-rw-r--r--challenge-140/adam-russell/blog1.txt1
-rw-r--r--challenge-140/adam-russell/cxx/ch-1.cxx115
-rw-r--r--challenge-140/adam-russell/cxx/ch-2.cxx29
-rw-r--r--challenge-140/adam-russell/perl/ch-1.pl2
-rw-r--r--challenge-140/adam-russell/prolog/ch-1.p45
-rw-r--r--challenge-140/adam-russell/prolog/ch-2.p21
7 files changed, 213 insertions, 1 deletions
diff --git a/challenge-140/adam-russell/blog.txt b/challenge-140/adam-russell/blog.txt
new file mode 100644
index 0000000000..47d5a24fa2
--- /dev/null
+++ b/challenge-140/adam-russell/blog.txt
@@ -0,0 +1 @@
+http://www.rabbitfarm.com/cgi-bin/blosxom/2021/11/28/perl
diff --git a/challenge-140/adam-russell/blog1.txt b/challenge-140/adam-russell/blog1.txt
new file mode 100644
index 0000000000..8845345223
--- /dev/null
+++ b/challenge-140/adam-russell/blog1.txt
@@ -0,0 +1 @@
+http://www.rabbitfarm.com/cgi-bin/blosxom/2021/11/28/prolog
diff --git a/challenge-140/adam-russell/cxx/ch-1.cxx b/challenge-140/adam-russell/cxx/ch-1.cxx
new file mode 100644
index 0000000000..eabe809d8e
--- /dev/null
+++ b/challenge-140/adam-russell/cxx/ch-1.cxx
@@ -0,0 +1,115 @@
+#include<iostream>
+#include<vector>
+#include<algorithm>
+
+class AddBinary{
+ public:
+ int add_binary(int, int);
+ private:
+ std::vector<int> int2vector(int);
+ int vector2int(std::vector<int>);
+};
+
+std::vector<int> AddBinary::int2vector(int i){
+ std::vector<int> v;
+ while(i > 0){
+ int m = i % 10;
+ i = i / 10;
+ v.push_back(m);
+ }
+ return v;
+}
+
+int AddBinary::vector2int(std::vector<int> v){
+ int x = 1;
+ int r = 0;
+ for(int i: v){
+ r = r + (i * x);
+ x = x * 10;
+ }
+ return r;
+}
+
+int AddBinary::add_binary(int a, int b){
+ std::vector<int> va = this->int2vector(a);
+ std::vector<int> vb = this->int2vector(b);
+ std::vector<int> sum;
+ int carry = 0;
+ std::reverse(va.begin(), va.end());
+ for(int i=va.size() - 1; i >=0; i--){
+ int d0 = va.at(i);
+ if(!vb.empty()){
+ int d1 = vb.back();
+ vb.pop_back();
+ if(carry == 0){
+ if(d0 == 1 && d1 == 0){
+ sum.push_back(1);
+ carry = 0;
+ }
+ if(d0 == 1 && d1 == 1){
+ sum.push_back(0);
+ carry = 1;
+ }
+ if(d0 == 0 && d1 == 0){
+ sum.push_back(0);
+ carry = 0;
+ }
+ if(d0 == 0 && d1 == 1){
+ sum.push_back(1);
+ carry = 0;
+ }
+ }
+ else{
+ if(d0 == 1 && d1 == 1){
+ sum.push_back(0);
+ carry = 0;
+ }
+ if(d0 == 0 && d1 == 1){
+ sum.push_back(0);
+ carry = 1;
+ }
+ if(d0 == 0 && d1 == 0){
+ sum.push_back(1);
+ carry = 0;
+ }
+ if(d0 == 1 && d1 == 0){
+ sum.push_back(0);
+ carry = 1;
+ }
+ }
+ }
+ else{
+ if(d0 == 1 && carry == 1){
+ sum.push_back(0);
+ carry = 1;
+ }
+ else if(d0 == 0 && carry == 1){
+ sum.push_back(1);
+ carry = 0;
+ }
+ else if(d0 == 0 && carry == 0){
+ sum.push_back(0);
+ carry = 0;
+ }
+ else if(d0 == 1 && carry == 0){
+ sum.push_back(1);
+ carry = 0;
+ }
+ }
+ }
+ if(carry == 1)
+ sum.push_back(1);
+ return this->vector2int(sum);
+}
+
+
+int main(int argc, char** argv){
+ int x;
+ AddBinary ab;
+ x = ab.add_binary(11, 1);
+ std::cout << x << std::endl;
+ x = ab.add_binary(101, 1);
+ std::cout << x << std::endl;
+ x = ab.add_binary(100, 11);
+ std::cout << x << std::endl;
+}
diff --git a/challenge-140/adam-russell/cxx/ch-2.cxx b/challenge-140/adam-russell/cxx/ch-2.cxx
new file mode 100644
index 0000000000..b292e55dcd
--- /dev/null
+++ b/challenge-140/adam-russell/cxx/ch-2.cxx
@@ -0,0 +1,29 @@
+#include<iostream>
+#include<vector>
+#include<algorithm>
+
+class MultiplicationTable{
+ public:
+ int nth_from_table(int, int, int);
+};
+
+int MultiplicationTable::nth_from_table(int i, int j, int k){
+ std::vector<int> table;
+ for(int x = 1; x <= i; x++){
+ for(int y = 1; y <= j; y++){
+ table.push_back(x * y);
+ }
+ }
+ std::sort(table.begin(), table.end());
+ return table.at(k - 1);
+}
+
+
+int main(int argc, char** argv){
+ int n;
+ MultiplicationTable mt;
+ n = mt.nth_from_table(2, 3, 4);
+ std::cout << n << std::endl;
+ n = mt.nth_from_table(3, 3, 6);
+ std::cout << n << std::endl;
+}
diff --git a/challenge-140/adam-russell/perl/ch-1.pl b/challenge-140/adam-russell/perl/ch-1.pl
index 993fda172c..7b580226eb 100644
--- a/challenge-140/adam-russell/perl/ch-1.pl
+++ b/challenge-140/adam-russell/perl/ch-1.pl
@@ -18,7 +18,7 @@ sub add_binary{
my $carry = 0;
for(my $d = 0; $d <= @a - 1; $d++){
my $d0 = $a[$d];
- my $d1 = $b[$d];# || 0;
+ my $d1 = $b[$d];
if($d1){
$sum = "0$sum", $carry = 0 if $d0 == 1 && $d1 == 1 && $carry == 1;
$sum = "1$sum", $carry = 0 if $d0 == 1 && $d1 == 0 && $carry == 0;
diff --git a/challenge-140/adam-russell/prolog/ch-1.p b/challenge-140/adam-russell/prolog/ch-1.p
new file mode 100644
index 0000000000..2dd0cd5497
--- /dev/null
+++ b/challenge-140/adam-russell/prolog/ch-1.p
@@ -0,0 +1,45 @@
+:-initialization(main).
+
+sum_carry(0, 0, 1, 1, 1).
+sum_carry(1, 0, 1, 0, 0).
+sum_carry(0, 1, 1, 1, 0).
+sum_carry(0, 1, 0, 1, 1).
+sum_carry(0, 0, 0, 0, 0).
+sum_carry(1, 0, 0, 0, 1).
+sum_carry(0, 1, 1, 0, 1).
+sum_carry(1, 0, 0, 1, 0).
+sum_carry(0, 1, 1, 1).
+sum_carry(1, 0, 0, 1).
+sum_carry(0, 0, 0, 0).
+sum_carry(1, 0, 1, 0).
+
+add_binary(A, B, Sum):-
+ number_chars(A, AChars),
+ number_chars(B, BChars),
+ reverse(AChars, ACharsReverse),
+ reverse(BChars, BCharsReverse),
+ add_binary(ACharsReverse, BCharsReverse, 0, [], Sum).
+add_binary([], [], 0, SumAccum, Sum):-
+ number_chars(Sum, SumAccum).
+add_binary([], [], 1, SumAccum, Sum):-
+ number_chars(Sum, ['1'|SumAccum]).
+add_binary([H|T], [], Carry, SumAccum, Sum):-
+ number_chars(D, [H]),
+ sum_carry(S, C, D, Carry),
+ number_chars(S, [N]),
+ add_binary(T, [], C, [N | SumAccum], Sum).
+add_binary([H0|T0], [H1|T1], Carry, SumAccum, Sum):-
+ number_chars(D0, [H0]),
+ number_chars(D1, [H1]),
+ sum_carry(S, C, D0, D1, Carry),
+ number_chars(S, [N]),
+ add_binary(T0, T1, C, [N | SumAccum], Sum).
+
+main:-
+ add_binary(11, 1, X0),
+ write(X0), nl,
+ add_binary(101, 1, X1),
+ write(X1), nl,
+ add_binary(100, 11, X2),
+ write(X2), nl,
+ halt.
diff --git a/challenge-140/adam-russell/prolog/ch-2.p b/challenge-140/adam-russell/prolog/ch-2.p
new file mode 100644
index 0000000000..c5f687566b
--- /dev/null
+++ b/challenge-140/adam-russell/prolog/ch-2.p
@@ -0,0 +1,21 @@
+:-initialization(main).
+
+multiply(I, J, N):-
+ between(1, I, Ith),
+ between(1, J, Jth),
+ N is Ith * Jth.
+
+multiplication_table(I, J, Table):-
+ bagof(N, multiply(I, J, N), Table).
+
+nth_from_table(I, J, K, N):-
+ multiplication_table(I, J, Table),
+ msort(Table, SortedTable),
+ nth(K, SortedTable, N).
+
+main:-
+ nth_from_table(2, 3, 4, N0),
+ write(N0), nl,
+ nth_from_table(3, 3, 6, N1),
+ write(N1), nl,
+ halt.