Skip to content

Commit dfddce6

Browse files
authored
Add an algorithm to determine the day of the week given a date in the standard library (#937)
2 parents 99e7dab + 43b421b commit dfddce6

File tree

3 files changed

+269
-1
lines changed

3 files changed

+269
-1
lines changed

stdlib/date_en.catala_en

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,136 @@ declaration is_young_enough_rounding_up
245245
equals
246246
not (is_old_enough_rounding_up of birth_date, age, at_date)
247247
```
248+
249+
## Days of the week enumeration
250+
```catala-metadata
251+
declaration enumeration Days:
252+
-- Monday
253+
-- Tuesday
254+
-- Wednesday
255+
-- Thursday
256+
-- Friday
257+
-- Saturday
258+
-- Sunday
259+
```
260+
261+
## Tomohiko Sakamoto Algorithm : find the Day of the week for a given date
262+
```catala-metadata
263+
declaration scope Day_of_the_of_given_date :
264+
input output given_date content date
265+
266+
internal sakamoto_list content (integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer)
267+
internal month_number content integer
268+
internal n_number content integer
269+
internal year_number content integer
270+
271+
internal day_number content integer
272+
output day_of_the_week content Days
273+
```
274+
275+
```catala
276+
scope Day_of_the_of_given_date :
277+
definition sakamoto_list
278+
equals (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4)
279+
```
280+
```catala
281+
scope Day_of_the_of_given_date :
282+
definition month_number
283+
equals get_month of given_date
284+
```
285+
```catala
286+
scope Day_of_the_of_given_date :
287+
definition year_number
288+
equals
289+
if month_number < 3
290+
then get_year of given_date - 1
291+
else get_year of given_date
292+
```
293+
294+
```catala
295+
scope Day_of_the_of_given_date :
296+
definition n_number under condition
297+
month_number = 1
298+
consequence equals sakamoto_list.1
299+
definition n_number under condition
300+
month_number = 2
301+
consequence equals sakamoto_list.2
302+
303+
definition n_number under condition
304+
month_number = 3
305+
consequence equals sakamoto_list.3
306+
307+
definition n_number under condition
308+
month_number = 4
309+
consequence equals sakamoto_list.4
310+
311+
definition n_number under condition
312+
month_number = 5
313+
consequence equals sakamoto_list.5
314+
315+
definition n_number under condition
316+
month_number = 6
317+
consequence equals sakamoto_list.6
318+
319+
definition n_number under condition
320+
month_number = 7
321+
consequence equals sakamoto_list.7
322+
323+
definition n_number under condition
324+
month_number = 8
325+
consequence equals sakamoto_list.8
326+
327+
definition n_number under condition
328+
month_number = 9
329+
consequence equals sakamoto_list.9
330+
331+
definition n_number under condition
332+
month_number = 10
333+
consequence equals sakamoto_list.10
334+
335+
definition n_number under condition
336+
month_number = 11
337+
consequence equals sakamoto_list.11
338+
339+
definition n_number under condition
340+
month_number = 12
341+
consequence equals sakamoto_list.12
342+
```
343+
344+
```catala
345+
scope Day_of_the_of_given_date :
346+
definition day_number
347+
equals
348+
(year_number + integer of (year_number / 4) - integer of (year_number / 100) + integer of (year_number / 400) + n_number + get_day of given_date)
349+
- 7 * integer of ((year_number + integer of (year_number / 4) - integer of (year_number / 100) + integer of (year_number / 400) + n_number + get_day of given_date) /7)
350+
```
351+
352+
```catala
353+
scope Day_of_the_of_given_date :
354+
definition day_of_the_week under condition
355+
day_number = 0
356+
consequence equals Sunday
357+
definition day_of_the_week under condition
358+
day_number = 1
359+
consequence equals Monday
360+
361+
definition day_of_the_week under condition
362+
day_number = 2
363+
consequence equals Tuesday
364+
365+
definition day_of_the_week under condition
366+
day_number = 3
367+
consequence equals Wednesday
368+
369+
definition day_of_the_week under condition
370+
day_number = 4
371+
consequence equals Thursday
372+
373+
definition day_of_the_week under condition
374+
day_number = 5
375+
consequence equals Friday
376+
377+
definition day_of_the_week under condition
378+
day_number = 6
379+
consequence equals Saturday
380+
```

stdlib/date_fr.catala_fr

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,138 @@ déclaration est_assez_jeune_arrondi_supérieur
238238
égal à
239239
non (est_assez_âgé_arrondi_supérieur de date_de_naissance, âge, à_date)
240240
```
241+
242+
243+
## Gestion des jours de la semaine et des jours fériés
244+
```catala-metadata
245+
déclaration énumération Jours:
246+
-- Lundi
247+
-- Mardi
248+
-- Mercredi
249+
-- Jeudi
250+
-- Vendredi
251+
-- Samedi
252+
-- Dimanche
253+
```
254+
255+
## Algorithme de Sakamoto, détermination jour de la semaine d'une date donée
256+
```catala-metadata
257+
déclaration champ d'application Jour_de_la_semaine_depuis_date :
258+
entrée résultat date_entrée contenu date
259+
260+
interne liste_Sakamoto contenu (entier, entier, entier, entier, entier, entier, entier, entier, entier, entier, entier, entier)
261+
interne mois_nombre contenu entier
262+
interne n_nombre contenu entier
263+
interne année_nombre contenu entier
264+
265+
interne jour_nombre contenu entier
266+
résultat jour_de_la_semaine_depuis_date contenu Jours
267+
```
268+
269+
```catala
270+
champ d'application Jour_de_la_semaine_depuis_date :
271+
définition liste_Sakamoto
272+
égal à (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4)
273+
```
274+
```catala
275+
champ d'application Jour_de_la_semaine_depuis_date :
276+
définition mois_nombre
277+
égal à accès_mois de date_entrée
278+
```
279+
```catala
280+
champ d'application Jour_de_la_semaine_depuis_date :
281+
définition année_nombre
282+
égal à
283+
si mois_nombre < 3
284+
alors accès_année de date_entrée - 1
285+
sinon accès_année de date_entrée
286+
```
287+
288+
```catala
289+
champ d'application Jour_de_la_semaine_depuis_date :
290+
définition n_nombre sous condition
291+
mois_nombre = 1
292+
conséquence égal à liste_Sakamoto.1
293+
définition n_nombre sous condition
294+
mois_nombre = 2
295+
conséquence égal à liste_Sakamoto.2
296+
297+
définition n_nombre sous condition
298+
mois_nombre = 3
299+
conséquence égal à liste_Sakamoto.3
300+
301+
définition n_nombre sous condition
302+
mois_nombre = 4
303+
conséquence égal à liste_Sakamoto.4
304+
305+
définition n_nombre sous condition
306+
mois_nombre = 5
307+
conséquence égal à liste_Sakamoto.5
308+
309+
définition n_nombre sous condition
310+
mois_nombre = 6
311+
conséquence égal à liste_Sakamoto.6
312+
313+
définition n_nombre sous condition
314+
mois_nombre = 7
315+
conséquence égal à liste_Sakamoto.7
316+
317+
définition n_nombre sous condition
318+
mois_nombre = 8
319+
conséquence égal à liste_Sakamoto.8
320+
321+
définition n_nombre sous condition
322+
mois_nombre = 9
323+
conséquence égal à liste_Sakamoto.9
324+
325+
définition n_nombre sous condition
326+
mois_nombre = 10
327+
conséquence égal à liste_Sakamoto.10
328+
329+
définition n_nombre sous condition
330+
mois_nombre = 11
331+
conséquence égal à liste_Sakamoto.11
332+
333+
définition n_nombre sous condition
334+
mois_nombre = 12
335+
conséquence égal à liste_Sakamoto.12
336+
```
337+
338+
```catala
339+
champ d'application Jour_de_la_semaine_depuis_date :
340+
définition jour_nombre
341+
égal à
342+
(année_nombre + entier de (année_nombre / 4) - entier de (année_nombre / 100) + entier de (année_nombre / 400) + n_nombre + accès_jour de date_entrée)
343+
- 7 * entier de ((année_nombre + entier de (année_nombre / 4) - entier de (année_nombre / 100) + entier de (année_nombre / 400) + n_nombre + accès_jour de date_entrée) /7)
344+
```
345+
346+
```catala
347+
champ d'application Jour_de_la_semaine_depuis_date :
348+
définition jour_de_la_semaine_depuis_date sous condition
349+
jour_nombre = 0
350+
conséquence égal à Dimanche
351+
définition jour_de_la_semaine_depuis_date sous condition
352+
jour_nombre = 1
353+
conséquence égal à Lundi
354+
355+
définition jour_de_la_semaine_depuis_date sous condition
356+
jour_nombre = 2
357+
conséquence égal à Mardi
358+
359+
définition jour_de_la_semaine_depuis_date sous condition
360+
jour_nombre = 3
361+
conséquence égal à Mercredi
362+
363+
définition jour_de_la_semaine_depuis_date sous condition
364+
jour_nombre = 4
365+
conséquence égal à Jeudi
366+
367+
définition jour_de_la_semaine_depuis_date sous condition
368+
jour_nombre = 5
369+
conséquence égal à Vendredi
370+
371+
définition jour_de_la_semaine_depuis_date sous condition
372+
jour_nombre = 6
373+
conséquence égal à Samedi
374+
```
375+

tests/scope/good/scope_call2.catala_en

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,5 @@ $ catala test-scope Titi
6161

6262
```catala-test-cli
6363
$ catala dependency-graph --disable-warnings
64-
{"intra_scopes":{"Toto":{"nodes":{"2":"foo","1":"bar"},"edges":[{"from":1,"to":2}]},"Titi":{"nodes":{"5":"toto","4":"fuzz","3":"fizz"},"edges":[]}},"inter_scopes":{"nodes":{"2":"Titi","1":"Toto"},"edges":[{"from":1,"to":2},{"from":1,"to":2},{"from":1,"to":2}]},"types":{"nodes":{"8":"Titi","6":"Toto","4":"Period_en.Period","3":"MonthYear_en.MonthYear","809014657":"MonthYear_en.Date_en.Month","9647113":"Optional"},"edges":[{"from":6,"to":8},{"from":6,"to":8},{"from":809014657,"to":3}]}}
64+
{"intra_scopes":{"Toto":{"nodes":{"9":"foo","8":"bar"},"edges":[{"from":8,"to":9}]},"Titi":{"nodes":{"12":"toto","11":"fuzz","10":"fizz"},"edges":[]}},"inter_scopes":{"nodes":{"3":"Titi","2":"Toto"},"edges":[{"from":2,"to":3},{"from":2,"to":3},{"from":2,"to":3}]},"types":{"nodes":{"10":"Titi","8":"Toto","6":"Period_en.Period","5":"MonthYear_en.MonthYear","4":"Date_en.Day_of_the_of_given_date","980147805":"Date_en.Days","809014657":"MonthYear_en.Date_en.Month","9647113":"Optional"},"edges":[{"from":8,"to":10},{"from":8,"to":10},{"from":980147805,"to":4},{"from":809014657,"to":5}]}}
6565
```

0 commit comments

Comments
 (0)