P-Adic numbers, basic: Difference between revisions
→{{header|Raku}}: add a gist method and output changes
m (→{{header|Raku}}: insignificant changes) |
(→{{header|Raku}}: add a gist method and output changes) |
||
Line 1,602:
<lang perl6># 20210225 Raku programming solution
#!/usr/bin/env raku
class Padic { has @.v is default([]) is rw ;▼
▲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;
while +self.v < d {
my %d = ^p Z=> (( $x «-« ^p ) »/» p )».&{ .denominator % p }; # .kv
for %d.keys { self.v.unshift: $_ and last if %d{$_} != 0 }
$x = ($x - self.v.first) / p
}
self
}
method add (Padic \x, \p) {
my $div = 0;
return Padic.new:
reverse gather for ( self.v.reverse Z x.v.reverse )».sum { ▼
}▼
{ take ( $_ + $div ) % p and $div = $_ div p } # .polymod
method gist { # en.wikipedia.org/wiki/P-adic_number#Notation
my %H = (0..9) Z=> ('0'..'9'); # (0x2080 .. 0x2089);
'… ' ~ self.v ~ ' ' ~ [~] self.p.comb».&{ %H{$_} }
}
}
given my $a = Padic.new { say .r2pa: DATA[0], DATA[2], DATA[3] }
given my $b = Padic.new { say .r2pa:
say $a.add: $b,
given my $c = Padic.new { say .r2pa:
</lang>
{{out}}
<pre>
=={{header|Wren}}==
|