How to resolve the algorithm Convert seconds to compound duration step by step in the Nim programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Convert seconds to compound duration step by step in the Nim programming language

Table of Contents

Problem Statement

Write a function or program which: This is detailed below (e.g., "2 hr, 59 sec").

Demonstrate that it passes the following three test-cases: Test CasesDetailsThe following five units should be used: However, only include quantities with non-zero values in the output (e.g., return "1 d" and not "0 wk, 1 d, 0 hr, 0 min, 0 sec"). Give larger units precedence over smaller ones as much as possible (e.g., return 2 min, 10 sec and not 1 min, 70 sec or 130 sec) Mimic the formatting shown in the test-cases (quantities sorted from largest unit to smallest and separated by comma+space; value and unit of each quantity separated by space).

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Convert seconds to compound duration step by step in the Nim programming language

Source code in the nim programming language

from strutils import addSep

const
  Units = [" wk", " d", " hr", " min", " sec"]
  Quantities = [7 * 24 * 60 * 60, 24 * 60 * 60, 60 * 60, 60, 1]

#---------------------------------------------------------------------------------------------------

proc `$$`*(sec: int): string =
  ## Convert a duration in seconds to a friendly string.

  doAssert(sec > 0)

  var duration = sec
  var idx = 0
  while duration != 0:
    let q = duration div Quantities[idx]
    if q != 0:
      duration = duration mod Quantities[idx]
      result.addSep(", ", 0)
      result.add($q & Units[idx])
    inc idx

#———————————————————————————————————————————————————————————————————————————————————————————————————

when isMainModule:
  for sec in [7259, 86400, 6000000]:
    echo sec, "s = ", $$sec


import times
from algorithm import reversed
from strutils import addSep

const Units = [" wk", " d", " hr", " min", " sec"]

#---------------------------------------------------------------------------------------------------

proc `$$`*(sec: int): string =
  ## Convert a duration in seconds to a friendly string.
  ## Similar to `$` but with other conventions.

  doAssert(sec > 0)

  var duration = initDuration(seconds = sec)
  let parts = reversed(duration.toParts[Seconds..Weeks])

  for idx, part in parts:
    if part != 0:
      result.addSep(", ", 0)
      result.add($part & Units[idx])

#———————————————————————————————————————————————————————————————————————————————————————————————————

when isMainModule:
  for sec in [7259, 86400, 6000000]:
    echo sec, "s = ", $$sec


  

You may also check:How to resolve the algorithm Levenshtein distance step by step in the Sidef programming language
You may also check:How to resolve the algorithm Map range step by step in the Lasso programming language
You may also check:How to resolve the algorithm Pseudo-random numbers/PCG32 step by step in the Python programming language
You may also check:How to resolve the algorithm Call a function step by step in the PARI/GP programming language
You may also check:How to resolve the algorithm Weird numbers step by step in the Phix programming language