fold(1,EIList):- numbersList(1,5,EIList).
fold(2,EIList):- numbersList(6,10,EIList).
fold(3,EIList):- numbersList(11,15,EIList).
fold(4,EIList):- numbersList(16,20,EIList).
fold(5,EIList):- numbersList(21,25,EIList).
fold(6,EIList):- numbersList(26,30,EIList).
fold(7,EIList):- numbersList(31,35,EIList).
fold(8,EIList):- numbersList(36,40,EIList).
fold(9,EIList):- numbersList(41,46,EIList).
fold(10,EIList):- numbersList(47,52,EIList).



add(X,Y,Z):- Z is X+Y.


reIndexEI(EI,NewIndex):-
	ex(EI,E,1),
	portray_clause(ex(NewIndex,E,1)).


timeShift('Day1',0).
timeShift('Day3',EIShift):- EIShift is 52*1.
timeShift('Day7',EIShift):- EIShift is 52*2.
timeShift('Day14',EIShift):- EIShift is 52*3.
onedayEI(EIs):- numbersList(1,52,EIs).

ri:- 
	numbersList(1,52,NewIndexes0),
	randseq(52,52,RandomOrderList00),
	randseq(52,52,RandomOrderList0),

	maplist(add(52),NewIndexes0,NewIndex_Day3),
	maplist(add(104),NewIndexes0,NewIndex_Day7),
	maplist(add(156),NewIndexes0,NewIndex_Day14),
	maplist(add(52),RandomOrderList0,OldIndex_Day3),
	maplist(add(104),RandomOrderList0,OldIndex_Day7),
	maplist(add(156),RandomOrderList0,OldIndex_Day14),
	
	tell('newEx.pl'),
   	maplist(reIndexEI,RandomOrderList0,NewIndexes0),
	maplist(reIndexEI,OldIndex_Day3,NewIndex_Day3),
	maplist(reIndexEI,OldIndex_Day7,NewIndex_Day7),
	maplist(reIndexEI,OldIndex_Day14,NewIndex_Day14),
	told.
	



fold:-
	consult('newEx.pl'),
	outputProgolCrossValidationData('Day1'),
	outputProgolCrossValidationData('Day3'),
	outputProgolCrossValidationData('Day7'),
	outputProgolCrossValidationData('Day14').



outputProgolCrossValidationData(Time):-
forAll(fold(FoldID,TestEIs),outputProgolExs(Time,FoldID,TestEIs)).



outputProgolExs(Time,FoldID,TestEIs0):-
onedayEI(EIs0), ord_subtract(EIs0,TestEIs0,TrainingEIs0),
timeShift(Time,EIShift),
maplist(add(EIShift),TrainingEIs0,TrainingEIs),
maplist(add(EIShift),TestEIs0,TestEIs),
	
atomic_concat([Time,'_',test,'_',FoldID,'.pl'],TestDataFileName),
	tell(TestDataFileName),
	maplist(outputOriginalEx,TestEIs),
	told,

atomic_concat([Time,'_',train,'_',FoldID,'.pl'],TrainingDataFileName),
	tell(TrainingDataFileName),
	maplist(outputOriginalEx,TrainingEIs),
	told.
	
outputOriginalEx(EI):-
	ex1(EI,E,1),
	portray_clause(E).


/*
day3:-
	consult('newEx.pl'),
	numbersList(1,52,EIs),
	Time='Day1',	forAll(fold(FoldID,TestEIs),outputProgolExs(Time,FoldID,TestEIs,EIs)).


outputProgolExs(Time,FoldID,TestEIs,EIs):-
	atomic_concat([Time,'_',train,'_',FoldID,'.pl'],TrainingDataFileName),
atomic_concat([Time,'_',test,'_',FoldID,'.pl'],TestDataFileName),
	tell(TestDataFileName),
	maplist(outputOriginalEx,TestEIs),
	told,

	ord_subtract(EIs,TestEIs,TrainingEIs),
	tell(TrainingDataFileName),
	maplist(outputOriginalEx,TrainingEIs),
	told.
*/