198 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			198 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								days(Y,M,D,Total) :-
							 | 
						||
| 
								 | 
							
									years_to_days(Y, D1),
							 | 
						||
| 
								 | 
							
									months_to_day(M, Y, D2),
							 | 
						||
| 
								 | 
							
									Total is D1+D2+D-1.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								years_to_days(Y0, DY) :-
							 | 
						||
| 
								 | 
							
									Y1 is Y0-1900,
							 | 
						||
| 
								 | 
							
									DY is Y1*365+((Y1+3)//4).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								months_to_day(1,_,0).
							 | 
						||
| 
								 | 
							
								months_to_day(2,_,31).
							 | 
						||
| 
								 | 
							
								months_to_day(3,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(4,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(5,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(6,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(7,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(8,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+31+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(9,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+31+31+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(10,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+31+31+30+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(11,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+31+31+30+31+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(12,Y,DM) :-
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+31+31+30+31+30+ED.
							 | 
						||
| 
								 | 
							
								months_to_day(13,Y,DM) :- % should never succeed...
							 | 
						||
| 
								 | 
							
									extra_day(Y,ED),
							 | 
						||
| 
								 | 
							
									DM is 31+28+31+30+31+30+31+31+30+31+30+31+ED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extra_day(Y,1) :- Y mod 4 == 0, !.
							 | 
						||
| 
								 | 
							
								extra_day(_,0).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								date(Total, Y, M, D) :-
							 | 
						||
| 
								 | 
							
									get_years(Total, Y, DaysLeft),
							 | 
						||
| 
								 | 
							
									get_months(DaysLeft, Y, M, D0),
							 | 
						||
| 
								 | 
							
									D is D0+1.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								get_years(Total, Y, DaysLeft) :-
							 | 
						||
| 
								 | 
							
									daysperyear(Y,D0),
							 | 
						||
| 
								 | 
							
									D0 =< Total,
							 | 
						||
| 
								 | 
							
									Y1 is Y+1,
							 | 
						||
| 
								 | 
							
									daysperyear(Y1,D1),
							 | 
						||
| 
								 | 
							
									D1 > Total, !,
							 | 
						||
| 
								 | 
							
									DaysLeft is Total-D0.	
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								get_months(Total, Y, Month, Days) :-
							 | 
						||
| 
								 | 
							
									months_to_day(Month, Y, DM),
							 | 
						||
| 
								 | 
							
									DM =< Total,
							 | 
						||
| 
								 | 
							
									Month1 is Month+1,
							 | 
						||
| 
								 | 
							
									months_to_day(Month1, Y, DM1),
							 | 
						||
| 
								 | 
							
									DM1 > Total, !,
							 | 
						||
| 
								 | 
							
									Days is Total-DM.	
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								gendays(120,_) :- !.
							 | 
						||
| 
								 | 
							
								gendays(I0,D0) :- !,
							 | 
						||
| 
								 | 
							
									J is I0+1900,
							 | 
						||
| 
								 | 
							
									format('days(~d,~d).~n',[J,D0]),
							 | 
						||
| 
								 | 
							
									( I0 mod 4 =:= 0 -> D is D0+366 ; D is D0+365 ),
							 | 
						||
| 
								 | 
							
									I is I0+1,
							 | 
						||
| 
								 | 
							
									gendays(I, D).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								daysperyear(1900,0).
							 | 
						||
| 
								 | 
							
								daysperyear(1901,366).
							 | 
						||
| 
								 | 
							
								daysperyear(1902,731).
							 | 
						||
| 
								 | 
							
								daysperyear(1903,1096).
							 | 
						||
| 
								 | 
							
								daysperyear(1904,1461).
							 | 
						||
| 
								 | 
							
								daysperyear(1905,1827).
							 | 
						||
| 
								 | 
							
								daysperyear(1906,2192).
							 | 
						||
| 
								 | 
							
								daysperyear(1907,2557).
							 | 
						||
| 
								 | 
							
								daysperyear(1908,2922).
							 | 
						||
| 
								 | 
							
								daysperyear(1909,3288).
							 | 
						||
| 
								 | 
							
								daysperyear(1910,3653).
							 | 
						||
| 
								 | 
							
								daysperyear(1911,4018).
							 | 
						||
| 
								 | 
							
								daysperyear(1912,4383).
							 | 
						||
| 
								 | 
							
								daysperyear(1913,4749).
							 | 
						||
| 
								 | 
							
								daysperyear(1914,5114).
							 | 
						||
| 
								 | 
							
								daysperyear(1915,5479).
							 | 
						||
| 
								 | 
							
								daysperyear(1916,5844).
							 | 
						||
| 
								 | 
							
								daysperyear(1917,6210).
							 | 
						||
| 
								 | 
							
								daysperyear(1918,6575).
							 | 
						||
| 
								 | 
							
								daysperyear(1919,6940).
							 | 
						||
| 
								 | 
							
								daysperyear(1920,7305).
							 | 
						||
| 
								 | 
							
								daysperyear(1921,7671).
							 | 
						||
| 
								 | 
							
								daysperyear(1922,8036).
							 | 
						||
| 
								 | 
							
								daysperyear(1923,8401).
							 | 
						||
| 
								 | 
							
								daysperyear(1924,8766).
							 | 
						||
| 
								 | 
							
								daysperyear(1925,9132).
							 | 
						||
| 
								 | 
							
								daysperyear(1926,9497).
							 | 
						||
| 
								 | 
							
								daysperyear(1927,9862).
							 | 
						||
| 
								 | 
							
								daysperyear(1928,10227).
							 | 
						||
| 
								 | 
							
								daysperyear(1929,10593).
							 | 
						||
| 
								 | 
							
								daysperyear(1930,10958).
							 | 
						||
| 
								 | 
							
								daysperyear(1931,11323).
							 | 
						||
| 
								 | 
							
								daysperyear(1932,11688).
							 | 
						||
| 
								 | 
							
								daysperyear(1933,12054).
							 | 
						||
| 
								 | 
							
								daysperyear(1934,12419).
							 | 
						||
| 
								 | 
							
								daysperyear(1935,12784).
							 | 
						||
| 
								 | 
							
								daysperyear(1936,13149).
							 | 
						||
| 
								 | 
							
								daysperyear(1937,13515).
							 | 
						||
| 
								 | 
							
								daysperyear(1938,13880).
							 | 
						||
| 
								 | 
							
								daysperyear(1939,14245).
							 | 
						||
| 
								 | 
							
								daysperyear(1940,14610).
							 | 
						||
| 
								 | 
							
								daysperyear(1941,14976).
							 | 
						||
| 
								 | 
							
								daysperyear(1942,15341).
							 | 
						||
| 
								 | 
							
								daysperyear(1943,15706).
							 | 
						||
| 
								 | 
							
								daysperyear(1944,16071).
							 | 
						||
| 
								 | 
							
								daysperyear(1945,16437).
							 | 
						||
| 
								 | 
							
								daysperyear(1946,16802).
							 | 
						||
| 
								 | 
							
								daysperyear(1947,17167).
							 | 
						||
| 
								 | 
							
								daysperyear(1948,17532).
							 | 
						||
| 
								 | 
							
								daysperyear(1949,17898).
							 | 
						||
| 
								 | 
							
								daysperyear(1950,18263).
							 | 
						||
| 
								 | 
							
								daysperyear(1951,18628).
							 | 
						||
| 
								 | 
							
								daysperyear(1952,18993).
							 | 
						||
| 
								 | 
							
								daysperyear(1953,19359).
							 | 
						||
| 
								 | 
							
								daysperyear(1954,19724).
							 | 
						||
| 
								 | 
							
								daysperyear(1955,20089).
							 | 
						||
| 
								 | 
							
								daysperyear(1956,20454).
							 | 
						||
| 
								 | 
							
								daysperyear(1957,20820).
							 | 
						||
| 
								 | 
							
								daysperyear(1958,21185).
							 | 
						||
| 
								 | 
							
								daysperyear(1959,21550).
							 | 
						||
| 
								 | 
							
								daysperyear(1960,21915).
							 | 
						||
| 
								 | 
							
								daysperyear(1961,22281).
							 | 
						||
| 
								 | 
							
								daysperyear(1962,22646).
							 | 
						||
| 
								 | 
							
								daysperyear(1963,23011).
							 | 
						||
| 
								 | 
							
								daysperyear(1964,23376).
							 | 
						||
| 
								 | 
							
								daysperyear(1965,23742).
							 | 
						||
| 
								 | 
							
								daysperyear(1966,24107).
							 | 
						||
| 
								 | 
							
								daysperyear(1967,24472).
							 | 
						||
| 
								 | 
							
								daysperyear(1968,24837).
							 | 
						||
| 
								 | 
							
								daysperyear(1969,25203).
							 | 
						||
| 
								 | 
							
								daysperyear(1970,25568).
							 | 
						||
| 
								 | 
							
								daysperyear(1971,25933).
							 | 
						||
| 
								 | 
							
								daysperyear(1972,26298).
							 | 
						||
| 
								 | 
							
								daysperyear(1973,26664).
							 | 
						||
| 
								 | 
							
								daysperyear(1974,27029).
							 | 
						||
| 
								 | 
							
								daysperyear(1975,27394).
							 | 
						||
| 
								 | 
							
								daysperyear(1976,27759).
							 | 
						||
| 
								 | 
							
								daysperyear(1977,28125).
							 | 
						||
| 
								 | 
							
								daysperyear(1978,28490).
							 | 
						||
| 
								 | 
							
								daysperyear(1979,28855).
							 | 
						||
| 
								 | 
							
								daysperyear(1980,29220).
							 | 
						||
| 
								 | 
							
								daysperyear(1981,29586).
							 | 
						||
| 
								 | 
							
								daysperyear(1982,29951).
							 | 
						||
| 
								 | 
							
								daysperyear(1983,30316).
							 | 
						||
| 
								 | 
							
								daysperyear(1984,30681).
							 | 
						||
| 
								 | 
							
								daysperyear(1985,31047).
							 | 
						||
| 
								 | 
							
								daysperyear(1986,31412).
							 | 
						||
| 
								 | 
							
								daysperyear(1987,31777).
							 | 
						||
| 
								 | 
							
								daysperyear(1988,32142).
							 | 
						||
| 
								 | 
							
								daysperyear(1989,32508).
							 | 
						||
| 
								 | 
							
								daysperyear(1990,32873).
							 | 
						||
| 
								 | 
							
								daysperyear(1991,33238).
							 | 
						||
| 
								 | 
							
								daysperyear(1992,33603).
							 | 
						||
| 
								 | 
							
								daysperyear(1993,33969).
							 | 
						||
| 
								 | 
							
								daysperyear(1994,34334).
							 | 
						||
| 
								 | 
							
								daysperyear(1995,34699).
							 | 
						||
| 
								 | 
							
								daysperyear(1996,35064).
							 | 
						||
| 
								 | 
							
								daysperyear(1997,35430).
							 | 
						||
| 
								 | 
							
								daysperyear(1998,35795).
							 | 
						||
| 
								 | 
							
								daysperyear(1999,36160).
							 | 
						||
| 
								 | 
							
								daysperyear(2000,36525).
							 | 
						||
| 
								 | 
							
								daysperyear(2001,36891).
							 | 
						||
| 
								 | 
							
								daysperyear(2002,37256).
							 | 
						||
| 
								 | 
							
								daysperyear(2003,37621).
							 | 
						||
| 
								 | 
							
								daysperyear(2004,37986).
							 | 
						||
| 
								 | 
							
								daysperyear(2005,38352).
							 | 
						||
| 
								 | 
							
								daysperyear(2006,38717).
							 | 
						||
| 
								 | 
							
								daysperyear(2007,39082).
							 | 
						||
| 
								 | 
							
								daysperyear(2008,39447).
							 | 
						||
| 
								 | 
							
								daysperyear(2009,39813).
							 | 
						||
| 
								 | 
							
								daysperyear(2010,40178).
							 | 
						||
| 
								 | 
							
								daysperyear(2011,40543).
							 | 
						||
| 
								 | 
							
								daysperyear(2012,40908).
							 | 
						||
| 
								 | 
							
								daysperyear(2013,41274).
							 | 
						||
| 
								 | 
							
								daysperyear(2014,41639).
							 | 
						||
| 
								 | 
							
								daysperyear(2015,42004).
							 | 
						||
| 
								 | 
							
								daysperyear(2016,42369).
							 | 
						||
| 
								 | 
							
								daysperyear(2017,42735).
							 | 
						||
| 
								 | 
							
								daysperyear(2018,43100).
							 | 
						||
| 
								 | 
							
								daysperyear(2019,43465).
							 |