fork(1) download
  1. /****************************************************************************
  2.  * Obliczanie daty Tłustego Czwartku *
  3.  * 2015, Tymoteusz Czech <mail@tymek.cz> *
  4.  ****************************************************************************/
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. /**
  10.  * @brief Check if year is leap year
  11.  * @param [in] y Given year
  12.  * @return 0 if false, 1 if true
  13.  */
  14. int leap_year(int y){
  15. return ((y%4 == 0 && y%100 != 0) || y%400 == 0);
  16. }
  17.  
  18. /**
  19.  * @brief Calculate day of Fat Thursday
  20.  * @param [in] y Given year
  21.  * @return NULL on error, or string with (day).0(month) of holiday
  22.  * @see http://g...content-available-to-author-only...o.gl/5rc7lo - day-of-march Easter calculus
  23.  */
  24. const char * fat_thursday(int y){
  25. char * date;
  26. int a, b, c, d, e, day, month;
  27.  
  28. if(y <= 30) return NULL;
  29. a = y % 19;
  30. b = y >> 2;
  31. c = ((b / 25)|0) + 1;
  32. d = (c * 3) >> 2;
  33. e = ((a * 19) - (((c * 8 + 5) / 25)|0) + d + 15) % 30;
  34. e += ((29578 - a - (e << 5)) >> 10);
  35. e -= ((y % 7) + b - d + e + 2) % 7;
  36. day = e - 52;
  37. if(day < 1){
  38. day += 28;
  39. if(leap_year(y)) day++;
  40. if(day < 1){
  41. day += 31;
  42. month = 1;
  43. } else {
  44. month = 2;
  45. }
  46. } else {
  47. month = 3;
  48. }
  49. date = (char *)malloc( (size_t)sizeof(char *) * ((day>10)?5:6) );
  50. sprintf(date, "%d.%02d", day, month);
  51. return date;
  52. }
  53.  
  54. int main(){
  55. int year;
  56. for(year = 2000; year <= 2300; year++){
  57. printf("%6s.%d\n", fat_thursday(year), year);
  58. }
  59. return 0;
  60. }
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
  2.03.2000
 22.02.2001
  7.02.2002
 27.02.2003
 19.02.2004
  3.02.2005
 23.02.2006
 15.02.2007
 31.01.2008
 19.02.2009
 11.02.2010
  3.03.2011
 16.02.2012
  7.02.2013
 27.02.2014
 12.02.2015
  4.02.2016
 23.02.2017
  8.02.2018
 28.02.2019
 20.02.2020
 11.02.2021
 24.02.2022
 16.02.2023
  8.02.2024
 27.02.2025
 12.02.2026
  4.02.2027
 24.02.2028
  8.02.2029
 28.02.2030
 20.02.2031
  5.02.2032
 24.02.2033
 16.02.2034
  1.02.2035
 21.02.2036
 12.02.2037
  4.03.2038
 17.02.2039
  9.02.2040
 28.02.2041
 13.02.2042
  5.02.2043
 25.02.2044
 16.02.2045
  1.02.2046
 21.02.2047
 13.02.2048
 25.02.2049
 17.02.2050
  9.02.2051
 29.02.2052
 13.02.2053
  5.02.2054
 25.02.2055
 10.02.2056
  1.03.2057
 21.02.2058
  6.02.2059
 26.02.2060
 17.02.2061
  2.02.2062
 22.02.2063
 14.02.2064
  5.02.2065
 18.02.2066
 10.02.2067
  1.03.2068
 21.02.2069
  6.02.2070
 26.02.2071
 18.02.2072
  2.02.2073
 22.02.2074
 14.02.2075
 27.02.2076
 18.02.2077
 10.02.2078
  2.03.2079
 15.02.2080
  6.02.2081
 26.02.2082
 11.02.2083
  3.02.2084
 22.02.2085
  7.02.2086
 27.02.2087
 19.02.2088
 10.02.2089
 23.02.2090
 15.02.2091
  7.02.2092
 19.02.2093
 11.02.2094
  3.03.2095
 23.02.2096
  7.02.2097
 27.02.2098
 19.02.2099
  4.02.2100
 24.02.2101
 16.02.2102
  1.02.2103
 21.02.2104
 12.02.2105
 25.02.2106
 17.02.2107
  9.02.2108
 28.02.2109
 13.02.2110
  5.02.2111
 25.02.2112
  9.02.2113
  1.03.2114
 21.02.2115
  6.02.2116
 25.02.2117
 17.02.2118
  2.02.2119
 22.02.2120
 13.02.2121
  5.02.2122
 18.02.2123
 10.02.2124
  1.03.2125
 21.02.2126
  6.02.2127
 26.02.2128
 17.02.2129
  2.02.2130
 22.02.2131
 14.02.2132
 26.02.2133
 18.02.2134
 10.02.2135
  1.03.2136
 14.02.2137
  6.02.2138
 26.02.2139
 11.02.2140
  2.02.2141
 22.02.2142
  7.02.2143
 27.02.2144
 18.02.2145
 10.02.2146
 23.02.2147
 15.02.2148
  6.02.2149
 19.02.2150
 11.02.2151
  2.03.2152
 22.02.2153
  7.02.2154
 27.02.2155
 19.02.2156
  3.02.2157
 23.02.2158
 15.02.2159
 31.01.2160
 19.02.2161
 11.02.2162
  3.03.2163
 16.02.2164
  7.02.2165
 27.02.2166
 12.02.2167
  4.02.2168
 23.02.2169
  8.02.2170
 28.02.2171
 20.02.2172
 11.02.2173
 24.02.2174
 16.02.2175
  8.02.2176
 27.02.2177
 12.02.2178
  4.02.2179
 24.02.2180
  8.02.2181
 28.02.2182
 20.02.2183
  5.02.2184
 24.02.2185
 16.02.2186
  1.02.2187
 21.02.2188
 12.02.2189
  4.03.2190
 17.02.2191
  9.02.2192
 28.02.2193
 13.02.2194
  5.02.2195
 25.02.2196
 16.02.2197
  1.02.2198
 21.02.2199
 13.02.2200
 26.02.2201
 18.02.2202
 10.02.2203
  1.03.2204
 14.02.2205
  6.02.2206
 26.02.2207
 11.02.2208
  2.02.2209
 22.02.2210
  7.02.2211
 27.02.2212
 18.02.2213
  3.02.2214
 23.02.2215
 15.02.2216
  6.02.2217
 19.02.2218
 11.02.2219
  2.03.2220
 22.02.2221
  7.02.2222
 27.02.2223
 19.02.2224
  3.02.2225
 23.02.2226
 15.02.2227
 31.01.2228
 19.02.2229
 11.02.2230
  3.03.2231
 16.02.2232
  7.02.2233
 27.02.2234
 12.02.2235
  4.02.2236
 23.02.2237
  8.02.2238
 28.02.2239
 20.02.2240
 11.02.2241
 24.02.2242
 16.02.2243
  8.02.2244
 20.02.2245
 12.02.2246
  4.02.2247
 24.02.2248
  8.02.2249
 28.02.2250
 20.02.2251
  5.02.2252
 24.02.2253
 16.02.2254
  1.02.2255
 21.02.2256
 12.02.2257
  4.03.2258
 17.02.2259
  9.02.2260
 28.02.2261
 13.02.2262
  5.02.2263
 25.02.2264
  9.02.2265
  1.02.2266
 21.02.2267
 13.02.2268
 25.02.2269
 17.02.2270
  9.02.2271
 29.02.2272
 13.02.2273
  5.02.2274
 25.02.2275
 10.02.2276
  1.03.2277
 21.02.2278
  6.02.2279
 26.02.2280
 17.02.2281
  2.02.2282
 22.02.2283
 14.02.2284
 29.01.2285
 18.02.2286
 10.02.2287
  1.03.2288
 14.02.2289
  6.02.2290
 26.02.2291
 18.02.2292
  2.02.2293
 22.02.2294
 14.02.2295
 27.02.2296
 18.02.2297
 10.02.2298
 23.02.2299
 15.02.2300