Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
94
Task/P-Adic-numbers-basic/Raku/p-adic-numbers-basic.raku
Normal file
94
Task/P-Adic-numbers-basic/Raku/p-adic-numbers-basic.raku
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# 20210225 Raku programming solution
|
||||
|
||||
#!/usr/bin/env raku
|
||||
|
||||
class Padic { has ($.p is default(2), %.v is default({})) is rw ;
|
||||
|
||||
method r2pa (Rat $x is copy, \p, \d) { # Reference: math.stackexchange.com/a/1187037
|
||||
self.p = p ;
|
||||
$x += p**d if $x < 0 ; # complement
|
||||
|
||||
my $lowerest = 0;
|
||||
my ($num,$den) = $x.nude;
|
||||
while ($den % p) == 0 { $den /= p and $lowerest-- }
|
||||
$x = $num / $den;
|
||||
|
||||
while +self.v < d {
|
||||
my %d = ^p Z=> (( $x «-« ^p ) »/» p )».&{ .denominator % p }; # .kv
|
||||
for %d.keys { self.v.{$lowerest++} = $_ and last if %d{$_} != 0 }
|
||||
$x = ($x - self.v.{$lowerest-1}) / p ;
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
method add (Padic \x, \d) {
|
||||
my $div = 0;
|
||||
my $lowerest = (self.v.keys.sort({.Int}).first,
|
||||
x.v.keys.sort({.Int}).first ).min ;
|
||||
return Padic.new:
|
||||
p => self.p,
|
||||
v => gather for ^d {
|
||||
my $power = $lowerest + $_;
|
||||
given ((self.v.{$power}//0)+(x.v.{$power}//0)+$div).polymod(x.p)
|
||||
{ take ($power, .[0]).Slip and $div = .[1] }
|
||||
}
|
||||
}
|
||||
|
||||
method gist {
|
||||
# en.wikipedia.org/wiki/P-adic_number#Notation
|
||||
# my %H = (0..9) Z=> ('₀'..'₉'); # (0x2080 .. 0x2089);
|
||||
# '⋯ ' ~ self.v ~ ' ' ~ [~] self.p.comb».&{ %H{$_} }
|
||||
|
||||
# express as a series
|
||||
my %H = ( 0…9 ,'-') Z=> ( '⁰','¹','²','³','⁴'…'⁹','⁻');
|
||||
[~] self.v.keys.sort({.Int}).map: {
|
||||
' + ' ~ self.v.{$_} ~ '*' ~ self.p ~ [~] $_.comb».&{ %H{$_}} }
|
||||
}
|
||||
}
|
||||
|
||||
my @T;
|
||||
for my \D = (
|
||||
#`[[ these are not working | ||||