Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
35
Task/Five-weekends/Scala/five-weekends.scala
Normal file
35
Task/Five-weekends/Scala/five-weekends.scala
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import java.util.Calendar._
|
||||
import java.util.GregorianCalendar
|
||||
|
||||
import org.scalatest.{FlatSpec, Matchers}
|
||||
|
||||
class FiveWeekends extends FlatSpec with Matchers {
|
||||
|
||||
case class YearMonth[T](year: T, month: T)
|
||||
implicit class CartesianProd[T](val seq: Seq[T]) {
|
||||
def x(other: Seq[T]) = for(s1 <- seq; s2 <- other) yield YearMonth(year=s1,month=s2)
|
||||
def -(other: Seq[T]): Seq[T] = seq diff other
|
||||
}
|
||||
|
||||
def has5weekends(ym: { val year: Int; val month: Int}) = {
|
||||
val date = new GregorianCalendar(ym.year, ym.month-1, 1)
|
||||
date.get(DAY_OF_WEEK) == FRIDAY && date.getActualMaximum(DAY_OF_MONTH) == 31
|
||||
}
|
||||
|
||||
val expectedFirstFive = Seq(
|
||||
YearMonth(1901,3), YearMonth(1902,8), YearMonth(1903,5), YearMonth(1904,1), YearMonth(1904,7))
|
||||
val expectedFinalFive = Seq(
|
||||
YearMonth(2097,3), YearMonth(2098,8), YearMonth(2099,5), YearMonth(2100,1), YearMonth(2100,10))
|
||||
val expectedNon5erYears = Seq(1900, 1906, 1917, 1923, 1928, 1934, 1945, 1951, 1956, 1962,
|
||||
1973, 1979, 1984, 1990, 2001, 2007, 2012, 2018, 2029, 2035,
|
||||
2040, 2046, 2057, 2063, 2068, 2074, 2085, 2091, 2096)
|
||||
|
||||
"Five Weekend Algorithm" should "match specification" in {
|
||||
val months = (1900 to 2100) x (1 to 12) filter has5weekends
|
||||
months.size shouldBe 201
|
||||
months.take(5) shouldBe expectedFirstFive
|
||||
months.takeRight(5) shouldBe expectedFinalFive
|
||||
|
||||
(1900 to 2100) - months.map(_.year) shouldBe expectedNon5erYears
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue