Avatar of Ric0chet

Ric0chet's solution

to Gigasecond in the Scala Track

Published at Sep 23 2019 · 0 comments
Instructions
Test suite
Solution

Calculate the moment when someone has lived for 10^9 seconds.

A gigasecond is 10^9 (1,000,000,000) seconds.

Hints

Note that addGigaseconds accepts two different types of input.

The Scala exercises assume an SBT project scheme. The exercise solution source should be placed within the exercise directory/src/main/scala. The exercise unit tests can be found within the exercise directory/src/test/scala.

To run the tests simply run the command sbt test in the exercise directory.

For more detailed info about the Scala track see the help page.

Source

Chapter 9 in Chris Pine's online Learn to Program tutorial. http://pine.fm/LearnToProgram/?Chapter=09

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

GigasecondTest.scala

import java.time.LocalDate
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

import org.scalatest.{Matchers, FunSuite}

/** @version 1.1.0 */
class GigasecondTest extends FunSuite with Matchers {

  private def dateTime(str: String): LocalDateTime =
    LocalDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(str))
  private def date(str: String): LocalDate =
    LocalDate.from(DateTimeFormatter.ISO_DATE.parse(str))

  test("date only specification of time") {
    val input = date("2011-04-25")
    val expected = dateTime("2043-01-01T01:46:40")
    Gigasecond.add(input) should be (expected)
  }

  test("second test for date only specification of time") {
    pending
    val input = date("1977-06-13")
    val expected = dateTime("2009-02-19T01:46:40")
    Gigasecond.add(input) should be (expected)
  }

  test("third test for date only specification of time") {
    pending
    val input = date("1959-07-19")
    val expected = dateTime("1991-03-27T01:46:40")
    Gigasecond.add(input) should be (expected)
  }

  test("full time specified") {
    pending
    val input = dateTime("2015-01-24T22:00:00")
    val expected = dateTime("2046-10-02T23:46:40")
    Gigasecond.add(input) should be (expected)
  }

  test("full time with day roll-over") {
    pending
    val input = dateTime("2015-01-24T23:59:59")
    val expected = dateTime("2046-10-03T01:46:39")
    Gigasecond.add(input) should be (expected)
  }
}
import java.time.LocalDate
import java.time.LocalDateTime
//  09-23-19

// 50 ms
object Gigasecond {
  def add(startDate: LocalDate): LocalDateTime =
    add(startDate.atStartOfDay())

  def add(startDateTime: LocalDateTime): LocalDateTime =
    startDateTime.plusSeconds(1e9.toLong)
}

Community comments

Find this solution interesting? Ask the author a question to learn more.

Ric0chet's Reflection

Two-line, fill-in-the-blank solution.