Arithmetic-PaperAndPencil

 view release on metacpan or  search on metacpan

xt/08-mult.t  view on Meta::CPAN


my $refcsv  = slurp('xt/data/08-mult.csv');
my $refhtml = slurp('xt/data/08-mult.html');
my $operation = Arithmetic::PaperAndPencil->new;
my $x = Arithmetic::PaperAndPencil::Number->new(value => '10200300040000', radix => 10);
my $y = Arithmetic::PaperAndPencil::Number->new(value => '2'  , radix => 10);
my $z = Arithmetic::PaperAndPencil::Number->new(value => '101', radix => 10);
my Arithmetic::PaperAndPencil::Number $pdt;

$pdt = $operation->multiplication(multiplicand => $x, multiplier => $x, type => 'std');
is($pdt->value, '104046120906024001600000000', "product is 104046120906024001600000000");
$pdt = $operation->multiplication(multiplicand => $y, multiplier => $z, type => 'std');
is($pdt->value, '202', "product is 202");

is($operation->csv, $refcsv, "checking the CSV file");
my $html = $operation->html(lang => 'fr', silent => 0, level => 3);
is($html, $refhtml, "checking the HTML file");

sub slurp($fname) {
  open my $f, '<', $fname
    or die "Opening $fname $!";

xt/13-prep-division.t  view on Meta::CPAN


$result = $operation->division(dividend => $dividend, divisor => $divisor, type => 'prepared');
is($result->value, '41', "3500 divided by 85 is 41 (long hook, no zero)");

$dividend = Arithmetic::PaperAndPencil::Number->new(radix => 10, value => '24696000');
$divisor  = Arithmetic::PaperAndPencil::Number->new(radix => 10, value => '25882');

$result = $operation->division(dividend => $dividend, divisor => $divisor, type => 'prepared', result => 'remainder');
is($result->value, '4572', "24696000 divided by 25882 is 954, remainder 4572 (long hook, no zero)");

$dividend = Arithmetic::PaperAndPencil::Number->new(radix => 10, value => '34048000');

@list = $operation->division(dividend => $dividend, divisor => $divisor, type => 'prepared', result => 'both');
is($list[0]->value, '1315' , "34048000 divided by 25882 is 1315");
is($list[1]->value, '13170', "34048000 divided by 25882 is 1315, remainder 13170 (short hook, no zero)");

$dividend = Arithmetic::PaperAndPencil::Number->new(radix => 10, value => '26048000');
$result = $operation->division(dividend => $dividend, divisor => $divisor, type => 'prepared');
is($result->value, '1006', "26048000 divided by 25882 is 1006 (short hook, two inner zeroes)");

$dividend = Arithmetic::PaperAndPencil::Number->new(radix => 10, value => '26399640');
$result = $operation->division(dividend => $dividend, divisor => $divisor, type => 'prepared');
is($result->value, '1020', "26399640 divided by 25882 is 1020 (short hook, one inner zero and one final zero)");

is($operation->csv, $refcsv, "Checking CSV file");

xt/16-div-boat.t  view on Meta::CPAN

use warnings;
use Test::More;
use Arithmetic::PaperAndPencil;
use feature qw/class/;
use open ':encoding(UTF-8)';

my @tests = ( [ qw<10     9212    139   66    38> ]
            , [ qw<10   101212    139  728    20> ]
            , [ qw<10    97445    139  701     6> ]
            , [ qw<10 24696000  25882  954  4572> ]
            , [ qw<10 34048000  25882 1315 13170> ]
            );
plan(tests => 2 + 2 * @tests);

my $refcsv  = slurp('xt/data/16-div-boat.csv' );
my $refhtml = slurp('xt/data/16-div-boat.html');
my Arithmetic::PaperAndPencil $operation = Arithmetic::PaperAndPencil->new;
my Arithmetic::PaperAndPencil $dummy_op  = Arithmetic::PaperAndPencil->new;

for my $data (@tests) {
  my ($radix, $dividend, $divisor, $quotient, $remainder) = @$data;

xt/data/08-mult.html  view on Meta::CPAN

    <strong>4</strong>046120906024001600000000
</pre>
<p>Je pose 0</p>
<pre>
               10200300040000
              <u> 10200300040000</u>
           408012001600000000
       30600900120000........
    20400600080000...........
 <u> 1<em>0</em>200300040000.............</u>
   <strong>0</strong>4046120906024001600000000
</pre>
<p>Je pose 1</p>
<pre>
               10200300040000
              <u> 10200300040000</u>
           408012001600000000
       30600900120000........
    20400600080000...........
 <u> <em>1</em>0200300040000.............</u>
  <strong>1</strong>04046120906024001600000000
</pre>
<h1>Multiplication de 2 et 101, procédé standard, base 10</h1>
<pre>
    <strong>2</strong>
 <u> <strong>101</strong></u>
</pre>
<p>1 fois 2, 2</p>
<pre>
    <em>2</em>
 <u> 10<em>1</em></u>

xt/data/13-prep-division.csv  view on Meta::CPAN

9;ADD01;5;1;6;5;6;5;0;0;0;;0;0;0;;0;0;
9;SUB02;5;11;;4;6;1;0;0;0;;0;0;0;;0;0;
6;WRI02;5;1;;0;0;;0;0;0;;0;6;6;5;0;0;
9;ADD01;3;1;4;5;5;3;0;0;0;;0;0;0;;0;0;
9;SUB02;4;8;;4;5;8;0;0;0;;0;0;0;;0;0;
6;WRI03;4;0;;0;0;;0;0;0;;0;6;5;4;0;0;
9;SUB01;0;0;0;4;4;0;0;5;4;0;0;0;0;;0;0;
6;WRI03;0;0;;0;0;;0;0;0;;0;6;4;0;0;0;
9;SUB01;1;0;1;4;3;1;0;5;3;1;0;0;0;;0;0;
0;WRI03;0;0;;0;0;;0;0;0;;0;6;3;0;0;0;
9;TIT11;34048000;25882;10;0;0;;0;0;0;;0;0;0;;0;0;
3;WRI00;;;;0;0;;0;0;0;;0;0;0;1;0;8;25882
9;WRI00;;;;0;0;;0;0;0;;0;1;0;2;0;0;
7;ADD01;2;2;4;0;8;2;0;0;8;2;0;0;0;;0;0;
4;WRI03;4;0;;0;0;;0;0;0;;0;1;8;4;0;0;
7;ADD01;8;8;16;0;7;8;0;0;7;8;0;0;0;;0;0;
4;WRI02;6;1;;0;0;;0;0;0;;0;1;7;6;0;0;
7;ADD01;8;1;9;0;6;8;0;0;0;;0;0;0;;0;0;
7;ADD02;8;17;;0;6;8;0;0;0;;0;0;0;;0;0;
4;WRI02;7;1;;0;0;;0;0;0;;0;1;6;7;0;0;
7;ADD01;5;1;6;0;5;5;0;0;0;;0;0;0;;0;0;

xt/data/13-prep-division.csv  view on Meta::CPAN

7;ADD01;8;1;9;0;6;8;0;0;0;;0;0;0;;0;0;
7;ADD02;0;9;;7;6;0;0;0;0;;0;0;0;;0;0;
4;WRI03;9;0;;0;0;;0;0;0;;0;8;6;9;0;0;
7;ADD01;5;7;12;0;5;5;0;7;5;7;0;0;0;;0;0;
4;WRI02;2;1;;0;0;;0;0;0;;0;8;5;2;0;0;
7;ADD01;2;1;3;0;4;2;0;0;0;;0;0;0;;0;0;
7;ADD02;0;3;;7;4;0;0;0;0;;0;0;0;;0;0;
4;WRI03;3;0;;0;0;;0;0;0;;0;8;4;3;0;0;
3;WRI04;2;;;7;3;2;0;0;0;;0;8;3;2;0;0;
1;NXP01;;;;0;0;;0;0;0;;0;0;0;;0;0;
5;WRI00;;;;0;0;;0;0;0;;0;0;8;34048000;0;0;
5;DRA02;;;;0;0;;0;0;0;;0;0;9;;0;13;
5;DRA01;;;;0;0;;0;0;0;;0;0;8;;2;8;
5;WRI00;;;;0;0;;0;0;0;;0;0;13;25882;1;12;....
1;HOO01;;;;0;0;;0;0;0;;0;0;1;;0;5;
5;DIV01;34048;25882;1;0;5;34048;0;0;13;25882;0;1;9;1;0;0;
5;WRI05;25882;;;0;0;;0;0;0;;0;0;0;;0;0;
8;WRI00;;;;0;0;;0;0;0;;0;1;5;25882;0;0;
5;DRA02;;;;0;0;;0;0;0;;0;1;1;;1;5;
9;SUB01;2;6;8;0;5;8;0;1;5;2;0;0;0;;0;0;
6;WRI03;6;0;;0;0;;0;0;0;;0;2;5;6;0;0;
9;SUB01;8;6;14;0;4;4;0;1;4;8;0;0;0;;0;0;
6;WRI02;6;1;;0;0;;0;0;0;;0;2;4;6;0;0;
9;ADD01;8;1;9;1;3;8;0;0;0;;0;0;0;;0;0;
9;SUB02;1;10;;0;3;0;0;0;0;;0;0;0;;0;0;
6;WRI02;1;1;;0;0;;0;0;0;;0;2;3;1;0;0;

xt/data/13-prep-division.html  view on Meta::CPAN

<pre>
 <u>      </u>
 24696000|<u><em>25882</em></u>
 <u>232938</u>  |95<strong>4</strong>
 0140220 |
  <u>129410</u> |
  0<em>108100</em>|
   <u><strong>103528</strong></u>|
   <strong>004572</strong>|
</pre>
<h1>Division de 34048000 par 25882, avec préparation, base 10</h1>
<pre>
<strong>1   25882</strong>
</pre>
<p>2 et 2, 4</p>
<p>Je pose 4 et je ne retiens rien</p>
<p>8 et 8, 16</p>
<p>Je pose 6 et je retiens 1</p>
<p>8 et 1, 9</p>
<p>et 8, 17</p>
<p>Je pose 7 et je retiens 1</p>

xt/data/13-prep-division.html  view on Meta::CPAN

4  103528
5  129410
6  155292
7  181174
8  <em>207056</em>
<strong>9  232938</strong>
</pre>
<p>Changement de page</p>
<pre>
 <u>     </u>
 <strong>34048000</strong>|<u><strong>25882</strong></u>
         |<strong>....</strong>
         |
</pre>
<p>En 34048 combien de fois 25882, il y va 1 fois</p>
<p>Je recopie la ligne 25882</p>
<p>2 et 6, 8</p>
<p>Je pose 6 et je ne retiens rien</p>
<p>8 et 6, 14</p>
<p>Je pose 6 et je retiens 1</p>
<p>8 et 1, 9</p>
<p>et 1, 10</p>
<p>Je pose 1 et je retiens 1</p>
<p>5 et 1, 6</p>
<p>et 8, 14</p>
<p>Je pose 8 et je retiens 1</p>
<p>2 et 1, 3</p>
<p>et 0, 3</p>
<p>Je pose 0 et je ne retiens rien</p>
<pre>
 <u>     </u>
 <em>34048</em>000|<u><em>25882</em></u>
 <u><strong>25882</strong></u>   |<strong>1</strong>...
 <strong>08166</strong>   |
</pre>
<p>J'abaisse le 0</p>
<pre>
 <u>     </u>
 34048<em>0</em>00|<u>25882</u>
 <u>25882</u>   |1...
 08166<strong>0</strong>  |
         |
         |
</pre>
<p>En 81660 combien de fois 25882, il y va 3 fois</p>
<p>Je recopie la ligne 77646</p>
<p>6 et 4, 10</p>
<p>Je pose 4 et je retiens 1</p>
<p>4 et 1, 5</p>

xt/data/13-prep-division.html  view on Meta::CPAN

<p>Je pose 1 et je ne retiens rien</p>
<p>6 et 0, 6</p>
<p>Je pose 0 et je ne retiens rien</p>
<p>7 et 4, 11</p>
<p>Je pose 4 et je retiens 1</p>
<p>7 et 1, 8</p>
<p>et 0, 8</p>
<p>Je pose 0 et je ne retiens rien</p>
<pre>
 <u>     </u>
 34048000|<u><em>25882</em></u>
 <u>25882</u>   |1<strong>3</strong>..
 0<em>81660</em>  |
  <u><strong>77646</strong></u>  |
  <strong>04014</strong>  |
</pre>
<p>J'abaisse le 0</p>
<pre>
 <u>     </u>
 340480<em>0</em>0|<u>25882</u>
 <u>25882</u>   |13..
 081660  |
  <u>77646</u>  |
  04014<strong>0</strong> |
         |
         |
</pre>
<p>En 40140 combien de fois 25882, il y va 1 fois</p>
<p>Je recopie la ligne 25882</p>
<p>2 et 8, 10</p>

xt/data/13-prep-division.html  view on Meta::CPAN

<p>et 2, 11</p>
<p>Je pose 2 et je retiens 1</p>
<p>5 et 1, 6</p>
<p>et 4, 10</p>
<p>Je pose 4 et je retiens 1</p>
<p>2 et 1, 3</p>
<p>et 1, 4</p>
<p>Je pose 1 et je ne retiens rien</p>
<pre>
 <u>     </u>
 34048000|<u><em>25882</em></u>
 <u>25882</u>   |13<strong>1</strong>.
 081660  |
  <u>77646</u>  |
  0<em>40140</em> |
   <u><strong>25882</strong></u> |
   <strong>14258</strong> |
</pre>
<p>J'abaisse le 0</p>
<pre>
 <u>     </u>
 3404800<em>0</em>|<u>25882</u>
 <u>25882</u>   |131.
 081660  |
  <u>77646</u>  |
  040140 |
   <u>25882</u> |
   14258<strong>0</strong>|
         |
         |
</pre>
<p>En 142580 combien de fois 25882, il y va 5 fois</p>

xt/data/13-prep-division.html  view on Meta::CPAN

<p>Je pose 1 et je ne retiens rien</p>
<p>9 et 3, 12</p>
<p>Je pose 3 et je retiens 1</p>
<p>2 et 1, 3</p>
<p>et 1, 4</p>
<p>Je pose 1 et je ne retiens rien</p>
<p>1 et 0, 1</p>
<p>Je pose 0 et je ne retiens rien</p>
<pre>
 <u>     </u>
 34048000|<u><em>25882</em></u>
 <u>25882</u>   |131<strong>5</strong>
 081660  |
  <u>77646</u>  |
  040140 |
   <u>25882</u> |
   <em>142580</em>|
   <u><strong>129410</strong></u>|
   <strong>013170</strong>|
</pre>
<h1>Division de 26048000 par 25882, avec préparation, base 10</h1>

xt/data/16-div-boat.csv  view on Meta::CPAN

6;SUB02;5;41;;-2;6;41;1;0;0;;0;0;0;;0;0;
6;WRI02;5;4;;0;0;;0;0;0;;0;-3;6;5;0;0;
6;MUL01;4;5;20;1;12;4;0;3;5;5;1;0;0;;0;0;
6;ADD02;4;24;;0;0;;0;0;0;;0;0;0;;0;0;
6;SUB02;4;28;;-2;5;28;1;0;0;;0;0;0;;0;0;
6;WRI02;4;2;;0;0;;0;0;0;;0;-3;5;4;0;0;
6;MUL01;4;2;8;1;12;4;0;3;4;2;1;0;0;;0;0;
6;ADD02;2;10;;0;0;;0;0;0;;0;0;0;;0;0;
6;SUB02;0;10;;-2;4;10;1;0;0;;0;0;0;;0;0;
0;WRI04;0;;;0;0;;0;0;0;;0;-3;4;0;0;0;
9;TIT12;34048000;25882;10;0;0;;0;0;0;;0;0;0;;0;0;
6;WRI00;;;;0;0;;0;0;0;;0;0;9;34048000{;0;0;
6;DRA02;;;;0;0;;0;0;0;;0;0;1;;0;8;
9;WRI00;;;;0;0;;0;0;0;;0;1;5;2;0;0;
9;WRI00;;;;0;0;;0;0;0;;0;1;4;8;0;0;
9;WRI00;;;;0;0;;0;0;0;;0;1;3;8;0;0;
9;WRI00;;;;0;0;;0;0;0;;0;1;2;5;0;0;
4;WRI00;;;;0;0;;0;0;0;;0;1;1;2;0;0;
5;DIV01;3;2;1;0;0;;0;0;0;;0;0;10;1;0;0;
6;MUL01;1;2;2;1;10;1;0;1;5;2;1;0;0;;0;0;
6;SUB02;6;8;;0;5;8;1;0;0;;0;0;0;;0;0;
6;WRI03;6;0;;0;0;;0;0;0;;0;-1;5;6;0;0;

xt/data/16-div-boat.html  view on Meta::CPAN

<p>Je pose 0</p>
<pre>
    <strong>045</strong>
   <strike><em>1081</em></strike><strong>7</strong>
  <strike>1402<em>20</em></strike><strong>2</strong>
 <u><strike>246960<em>00</em></strike></u>{954
  <strike>258822<em>2</em></strike>   <em> </em>
   <strike>2588<em>8</em></strike>
    <strike><em>258</em></strike>
</pre>
<h1>Division de 34048000 par 25882, procédé "bateau", base 10</h1>
<pre>
 <u><strong>34048000</strong></u><strong>{</strong>
 <strong>25882</strong>
</pre>
<p>En 3 combien de fois 2, il y va 1 fois</p>
<pre>
 <u>34048000</u>{<strong>1</strong>
 25882
</pre>
<p>1 fois 2, 2</p>
<p>et 6, 8</p>
<p>Je pose 6 et je ne retiens rien</p>
<p>1 fois 8, 8</p>
<p>et 6, 14</p>
<p>Je pose 6 et je retiens 1</p>
<p>1 fois 8, 8</p>
<p>et 1, 9</p>

xt/data/16-div-boat.html  view on Meta::CPAN

<p>1 fois 5, 5</p>
<p>et 1, 6</p>
<p>et 8, 14</p>
<p>Je pose 8 et je retiens 1</p>
<p>1 fois 2, 2</p>
<p>et 1, 3</p>
<p>et 0, 3</p>
<p>Je pose 0</p>
<pre>
 <strong>08166</strong>
 <u><strike><em>34048</em></strike>000</u>{1
 <strike><em>25882</em></strike>    <em> </em>
</pre>
<pre>
 08166
 <u><strike>34048</strike>000</u>{1
 <strike>25882</strike><strong>2</strong>
  <strong>2588</strong>
</pre>
<p>En 8 combien de fois 2, il y va 4 fois</p>
<p>Je triche, j'essaie directement 3</p>
<pre>
 08166
 <u><strike>34048</strike>000</u>{1<strong>3</strong>
 <strike>25882</strike>2
  2588
</pre>
<p>3 fois 2, 6</p>
<p>et 4, 10</p>
<p>Je pose 4 et je retiens 1</p>
<p>3 fois 8, 24</p>
<p>et 1, 25</p>
<p>et 1, 26</p>
<p>Je pose 1 et je retiens 2</p>

xt/data/16-div-boat.html  view on Meta::CPAN

<p>et 2, 17</p>
<p>et 4, 21</p>
<p>Je pose 4 et je retiens 2</p>
<p>3 fois 2, 6</p>
<p>et 2, 8</p>
<p>et 0, 8</p>
<p>Je pose 0</p>
<pre>
  <strong>0401</strong>
 0<strike><em>8166</em></strike><strong>4</strong>
 <u><strike>3404<em>80</em></strike>00</u>{13
 <strike>25882<em>2</em></strike>    <em> </em>
  <strike><em>2588</em></strike>
</pre>
<pre>
  0401
 0<strike>8166</strike>4
 <u><strike>340480</strike>00</u>{13
 <strike>258822</strike><strong>2</strong>
  <strike>2588</strike><strong>8</strong>
   <strong>258</strong>
</pre>
<p>En 4 combien de fois 2, il y va 2 fois</p>
<p>Je triche, j'essaie directement 1</p>
<pre>
  0401
 0<strike>8166</strike>4
 <u><strike>340480</strike>00</u>{13<strong>1</strong>
 <strike>258822</strike>2
  <strike>2588</strike>8
   258
</pre>
<p>1 fois 2, 2</p>
<p>et 8, 10</p>
<p>Je pose 8 et je retiens 1</p>
<p>1 fois 8, 8</p>
<p>et 1, 9</p>
<p>et 5, 14</p>

xt/data/16-div-boat.html  view on Meta::CPAN

<p>et 4, 10</p>
<p>Je pose 4 et je retiens 1</p>
<p>1 fois 2, 2</p>
<p>et 1, 3</p>
<p>et 1, 4</p>
<p>Je pose 1</p>
<pre>
   <strong>142</strong>
  0<strike><em>401</em></strike><strong>5</strong>
 0<strike>816<em>64</em></strike><strong>8</strong>
 <u><strike>34048<em>00</em></strike>0</u>{131
 <strike>258822<em>2</em></strike>    <em> </em>
  <strike>2588<em>8</em></strike>
   <strike><em>258</em></strike>
</pre>
<pre>
   142
  0<strike>401</strike>5
 0<strike>81664</strike>8
 <u><strike>3404800</strike>0</u>{131
 <strike>2588222</strike><strong>2</strong>
  <strike>25888</strike><strong>8</strong>
   <strike>258</strike><strong>8</strong>
    <strong>25</strong>
</pre>
<p>En 14 combien de fois 2, il y va 7 fois</p>
<p>Je triche, j'essaie directement 5</p>
<pre>
   142
  0<strike>401</strike>5
 0<strike>81664</strike>8
 <u><strike>3404800</strike>0</u>{131<strong>5</strong>
 <strike>2588222</strike>2
  <strike>25888</strike>8
   <strike>258</strike>8
    25
</pre>
<p>5 fois 2, 10</p>
<p>et 0, 10</p>
<p>Je pose 0 et je retiens 1</p>
<p>5 fois 8, 40</p>
<p>et 1, 41</p>

xt/data/16-div-boat.html  view on Meta::CPAN

<p>Je pose 3 et je retiens 3</p>
<p>5 fois 2, 10</p>
<p>et 3, 13</p>
<p>et 1, 14</p>
<p>Je pose 1</p>
<pre>
    <strong>13</strong>
   <strike><em>142</em></strike><strong>1</strong>
  0<strike>40<em>15</em></strike><strong>7</strong>
 0<strike>8166<em>48</em></strike><strong>0</strong>
 <u><strike>340480<em>00</em></strike></u>{1315
 <strike>2588222<em>2</em></strike>    <em> </em>
  <strike>25888<em>8</em></strike>
   <strike>258<em>8</em></strike>
    <strike><em>25</em></strike>
</pre>



( run in 1.953 second using v1.01-cache-2.11-cpan-39bf76dae61 )