P-Adic numbers, basic: Difference between revisions
Content added Content deleted
m (→{{header|Raku}}: insignificant changes) |
(→{{header|Raku}}: add a gist method and output changes) |
||
Line 1,602: | Line 1,602: | ||
<lang perl6># 20210225 Raku programming solution |
<lang perl6># 20210225 Raku programming solution |
||
#!/usr/bin/env raku |
|||
⚫ | |||
⚫ | |||
method r2pa (Rat $x is copy, \p, \d) { # Reference: math.stackexchange.com/a/1187037 |
method r2pa (Rat $x is copy, \p, \d) { # Reference: math.stackexchange.com/a/1187037 |
||
self.p = p; |
|||
while +self.v < d { |
while +self.v < d { |
||
my %d = ^p Z=> (( $x «-« ^p ) »/» p )».&{ .denominator % p }; |
my %d = ^p Z=> (( $x «-« ^p ) »/» p )».&{ .denominator % p }; # .kv |
||
for %d.keys { self.v.unshift: $_ and last if %d{$_} != 0 } |
for %d.keys { self.v.unshift: $_ and last if %d{$_} != 0 } |
||
$x = ($x - self.v.first) / p |
$x = ($x - self.v.first) / p |
||
} |
} |
||
self |
self |
||
} |
} |
||
method add (Padic \x, \p) { |
method add (Padic \x, \p) { |
||
my $div = 0; |
my $div = 0; |
||
return Padic.new: |
|||
⚫ | |||
p => p, |
|||
⚫ | |||
⚫ | |||
{ 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{$_} } |
|||
} |
} |
||
} |
} |
||
my \DATA = < 5/8 353/30809 47 11 > ; |
|||
given my $a = Padic.new { say .r2pa: DATA[0], DATA[2], DATA[3] } |
|||
given my $b = Padic.new { say .r2pa: |
given my $b = Padic.new { say .r2pa: DATA[1], DATA[2], DATA[3] } |
||
say $a.add: $b, |
say $a.add: $b, DATA[2] ; |
||
given my $c = Padic.new { say .r2pa: |
given my $c = Padic.new { say .r2pa: DATA[0]+DATA[1] , DATA[2], DATA[3] } |
||
</lang> |
</lang> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre>… 29 17 29 17 29 17 29 17 29 17 30 ₄₇ |
||
… 4 13 42 28 43 43 34 36 25 20 1 ₄₇ |
|||
… 33 31 24 46 26 14 17 7 7 37 31 ₄₇ |
|||
… 33 31 24 46 26 14 17 7 7 37 31 ₄₇</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |