From dd241141e48016292aaae8210c7aae62957c9ef5 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Mon, 23 Apr 2012 02:29:14 +0200 Subject: [PATCH] base: reorganise code --- base.plp | 59 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/base.plp b/base.plp index ad6961b..0ba0613 100644 --- a/base.plp +++ b/base.plp @@ -19,41 +19,52 @@ Html({ <: use Math::BigFloat; -my @cols = (2, 6, 8, 9, 10, 12, 16, 18, 60); +my @cols = (2, 6, 8, 9, 10, 12, 16, 18); +my $count = 42; print ''; print '', $_ for @cols; my @char = (0..9, 'A'..'Z', 'a'..'z'); -my $places = 48; +my $places = $count<<1; -for my $n (2 .. 25) { +sub shownum { + my ($num, $radix) = @_; + + my $out = ''; + my $class = ''; + my $zeros = 0; + +ADD_DIGITS: + for my $place (1 .. $places) { + $out .= $char[ $num->blsft(1, $radix) ]; + $num->bmod(1) or do { + $class = $out eq '1' ? 'l5' : $place == 1 ? 'l4' : 'l3'; + last; + }; + $zeros++ if $out =~ /^0+$/; + + for my $check ($zeros .. length($out)>>1) { + if (substr($out, -$check) eq substr($out, -$check*2, $check)) { + $class = $check == 1 ? 'l2' : 'l1'; + substr($out, -$check) = ''; + substr($out, -$check, 0) = ''; + $check .= ''; + last ADD_DIGITS; + } + } + } + printf '%s', $class && qq( class="$class"), $out; +} + +for my $n (2 .. $count) { print ''; print '', $n; for my $radix (@cols) { my $accuracy = int($places * log($radix) / log(10)); Math::BigFloat->accuracy($accuracy); - my $frac = Math::BigFloat->new(1)->bdiv($n, $accuracy+1); - my $out = ''; - my $class = ''; -ADD_DIGITS: - for my $place (1 .. $places) { - $out .= $char[ $frac->blsft(1, $radix) ]; - $frac->bmod(1) or do { - $class = $n == $radix ? 'l5' : $place == 1 ? 'l4' : 'l3'; - last; - }; - for my $check (log($n)/log($radix) .. length($out)>>1) { - if ($out =~ /[^0]/ and substr($out, -$check) eq substr($out, -$check*2, $check)) { - $class = $check == 1 ? 'l2' : 'l1'; - substr($out, -$check) = ''; - substr($out, -$check, 0) = '('; - last ADD_DIGITS; - } - } - } - printf '%s', $class && qq( class="$class"), $out; + shownum(scalar Math::BigFloat->new(1)->bdiv($n, $accuracy+1), $radix); } -# \x{305} } + :> -- 2.30.0