git.shiar.nl
/
sheet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
73b157a
)
base: group related columns and rows
author
Mischa POSLAWSKY
<perl@shiar.org>
Mon, 8 Nov 2021 19:19:33 +0000
(20:19 +0100)
committer
Mischa POSLAWSKY
<perl@shiar.org>
Tue, 9 Nov 2021 03:14:15 +0000
(
04:14
+0100)
Divide about halfway conveniently after decimal, and after every 8-16 rows.
base.plp
patch
|
blob
|
history
diff --git
a/base.plp
b/base.plp
index f1ed06cfa42265c32a2719ae78819896a7e4a55e..226a4cd2ae2632dff9630131baf130198248efe8 100644
(file)
--- a/
base.plp
+++ b/
base.plp
@@
-15,20
+15,53
@@
Html({
my @cols = (2, 6, 8, 9, 10, 12, 16, 18, 20);
my @morecols = (2 .. 6, 8, 9, 10, 12, 16, 18, 20, 24, 32, 36, 64);
my @char = (0..9, 'A'..'Z', 'a'..'z');
my @cols = (2, 6, 8, 9, 10, 12, 16, 18, 20);
my @morecols = (2 .. 6, 8, 9, 10, 12, 16, 18, 20, 24, 32, 36, 64);
my @char = (0..9, 'A'..'Z', 'a'..'z');
+my %RADIXNAME = (
+ 2 => 'binary',
+ 3 => 'ternary',
+ #4 => 'quaternary',
+ #5 => 'quinary',
+ 6 => 'senary',
+ 8 => 'octal',
+ #9 => 'nonary',
+ 10 => 'decimal',
+ 12 => 'dozenal', # duodecimal
+ 16 => 'hexadecimal',
+ 20 => 'vigesimal',
+ #36 => 'double-senary',
+ 60 => 'sexagesimal',
+ #64 => 'double-octal',
+);
:>
<h1>Number bases</h1>
<h2>Radix economy</h2>
:>
<h1>Number bases</h1>
<h2>Radix economy</h2>
-<table>
+<table
class=mapped
>
<:
<:
+sub showcolhead {
+ print '<col>';
+ my @spans;
+ $spans[ $_ > 10 ]++ for @_;
+ print "<colgroup span=$_>" for @spans;
+ print '<thead><tr><th>';
+ for (@_) {
+ print '<th>', $_ < 36 ? $char[$_] : $char[35].'+'.$char[$_ - 35];
+ print " <small>($_)</small>" for join(', ',
+ $RADIXNAME{$_} // (),
+ $_ >= 10 ? "base$_" : (),
+ ) || ();
+ }
+ say '</thead>';
+}
+
sub radix_economy {
my ($val, $radix) = @_;
return $radix * int(log($val) / log($radix) + 1);
}
use List::Util 'sum';
sub radix_economy {
my ($val, $radix) = @_;
return $radix * int(log($val) / log($radix) + 1);
}
use List::Util 'sum';
-print '<tr><th>';
-print '<th>', $_ for @morecols;
+
+showcolhead(@morecols);
+
for my $max (100, 255, 1024) {
print '<tr><th>⍳', $max;
for my $radix (@morecols) {
for my $max (100, 255, 1024) {
print '<tr><th>⍳', $max;
for my $radix (@morecols) {
@@
-39,11
+72,8
@@
for my $max (100, 255, 1024) {
:></table>
<h2>Reciprocal fractions (n⁻¹)</h2>
:></table>
<h2>Reciprocal fractions (n⁻¹)</h2>
-<table>
+<table
class=mapped
>
<:
<:
-print '<tr><th>';
-print '<th>', $_ for @cols;
-
use Math::BigFloat;
my $count = 40;
use Math::BigFloat;
my $count = 40;
@@
-80,7
+110,10
@@
ADD_DIGITS:
printf '<td%s style="text-align:left">%s', $class && qq( class="$class"), $out;
}
printf '<td%s style="text-align:left">%s', $class && qq( class="$class"), $out;
}
+showcolhead(@cols);
+
for my $n (2 .. $count) {
for my $n (2 .. $count) {
+ print '<tbody>' if $n % 8 == 1;
print '<tr>';
print '<th>', $n;
for my $radix (@cols) {
print '<tr>';
print '<th>', $n;
for my $radix (@cols) {
@@
-88,6
+121,7
@@
for my $n (2 .. $count) {
Math::BigFloat->accuracy($accuracy);
showfrac(scalar Math::BigFloat->new(1)->bdiv($n, $accuracy+1), $radix);
}
Math::BigFloat->accuracy($accuracy);
showfrac(scalar Math::BigFloat->new(1)->bdiv($n, $accuracy+1), $radix);
}
+ say '';
}
:></table>
}
:></table>
@@
-95,7
+129,7
@@
for my $n (2 .. $count) {
<hr>
<h2>Duplication (2ⁿ)</h2>
<hr>
<h2>Duplication (2ⁿ)</h2>
-<table>
+<table
class=mapped
>
<:
sub showint {
my ($int, $radix) = @_;
<:
sub showint {
my ($int, $radix) = @_;
@@
-109,16
+143,19
@@
sub showint {
}
@cols = grep { not $_ ~~ [2,8,16] } @cols, 36;
}
@cols = grep { not $_ ~~ [2,8,16] } @cols, 36;
-print '<tr><th>';
-print '<th>', $_ for @cols;
+showcolhead(@cols);
-for my $n (3 .. 16, 18, 20, 24, 30, 32, 36, 40, 48, 50, 60, 64) {
+for my $n (0, 3 .. 16, 0, 18, 20, 24, 30, 32, 36, 40, 48, 50, 60, 64) {
+ if (!$n) {
+ print '<tbody>';
+ next;
+ }
print '<tr>';
print '<th>', $n;
for my $radix (@cols) {
print '<td style="text-align:right">', showint(2 ** $n, $radix);
}
print '<tr>';
print '<th>', $n;
for my $radix (@cols) {
print '<td style="text-align:right">', showint(2 ** $n, $radix);
}
-
print
'<th>', {
+
say
'<th>', {
4 => 'nibble',
8 => 'octet',
16 => '2o',
4 => 'nibble',
8 => 'octet',
16 => '2o',