diff options
| author | Adam Russell <ac.russell@live.com> | 2021-11-28 15:59:51 -0500 |
|---|---|---|
| committer | Adam Russell <ac.russell@live.com> | 2021-11-28 15:59:51 -0500 |
| commit | 888bb54c49223e753764e398e3e6f108ecc7638c (patch) | |
| tree | 758cf841e96df47bf5756513464e0dae71edabd1 | |
| parent | 68ac62b23aad0ad243a08ae791f5016c00358eb3 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-140/adam-russell/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-140/adam-russell/cxx/ch-1.cxx | 115 | ||||
| -rw-r--r-- | challenge-140/adam-russell/cxx/ch-2.cxx | 29 | ||||
| -rw-r--r-- | challenge-140/adam-russell/perl/ch-1.pl | 2 | ||||
| -rw-r--r-- | challenge-140/adam-russell/prolog/ch-1.p | 45 | ||||
| -rw-r--r-- | challenge-140/adam-russell/prolog/ch-2.p | 21 |
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. |
