4 ms·
The version they have here is somewhat inefficient and not well presented. You can get from the year to the doomsday by a simpler formula: If odd, add 11; div
by ikeboy 7y ago
The version they have here is somewhat inefficient and not well presented.
You can get from the year to the doomsday by a simpler formula:
If odd, add 11; divide by 2; if odd, add 11. Count up to nearest multiple of 7
So e.g. 1955 turns into 66 turns into 33 turns into 44 turns into 5. Add that to 4 for the century (1900 is 4, 2000 is 3, that's all you really need to memorize) and you get 9, so the doomsday for 1955 is Monday.
From there it's simple, 4/4 6/6 8/8 10/10 12/12, 9/5 7/11 per the mnemonic mentioned, last day of February, Jan 3/4 depending on leap year, and March 7 counting forward from February.
There, that's the entire algorithm.
- kseistrup 7y agoTo go from "any" century, you can also memorize "2053", which is the days in a 4-year cycle: 2000 = 2 = tuesday; 2100 = 0 = sunday; 2200 = 5 = friday; 2300 = 3 = wednesday. For years other than the centuries, we need to add an offset. Given the year CCXX, we have: (a, b) = divmod(XX, 12) c = b // 4 offset = a + b + c doomsday = start + offset E.g., for 2020 (XX == 20) we get: start = 2 # from the "2053" rule (a, b) = divmod(20, 12) # (1, 8) c = b // 4 # 2 offset = 1 + 8 + 2 = 4 (mod 7) doomsday = start + offset # 2 + 4 = 6 = saturday
- ikeboy 7y agoThe "add 11" trick in my comment is easier to remember and apply than dividing by 12 and taking remainders.
- kseistrup 7y agoI guess we have different perceptions of which way is the easiest. There might even be methods we haven't heard about yet.
- tzs 7y agoI like my current method [1], while only requires addition, doubling, and a couple of conditional increments or additions. Even if you don't bother doing any mod 7 reduction along the way, you never have to deal with a number above 32. With both divide by 12 and odd 11, I would find myself occasionally making a goof when dealing with years near the end of centuries. [1] https://news.ycombinator.com/item?id=21926543 https://news.ycombinator.com/item?id=21926543