Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
89
Task/Range-extraction/Prolog/range-extraction.pro
Normal file
89
Task/Range-extraction/Prolog/range-extraction.pro
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
range_extract :-
|
||||
L = [0, 1, 2, 4, 6, 7, 8, 11, 12, 14,
|
||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
|
||||
37, 38, 39] ,
|
||||
writeln(L),
|
||||
pack_Range(L, LP),
|
||||
maplist(study_Range, R, LP),
|
||||
extract_Range(LA, R),
|
||||
atom_chars(A, LA),
|
||||
writeln(A).
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% extract_Range(?In, ?Out)
|
||||
% In : '-6,-3--1,3-5,7-11,14,15,17-20' =>
|
||||
% Out : [-6], [-3--1], [3-5],[7-11], [14],[15], [17-20]
|
||||
%
|
||||
extract_Range([], []).
|
||||
|
||||
|
||||
extract_Range(X , [Range | Y1]) :-
|
||||
get_Range(X, U-U, Range, X1),
|
||||
extract_Range(X1, Y1).
|
||||
|
||||
|
||||
|
||||
get_Range([], Range-[], Range, []).
|
||||
get_Range([','|B], Range-[], Range, B) :- !.
|
||||
|
||||
get_Range([A | B], EC, Range, R) :-
|
||||
append_dl(EC, [A | U]-U, NEC),
|
||||
get_Range(B, NEC, Range, R).
|
||||
|
||||
|
||||
append_dl(X-Y, Y-Z, X-Z).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% study Range(?In, ?Out)
|
||||
% In : [-6]
|
||||
% Out : [-6,-6]
|
||||
%
|
||||
% In : [-3--1]
|
||||
% Out : [-3, -1]
|
||||
%
|
||||
study_Range(Range1, [Deb, Deb]) :-
|
||||
catch(number_chars(Deb, Range1), Deb, false).
|
||||
|
||||
study_Range(Range1, [Deb, Fin]) :-
|
||||
append(A, ['-'|B], Range1),
|
||||
A \= [],
|
||||
number_chars(Deb, A),
|
||||
number_chars(Fin, B).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
:- use_module(library(clpfd)).
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% Pack Range(?In, ?Out)
|
||||
% In : -6,
|
||||
% Out : [-6]
|
||||
%
|
||||
% In : -3, -2,-1
|
||||
% Out : [-3,-1]
|
||||
%
|
||||
pack_Range([],[]).
|
||||
|
||||
pack_Range([X|Rest],[[X | V]|Packed]):-
|
||||
run(X,Rest, [X|V], RRest),
|
||||
pack_Range(RRest,Packed).
|
||||
|
||||
|
||||
|
||||
run(Fin,[Other|RRest], [Deb, Fin],[Other|RRest]):-
|
||||
Fin #\= Deb,
|
||||
Fin #\= Deb + 1,
|
||||
Other #\= Fin+1.
|
||||
|
||||
run(Fin,[],[_Var, Fin],[]).
|
||||
|
||||
run(Var,[Var1|LRest],[Deb, Fin], RRest):-
|
||||
Fin #\= Deb,
|
||||
Fin #\= Deb + 1,
|
||||
Var1 #= Var + 1,
|
||||
run(Var1,LRest,[Deb, Fin], RRest).
|
||||
|
||||
run(Val,[Other|RRest], [Val, Val],[Other|RRest]).
|
||||
Loading…
Add table
Add a link
Reference in a new issue