Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
3
Task/Hailstone-sequence/Prolog/hailstone-sequence-1.pro
Normal file
3
Task/Hailstone-sequence/Prolog/hailstone-sequence-1.pro
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
hailstone(1,[1]) :- !.
|
||||
hailstone(N,[N|S]) :- 0 is N mod 2, N1 is N / 2, hailstone(N1,S).
|
||||
hailstone(N,[N|S]) :- 1 is N mod 2, N1 is (3 * N) + 1, hailstone(N1, S).
|
||||
4
Task/Hailstone-sequence/Prolog/hailstone-sequence-2.pro
Normal file
4
Task/Hailstone-sequence/Prolog/hailstone-sequence-2.pro
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
hailstone(27,X),
|
||||
length(X,112),
|
||||
append([27, 82, 41, 124], _, X),
|
||||
append(_, [8, 4, 2, 1], X).
|
||||
10
Task/Hailstone-sequence/Prolog/hailstone-sequence-3.pro
Normal file
10
Task/Hailstone-sequence/Prolog/hailstone-sequence-3.pro
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
longestHailstoneSequence(M, Seq, Len) :- longesthailstone(M, 1, 1, Seq, Len).
|
||||
longesthailstone(1, Cn, Cl, Mn, Ml):- Mn = Cn,
|
||||
Ml = Cl.
|
||||
longesthailstone(N, _, Cl, Mn, Ml) :- hailstone(N, X),
|
||||
length(X, L),
|
||||
Cl < L,
|
||||
N1 is N-1,
|
||||
longesthailstone(N1, N, L, Mn, Ml).
|
||||
longesthailstone(N, Cn, Cl, Mn, Ml) :- N1 is N-1,
|
||||
longesthailstone(N1, Cn, Cl, Mn, Ml).
|
||||
1
Task/Hailstone-sequence/Prolog/hailstone-sequence-4.pro
Normal file
1
Task/Hailstone-sequence/Prolog/hailstone-sequence-4.pro
Normal file
|
|
@ -0,0 +1 @@
|
|||
longestHailstoneSequence(100000, Seq, Len).
|
||||
17
Task/Hailstone-sequence/Prolog/hailstone-sequence-5.pro
Normal file
17
Task/Hailstone-sequence/Prolog/hailstone-sequence-5.pro
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
:- use_module(library(chr)).
|
||||
:- chr_option(debug, off).
|
||||
:- chr_option(optimize, full).
|
||||
|
||||
:- chr_constraint collatz/2, hailstone/1, clean/0.
|
||||
|
||||
% to remove all constraints hailstone/1 after computation
|
||||
clean @ clean \ hailstone(_) <=> true.
|
||||
clean @ clean <=> true.
|
||||
|
||||
% compute Collatz number
|
||||
init @ collatz(1,X) <=> X = 1 | true.
|
||||
collatz @ collatz(N, C) <=> (N mod 2 =:= 0 -> C is N / 2; C is 3 * N + 1).
|
||||
|
||||
% Hailstone loop
|
||||
hailstone(1) ==> true.
|
||||
hailstone(N) ==> N \= 1 | collatz(N, H), hailstone(H).
|
||||
6
Task/Hailstone-sequence/Prolog/hailstone-sequence-6.pro
Normal file
6
Task/Hailstone-sequence/Prolog/hailstone-sequence-6.pro
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
task1 :-
|
||||
hailstone(27),
|
||||
findall(X, find_chr_constraint(hailstone(X)), L),
|
||||
clean,
|
||||
% check the requirements
|
||||
( (length(L, 112), append([27, 82, 41, 124 | _], [8,4,2,1], L)) -> writeln(ok); writeln(ko)).
|
||||
22
Task/Hailstone-sequence/Prolog/hailstone-sequence-7.pro
Normal file
22
Task/Hailstone-sequence/Prolog/hailstone-sequence-7.pro
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
longest_sequence :-
|
||||
seq(2, 100000, 1-[1], Len-V),
|
||||
format('For ~w sequence has ~w len ! ~n', [V, Len]).
|
||||
|
||||
|
||||
% walk through 2 to 100000 and compute the length of the sequences
|
||||
% memorize the longest
|
||||
seq(N, Max, Len-V, Len-V) :- N is Max + 1, !.
|
||||
seq(N, Max, CLen - CV, FLen - FV) :-
|
||||
len_seq(N, Len - N),
|
||||
( Len > CLen -> Len1 = Len, V1 = [N]
|
||||
; Len = CLen -> Len1 = Len, V1 = [N | CV]
|
||||
; Len1 = CLen, V1 = CV),
|
||||
N1 is N+1,
|
||||
seq(N1, Max, Len1 - V1, FLen - FV).
|
||||
|
||||
% compute the len of the Hailstone sequence for a number
|
||||
len_seq(N, Len - N) :-
|
||||
hailstone(N),
|
||||
findall(hailstone(X), find_chr_constraint(hailstone(X)), L),
|
||||
length(L, Len),
|
||||
clean.
|
||||
Loading…
Add table
Add a link
Reference in a new issue