diff --git a/cp-demo/executing-specs/Calendar.scala b/cp-demo/executing-specs/Calendar.scala index 7c27f7bda79520261f5ddda02c24e51036a18dd6..a301d75732ab9c31ca554036112f40f7c24d3911 100644 --- a/cp-demo/executing-specs/Calendar.scala +++ b/cp-demo/executing-specs/Calendar.scala @@ -6,23 +6,13 @@ object Calendar extends App { final val totalDays = 10593 final val originYear = 1980 - val (year, day) = ((year : Int, day : Int) => totalDays == (year - originYear) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 - - ((originYear - 1) / 4 - (originYear - 1) / 100 + (originYear - 1) / 400) + day && + @spec def leapDaysUntil(y: Int) = (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400 + + val (year, day) = ((year: Int, day: Int) => + totalDays == (year - originYear) * 365 + leapDaysUntil(year) - leapDaysUntil(originYear) + day && day > 0 && day <= 366).solve println("Year : %d, day : %d" format (year, day)) - - /* alternate version with intermediate "leapDaysUntil" variables */ - - def yearAndDay(totalDays : Int, originYear : Int) : (Int, Int) = { - val (y, d, _, _) = ((year : Int, day : Int, lduYear : Int, lduOrigin : Int) => totalDays == (year - originYear) * 365 + lduYear - lduOrigin + day && - lduYear == (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 && - lduOrigin == ((originYear - 1) / 4 - (originYear - 1) / 100 + (originYear - 1) / 400) && - day > 0 && day <= 366).solve - - (y, d) - } - println("Second version: " + yearAndDay(totalDays, originYear)) }