Doomsday rule: Difference between revisions
Content added Content deleted
m (→{{header|FORTRAN}}: RC uses Fortran, not FORTRAN) |
(Add Scala implementation) |
||
Line 1,793: | Line 1,793: | ||
2077-02-12: Friday |
2077-02-12: Friday |
||
2101-04-02: Saturday |
2101-04-02: Saturday |
||
</pre> |
|||
=={{header|Scala}}== |
|||
{{trans|Java}} |
|||
<syntaxhighlight lang="Scala"> |
|||
object Doom extends App { |
|||
val dates = Array( |
|||
new Date(1800, 1, 6), |
|||
new Date(1875, 3, 29), |
|||
new Date(1915, 12, 7), |
|||
new Date(1970, 12, 23), |
|||
new Date(2043, 5, 14), |
|||
new Date(2077, 2, 12), |
|||
new Date(2101, 4, 2) |
|||
) |
|||
dates.foreach(d => println(s"${d.format}: ${d.weekday}")) |
|||
} |
|||
class Date(val year: Int, val month: Int, val day: Int) { |
|||
import Date._ |
|||
def isLeapYear: Boolean = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) |
|||
def format: String = f"$month%02d/$day%02d/$year%04d" |
|||
def weekday: String = { |
|||
val c = year / 100 |
|||
val r = year % 100 |
|||
val s = r / 12 |
|||
val t = r % 12 |
|||
val cAnchor = (5 * (c % 4) + 2) % 7 |
|||
val doom = (s + t + t / 4 + cAnchor) % 7 |
|||
val anchor = if (isLeapYear) leapdoom(month - 1) else normdoom(month - 1) |
|||
weekdays((doom + day - anchor + 7) % 7) |
|||
} |
|||
} |
|||
object Date { |
|||
private val leapdoom = Array(4, 1, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5) |
|||
private val normdoom = Array(3, 7, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5) |
|||
val weekdays = Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
01/06/1800: Monday |
|||
03/29/1875: Monday |
|||
12/07/1915: Tuesday |
|||
12/23/1970: Wednesday |
|||
05/14/2043: Thursday |
|||
02/12/2077: Friday |
|||
04/02/2101: Saturday |
|||
</pre> |
</pre> |
||