Anonymous user
Day of the week: Difference between revisions
→{{header|Scala}}
Line 2,050:
object DayOfTheWeek extends App {
val years = 2008 to 2121
val yuletide = for {
▲ if (new GregorianCalendar(year, DECEMBER, 25)).get(DAY_OF_WEEK) == SUNDAY
▲ } yield year).mkString(
println(yuletide.mkString(
s"Years between ${years.head} and ${years.last} including when Christmas is observed on Sunday:\n",▼
s"${yuletide.count(p => true)} Years between ${years.head} and ${years.last}" +
▲
}</lang>
===JDK >= 8 (recommended)===
Line 2,063 ⟶ 2,064:
object DayOfTheWeek1 extends App {
val years = 2008 to 2121
year <- years
if LocalDate.of(year, 12, 25).getDayOfWeek() == DayOfWeek.SUNDAY
} yield year
s"Years between ${years.head} and ${years.last} including when Christmas is observed on Sunday:\n",▼
println(yuletide.mkString(
s"${yuletide.count(p => true)} Years between ${years.head} and ${years.last}" +
▲
}</lang>
{{out | Both solutions }}▼
===Idiomatic===
<lang scala>import java.time.{ DayOfWeek, LocalDate }
object DayOfTheWeek2 extends App {
val years = 2008 to 2121
val yuletide =
years.filter(yr => LocalDate.of(yr, 12, 25).getDayOfWeek() == DayOfWeek.SUNDAY)
println(yuletide.mkString(
s"${yuletide.count(p => true)} Years between ${years.head} and ${years.last}" +
" including where Christmas is observed on Sunday:\n", ", ", "."))
}</lang>
===Tail recursion version===
<lang scala>import java.time.{ DayOfWeek, LocalDate }
import scala.annotation.tailrec
object DayOfTheWeek3 extends App {
val years = 2008 to 2121
val yuletide = {
@tailrec
def inner(anni: List[Int], accu: List[Int]): List[Int] = {
if (anni == Nil) accu
else inner(anni.tail, accu ++
(if (LocalDate.of(anni.head, 12, 25).getDayOfWeek() == DayOfWeek.SUNDAY)
List(anni.head) else Nil))
}
inner(years.toList, Nil)
}
println(yuletide.mkString(
s"${yuletide.count(p => true)} Years between ${years.head} and ${years.last}" +
" including where Christmas is observed on Sunday:\n", ", ", "."))
}</lang>
<pre>Years between 2008 and 2121 including when Christmas is observed on Sunday:
2011, 2016, 2022, 2033, 2039, 2044, 2050, 2061, 2067, 2072, 2078, 2089, 2095, 2101, 2107, 2112, 2118.</pre>
|