Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
26
Task/Disarium-numbers/Picat/disarium-numbers-1.picat
Normal file
26
Task/Disarium-numbers/Picat/disarium-numbers-1.picat
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
main =>
|
||||
Limit = 19,
|
||||
D = [],
|
||||
N = 0,
|
||||
printf("The first %d Disarium numbers are:\n",Limit),
|
||||
while (D.len < Limit)
|
||||
if disarium_number(N) then
|
||||
D := D ++ [N]
|
||||
end,
|
||||
N := N + 1,
|
||||
if N mod 10_000_000 == 0 then
|
||||
println(test=N)
|
||||
end
|
||||
end,
|
||||
println(D).
|
||||
|
||||
disarium_number(N) =>
|
||||
Sum = 0,
|
||||
Digits = N.to_string.len,
|
||||
X = N,
|
||||
while (X != 0, Sum <= N)
|
||||
Sum := Sum + (X mod 10) ** Digits,
|
||||
Digits := Digits - 1,
|
||||
X := X div 10
|
||||
end,
|
||||
Sum == N.
|
||||
36
Task/Disarium-numbers/Picat/disarium-numbers-2.picat
Normal file
36
Task/Disarium-numbers/Picat/disarium-numbers-2.picat
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import sat.
|
||||
% import cp.
|
||||
|
||||
main =>
|
||||
D = [],
|
||||
Limit = 19,
|
||||
Base = 10,
|
||||
foreach(Len in 1..20, D.len < Limit)
|
||||
Nums = disarium_number_cp(Len,Base),
|
||||
if Nums.len > 0 then
|
||||
foreach(Num in Nums)
|
||||
B = to_radix_string(Num,Base),
|
||||
D := D ++ [B]
|
||||
end
|
||||
end
|
||||
end,
|
||||
printf("The first %d Disarius numbers in base %d:\n",D.len, Base),
|
||||
println(D[1..Limit]),
|
||||
nl.
|
||||
|
||||
% Find all Disarium of a certain length
|
||||
disarium_number_cp(Len,Base) = findall(N,disarium_number_cp(Len,Base,N)).sort.
|
||||
|
||||
% Find a Disarium number of a certain length
|
||||
disarium_number_cp(Len,Base,N) =>
|
||||
X = new_list(Len),
|
||||
X :: 0..Base-1,
|
||||
N :: Base**(Len-1)-1..Base**Len-1,
|
||||
N #= sum([X[I]**I : I in 1..Len]),
|
||||
to_num(X,Base,N), % convert X <=> N
|
||||
solve($[],X++[N]).
|
||||
|
||||
% Converts a number Num to/from a list of integer List given a base Base
|
||||
to_num(List, Base, Num) =>
|
||||
Len = length(List),
|
||||
Num #= sum([List[I]*Base**(Len-I) : I in 1..Len]).
|
||||
Loading…
Add table
Add a link
Reference in a new issue