Rare numbers: Difference between revisions
m
→{{header|Raku}}: correct a mistake and simplify a little
m (→{{header|Rust}}: typo) |
m (→{{header|Raku}}: correct a mistake and simplify a little) |
||
Line 4,607:
<lang perl6># 20220315 Raku programming solution
sub rare (\target where ( target >
my \digit = $ = 2;
Line 4,614:
my @diffs1 = 0,1,4,5,6;
# all possible digits pairs to
my @pairs = 0..9 X 0..9;
my @all_diffs = -9..9;
Line 4,628:
# lookup table for all the remaining diffs
given my %lookup_n { for @pairs -> \pair { $_{ [-] pair.values }.push: pair } }
loop {
Line 4,637 ⟶ 4,636:
my @terms = (@powers.reverse Z- @powers).grep: * > 0 ;
# create a cartesian product for all
# for the first use the very short one, for all other the complete 19 element
my @diff_list =
my @diff_list_iter = gather for @diff_list -> \k {
# remove invalid first diff/second diff combinations
{ take k
given (my (\a,\b) = k
when a == 0 && b != 0 { next }
when a == 1 && b ∉ [ -7, -5, -3, -1, 1, 3, 5, 7 ] { next }
Line 4,663 ⟶ 4,660:
# placeholder for the digits
my \dig = @ = 0 xx digit;
# generate a cartesian product for each identified diff using the lookup tables
my @
k == diffs ?? @numeric_digits !! %lookup_n{diffs[k]} }
# check each H (n+r) by using digit combination
for @c_iter -> \elt {
for elt.kv -> \i, \pair { dig[i,digit-1-i] = pair
# for numbers with odd # digits restore the middle digit
# which has been overwritten at the end of the previous cycle
|