2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
77
Task/Five-weekends/NewLISP/five-weekends.newlisp
Normal file
77
Task/Five-weekends/NewLISP/five-weekends.newlisp
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#!/usr/local/bin/newlisp
|
||||
|
||||
(context 'KR)
|
||||
|
||||
(define (Kraitchik year month day)
|
||||
; See https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Kraitchik.27s_variation
|
||||
; Function adapted for specific task (not for general usage).
|
||||
(if (or (= 1 month) (= 2 month))
|
||||
(dec year)
|
||||
)
|
||||
;- - - -
|
||||
(setf m-table '(_ 1 4 3 6 1 4 6 2 5 0 3 5)) ; - - - First element of list is dummy!
|
||||
(setf m (m-table month))
|
||||
;- - - -
|
||||
(setf c-table '(0 5 3 1))
|
||||
(setf century%4 (mod (int (slice (string year) 0 2)) 4))
|
||||
(setf c (c-table century%4))
|
||||
;- - - -
|
||||
(setf yy* (slice (string year) -2))
|
||||
(if (= "0" (yy* 0))
|
||||
(setf yy* (yy* 1))
|
||||
)
|
||||
(setf yy (int yy*))
|
||||
(setf y (mod (+ (/ yy 4) yy) 7))
|
||||
;- - - -
|
||||
(setf dow-table '(6 0 1 2 3 4 5))
|
||||
(dow-table (mod (+ day m c y) 7))
|
||||
)
|
||||
|
||||
(context 'MAIN)
|
||||
|
||||
(setf Fives 0)
|
||||
(setf NotFives 0)
|
||||
(setf Report '())
|
||||
(setf months-table '((1 "Jan") (3 "Mar") (5 "May") (7 "Jul") (8 "Aug") (10 "Oct") (12 "Dec")))
|
||||
|
||||
(for (y 1900 2100)
|
||||
(setf FivesFound 0)
|
||||
(setf Names "")
|
||||
(dolist (m '(1 3 5 7 8 10 12))
|
||||
(setf Dow (KR:Kraitchik y m 1))
|
||||
(if (= 5 Dow)
|
||||
(begin
|
||||
(++ FivesFound)
|
||||
(setf Names (string Names " " (lookup m months-table)))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(if (zero? FivesFound)
|
||||
(++ NotFives)
|
||||
(begin
|
||||
(setf Report (append Report (list (list y FivesFound (string "(" Names " )")))))
|
||||
(setf Fives (+ Fives FivesFound))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
;- - - - Display all report data
|
||||
;(dolist (x Report)
|
||||
; (println (x 0) ": " (x 1) " " (x 2))
|
||||
;)
|
||||
|
||||
|
||||
;- - - - Display only first five and last five records
|
||||
(dolist (x (slice Report 0 5))
|
||||
(println (x 0) ": " (x 1) " " (x 2))
|
||||
)
|
||||
(println "...")
|
||||
(dolist (x (slice Report -5))
|
||||
(println (x 0) ": " (x 1) " " (x 2))
|
||||
)
|
||||
|
||||
(println "\nTotal months with five weekends: " Fives)
|
||||
(println "Years with no five weekends months: " NotFives)
|
||||
(exit)
|
||||
Loading…
Add table
Add a link
Reference in a new issue