RosettaCodeData/Task/Convert-seconds-to-compound-duration/F-Sharp/convert-seconds-to-compound-duration.fs
2023-07-01 13:44:08 -04:00

21 lines
731 B
FSharp

open System
let convert seconds =
let span = TimeSpan.FromSeconds(seconds |> float)
let (wk, day) = Math.DivRem(span.Days, 7)
let parts =
[(wk, "wk"); (day, "day"); (span.Hours, "hr"); (span.Minutes, "min"); (span.Seconds, "sec")]
let result =
List.foldBack (fun (n, u) acc ->
(if n > 0 then n.ToString() + " " + u else "")
+ (if n > 0 && acc.Length > 0 then ", " else "")
+ acc
) parts ""
if result.Length > 0 then result else "0 sec"
[<EntryPoint>]
let main argv =
argv
|> Seq.map (fun str -> let sec = UInt32.Parse str in (sec, convert sec))
|> Seq.iter (fun (s, v) -> printfn "%10i = %s" s v)
0