Finished exercise Date.elm

main
Eren Saglam 2022-11-08 17:07:44 +01:00
parent 16a5cd7a5a
commit f4a4f5633b
2 changed files with 36 additions and 12 deletions

View File

@ -46,21 +46,49 @@ toString (a,b,c) = (if a < 10 then "0" ++ String.fromInt(a) else String.fromInt(
else if c < 100 then "00" ++ String.fromInt(c)
else if c < 1000 then "0" ++ String.fromInt(c)
else String.fromInt(c))
-- TT.MM.YYYY
-- https://web.archive.org/web/20170507133619/https://alcor.concordia.ca/~gpkatch/gdate-algorithm.html
convertDateToDayNumber : Date -> Int
convertDateToDayNumber (a, b, c) =
let m = (modBy 12 (b + 9))
y = c - m // 10
in 365 * y + y // 4 - y // 100 + y // 400 + (m * 306 + 5) // 10 + ( a - 1 )
convertDayNumberToDate : Int -> Date
convertDayNumberToDate g =
let y = (10000 * g + 14780) // 3652425
ddd = g - (365 * y + y // 4 - y // 100 + y // 400)
in
if (ddd < 0) then
let y2 = y - 1 -- y = y2
ddd2 = g - (365 * y2 + y2 // 4 - y2 // 100 + y2 // 400) -- ddd = ddd2
mi = (100 * ddd2 + 52) // 3060
mm = (modBy (12) (mi + 2)) + 1
y3 = y2 + (mi + 2) // 12 -- y = y3
dd = ddd2 - (mi * 306 + 5) // 10 + 1
in (dd, mm, y3)
else
let mi = (100 * ddd + 52) // 3060
mm = (modBy (12) (mi + 2)) + 1
y2 = y + (mi + 2) // 12 -- y = y2
dd = ddd - (mi * 306 + 5) // 10 + 1
in (dd, mm, y2)
-- 1 Punkt:
leapyear : Year -> Bool
leapyear y = ((modBy 4 y == 0) && (modBy 100 y /= 0)) || (modBy 400 y == 0)
-- 2 Punkte:
next : Date -> Date
next date = (1, 1, 1)
next date = convertDayNumberToDate ((convertDateToDayNumber date) + 1)
-- 2 Punkte:
prev : Date -> Date
prev date = (1, 1, 1)
-- 1 Punkt:
leapyear : Year -> Bool
leapyear y = False
prev date = convertDayNumberToDate ((convertDateToDayNumber date) - 1)
-- 2 Punkte:
sub : Date -> Date -> Int
sub date1 date2 = 0
sub date1 date2 = convertDateToDayNumber date1 - convertDateToDayNumber date2

View File

@ -155,10 +155,6 @@ leapYearTest =
Expect.equal False (leapyear 2022)
]
-- sub a b soll die Anzahl der Tage liefern, die zwischen den Daten a und b liegt. Wenn a
-- vor b liegt, soll das Ergebnis negativ sein, sonst positiv (außer a und b sind gleich, dann soll
-- das Ergebnis 0 sein).
subTest : Test
subTest =
describe "sub test"