PROG0157 - Chinese era

no tags 

Since the time of the first mythical Yellow Emperor in 2697 BC (the year 0 for the Chinese), the Chinese era presumes a cycle of sixty years. Each year of this sixty years' cycle receives a name that is put together based on cyclic sequences. The ten year cycle of the Heavenly Stem (left table below) combines the symbols yin and yang with the five elements. The twelve year cycle of the Earthly Branch (right table) uses the animals from the Chinese zodiac. In taking the next name from both cycles, a 60 year cycle is obtained in which no duplicates can be found.

index yin/yang element
0 yang wood
1 yin wood
2 yang fire
3 yin fire
4 yang earth
5 yin earth
6 yang metal
7 yin metal
8 yang water
9 yin water
index zodiac
0 rat
1 buffalo
2 tiger
3 hare
4 dragon
5 snake
6 horse
7 goat
8 monkey
9 chicken
10 dog
11 pig

The year 2011 from our era, for example, corresponds with the year $2011 + 2697 - 1 = 4707$ from the Chinese era. Note that we have to subtract an extra year when converting the years BC from our era to the Chinese era. This is because the year zero doesn't exist in our era. The rest after dividing 4707 by ten is 7, so this year corresponds with the Heavenly Stem yin metal. Analogically, 4707 gives rest 3 after being divided by twelve. This corresponds with the Earthly Branch hare. The year 2011 from our era is called the year yin metal hare by the Chinese.

Assignment

  1. Write a function heavenlyStem to which a whole number between zero and nine should be given as an argument. This number represents an index from the cycle of the Heavenly Stem. The function must print the corresponding name from the Heavenly Stem as a result. Make sure to minimize the number of conditions that need to be tested for function. 
  2. Write a function earthlyBranch to which a whole number between zero and eleven should be given as an argument. This number represents an index from the cycle of the Earthly Branch. The function must print the corresponding name from the cycle of the Earthly Branch as a result. 
  3. Use the functions heavenlyStem and earthlyBranch to write a function chineseYear, to which a year from our era should be given as an argument. The function must print the Chinese name of the year as a result.

Example

>>> heavenlyStem(3)
'yin fire'
>>> earthlyBranch(11)
'pig'
>>> chineseYear(2011)
'yin metal hare' 

Sinds de tijd van de eerste mythische Gele Keizer in 2697 voor Christus (het jaar 0 voor de Chinezen), gaat de Chinese jaartelling uit van een cyclus van zestig jaar. Elk jaar van deze zestigjarige cyclus krijgt een naam die wordt samengesteld op basis van twee cyclische reeksen. De tienjarige cyclus van de Hemelse Stam (linker tabel hieronder) combineert de symbolen yin en yang met de vijf elementen. De twaalfjarige cyclus van de Aardse Tak (rechter tabel hieronder) gebruikt de dieren uit de Chinese dierenriem. Door ieder jaar een volgende naam uit beide cycli te nemen, wordt een cyclus van 60 jaar bekomen waarin geen duplicaten voorkomen.

index yin/yang element
0 yang hout
1 yin hout
2 yang vuur
3 yin vuur
4 yang aarde
5 yin aarde
6 yang metaal
7 yin metaal
8 yang water
9 yin water
index dierenriem
0 rat
1 buffel
2 tijger
3 haas
4 draak
5 slang
6 paard
7 geit
8 aap
9 kip
10 hond
11 varken

Het jaar 2011 uit onze jaartelling correspondeert bijvoorbeeld met het jaar $2011 + 2697 - 1 = 4707$ uit de Chinese jaartelling. Let hierbij op het feit dat we een extra jaar moeten aftrekken bij de omzetting van jaartallen na Christus uit onze jaartelling naar de Chinese jaartelling. Dit omdat het jaar nul in onze jaartelling niet bestaat. De rest na deling van 4707 door tien is 7, waardoor dit jaar correspondeert met de Hemelse Stam yin metaal. Analoog geeft 4707 na deling door twaalf rest 3, waardoor dit jaar correspondeert met de Aardse Tak haas. Het jaar 2011 uit onze jaartelling wordt door de chinezen dus het jaar yin metaal haas genoemd.

Opgave

  1. Schrijf een functie hemelseStam waaraan een geheel getal tussen nul en negen als argument moet doorgegeven worden. Dit getal stelt een index uit de cyclus van de Hemelse Stam voor. De functie moet de corresponderende naam uit de cyclus van de Hemelse Stam als resultaat teruggeven. Zorg er voor dat het aantal voorwaarden dat door deze functie moet getest worden zo klein mogelijk gehouden wordt.
  2. Schrijf een functie aardseTak waaraan een geheel getal tussen nul en elf als argument moet doorgegeven worden. Dit getal stelt een index uit de cyclus van de Aardse Tak voor. De functie moet de corresponderende naam uit de cyclus van de Aardse Tak als resultaat teruggeven.
  3. Gebruik de functies hemelseStam en aardseTak om een functie chineesJaar te schrijven, waaraan een jaartal uit onze jaartelling als argument moet doorgegeven worden. De functie moet de chinese benaming van dat jaar als resultaat teruggeven.

Voorbeeld

>>> hemelseStam(3)
'yin vuur'
>>> aardseTak(11)
'varken'
>>> chineesJaar(2011)
'yin metaal haas' 


Added by:Peter Dawyndt
Date:2011-08-29
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None