Last Friday of each month: Difference between revisions
Content added Content deleted
(a new quite simple task) |
(added ocaml) |
||
Line 5: | Line 5: | ||
<pre>./last_fridays 2012 |
<pre>./last_fridays 2012 |
||
2012-01-27 |
|||
2012-02-24 |
|||
2012-03-30 |
|||
2012-04-27 |
|||
2012-05-25 |
|||
2012-06-29 |
|||
2012-07-27 |
|||
2012-08-31 |
|||
2012-09-28 |
|||
2012-10-26 |
|||
2012-11-30 |
|||
2012-12-28</pre> |
|||
=={{header|OCaml}}== |
|||
<lang ocaml>#load "unix.cma" |
|||
open Unix |
|||
let usage() = |
|||
Printf.eprintf "%s <year>\n" Sys.argv.(0); |
|||
exit 1 |
|||
let print_date t = |
|||
Printf.printf "%d-%02d-%02d\n" (t.tm_year + 1900) (t.tm_mon + 1) t.tm_mday |
|||
let is_date_ok tm t = |
|||
(tm.tm_year = t.tm_year && |
|||
tm.tm_mon = t.tm_mon && |
|||
tm.tm_mday = t.tm_mday) |
|||
let () = |
|||
let _year = |
|||
try int_of_string Sys.argv.(1) |
|||
with _ -> usage() |
|||
in |
|||
let year = _year - 1900 in |
|||
let fridays = Array.make 12 (Unix.gmtime 0.0) in |
|||
for month = 0 to 11 do |
|||
for day_of_month = 1 to 31 do |
|||
let tm = { (Unix.gmtime 0.0) with |
|||
tm_year = year; |
|||
tm_mon = month; |
|||
tm_mday = day_of_month; |
|||
} in |
|||
let _, t = Unix.mktime tm in |
|||
if is_date_ok tm t (* check for months that have less than 31 days *) |
|||
&& t.tm_wday = 5 (* is a friday *) |
|||
then fridays.(month) <- t |
|||
done; |
|||
done; |
|||
Array.iter print_date fridays</lang> |
|||
Output: |
|||
<pre>$ ocaml last_fridays.ml 2012 |
|||
2012-01-27 |
2012-01-27 |
||
2012-02-24 |
2012-02-24 |
Revision as of 00:49, 5 November 2011
Last Friday of each month is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Write a program or a script that returns the last Fridays of each months of a given year provided as argument on the command line.
Example of an expected output:
./last_fridays 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-28
OCaml
<lang ocaml>#load "unix.cma" open Unix
let usage() =
Printf.eprintf "%s <year>\n" Sys.argv.(0); exit 1
let print_date t =
Printf.printf "%d-%02d-%02d\n" (t.tm_year + 1900) (t.tm_mon + 1) t.tm_mday
let is_date_ok tm t =
(tm.tm_year = t.tm_year && tm.tm_mon = t.tm_mon && tm.tm_mday = t.tm_mday)
let () =
let _year = try int_of_string Sys.argv.(1) with _ -> usage() in let year = _year - 1900 in let fridays = Array.make 12 (Unix.gmtime 0.0) in for month = 0 to 11 do for day_of_month = 1 to 31 do let tm = { (Unix.gmtime 0.0) with tm_year = year; tm_mon = month; tm_mday = day_of_month; } in let _, t = Unix.mktime tm in if is_date_ok tm t (* check for months that have less than 31 days *) && t.tm_wday = 5 (* is a friday *) then fridays.(month) <- t done; done; Array.iter print_date fridays</lang>
Output:
$ ocaml last_fridays.ml 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-28