How to resolve the algorithm Chinese zodiac step by step in the C programming language

Published on 7 June 2024 03:52 AM
#C

How to resolve the algorithm Chinese zodiac step by step in the C programming language

Table of Contents

Problem Statement

Traditionally, the Chinese have counted years using two lists of labels, one of length 10 (the "celestial stems") and one of length 12 (the "terrestrial branches"). The labels do not really have any meaning outside their positions in the two lists; they're simply a traditional enumeration device, used much as Westerners use letters and numbers. They were historically used for months and days as well as years, and the stems are still sometimes used for school grades. Years cycle through both lists concurrently, so that both stem and branch advance each year; if we used Roman letters for the stems and numbers for the branches, consecutive years would be labeled A1, B2, C3, etc. Since the two lists are different lengths, they cycle back to their beginning at different points: after J10 we get A11, and then after B12 we get C1. The result is a repeating 60-year pattern within which each pair of names occurs only once. Mapping the branches to twelve traditional animal deities results in the well-known "Chinese zodiac", assigning each year to a given animal. For example, Sunday, January 22, 2023 CE (in the common Gregorian calendar) began the lunisolar Year of the Rabbit. The celestial stems do not have a one-to-one mapping like that of the branches to animals; however, the five pairs of consecutive stems are each associated with one of the five traditional Chinese elements (Wood, Fire, Earth, Metal, and Water). Further, one of the two years within each element is assigned to yin, the other to yang. Thus, the Chinese year beginning in 2023 CE is also the yin year of Water. Since 12 is an even number, the association between animals and yin/yang doesn't change; consecutive Years of the Rabbit will cycle through the five elements, but will always be yin. You may optionally provide more information in the form of the year's numerical position within the 60-year cycle and/or its actual Chinese stem-branch name (in Han characters or Pinyin transliteration). Thus, year 1 of a cycle is the year of the Wood Rat (yang), year 2 the Wood Ox (yin), and year 3 the Fire Tiger (yang). The year 2023 - which, as already noted, is the year of the Water Rabbit (yin) - is the 40th year of the current cycle. Therefore 1984 was 甲子 (jiă-zĭ, or jia3-zi3). 2023 is 癸卯 (gŭi-măo or gui3-mao3).

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Chinese zodiac step by step in the C programming language

The provided C code calculates and prints the Chinese zodiac for a given list of years. Here's a step-by-step explanation of the code:

  • Constants:

    • animals[] and elements[] are arrays of strings representing the 12 Chinese zodiac animals and 5 elements.
  • Functions:

    • getElement(int year): This function takes a year as input and returns the corresponding element based on the Chinese zodiac cycle. It calculates the element index using the formula (year - 4) % 10 / 2.

    • getAnimal(int year): This function takes a year as input and returns the corresponding animal based on the Chinese zodiac cycle. It calculates the animal index using the formula (year - 4) % 12.

    • getYY(int year): This function takes a year as input and returns either "yang" or "yin" based on whether the year is even or odd, respectively.

  • Main Function:

    • main(): The main function initializes an array years[] containing a list of years to calculate the zodiac signs for.

    • It iterates through the years[] array and for each year, calls the getElement, getAnimal, and getYY functions to fetch the corresponding element, animal, and "yin"/"yang" designation.

    • Finally, it prints the calculated zodiac information for each year.

For the given list of years [1935, 1938, 1968, 1972, 1976, 2017], the program will output the Chinese zodiac signs and elements for each year:

1935 is the year of the Pig Earth (yin).
1938 is the year of the Tiger Earth (yang).
1968 is the year of the Monkey Earth (yang).
1972 is the year of the Rat Water (yang).
1976 is the year of the Dragon Fire (yang).
2017 is the year of the Rooster Fire (yin).

Source code in the c programming language

#include <math.h>
#include <stdio.h>

const char* animals[] = { "Rat","Ox","Tiger","Rabbit","Dragon","Snake","Horse","Goat","Monkey","Rooster","Dog","Pig" };
const char* elements[] = { "Wood","Fire","Earth","Metal","Water" };

const char* getElement(int year) {
    int element = (int)floor((year - 4) % 10 / 2);
    return elements[element];
}

const char* getAnimal(int year) {
    return animals[(year - 4) % 12];
}

const char* getYY(int year) {
    if (year % 2 == 0) {
        return "yang";
    } else {
        return "yin";
    }
}

int main() {
    int years[] = { 1935, 1938, 1968, 1972, 1976, 2017 };
    int i;

    //the zodiac cycle didnt start until 4 CE, so years <4 shouldnt be valid
    for (i = 0; i < 6; ++i) {
        int year = years[i];
        printf("%d is the year of the %s %s (%s).\n", year, getElement(year), getAnimal(year), getYY(year));
    }

    return 0;
}


  

You may also check:How to resolve the algorithm Power set step by step in the Rust programming language
You may also check:How to resolve the algorithm Bitmap/Bresenham's line algorithm step by step in the Scala programming language
You may also check:How to resolve the algorithm Hofstadter Figure-Figure sequences step by step in the uBasic/4tH programming language
You may also check:How to resolve the algorithm Twelve statements step by step in the Picat programming language
You may also check:How to resolve the algorithm Unicode strings step by step in the J programming language