Day of the week: Difference between revisions

Line 2,050:
object DayOfTheWeek extends App {
val years = 2008 to 2121
val yuletide = for {
println(
(foryear {<- years
if (new GregorianCalendar(year, DECEMBER, 25)).get(DAY_OF_WEEK) == SUNDAY
year <- years
} yield year).mkString(
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}" +
", ", "."))
s"Years between ${years.head} and ${years.last} including whenwhere Christmas is observed on Sunday:\n", ", ", "."))
}</lang>
===JDK >= 8 (recommended)===
Line 2,063 ⟶ 2,064:
object DayOfTheWeek1 extends App {
val years = 2008 to 2121
println((val yuletide = for {
year <- years
if LocalDate.of(year, 12, 25).getDayOfWeek() == DayOfWeek.SUNDAY
} yield year).mkString(
 
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}" +
}
s"Years between ${years.head} and ${years.last}" including whenwhere Christmas is observed on Sunday:\n", ", ", "."))
}</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>
{{out | BothOutput of all solutions }}
<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>
Anonymous user