aboutsummaryrefslogtreecommitdiff
path: root/challenge-103/paulo-custodio/forth/ch-1.fs
blob: 719ef8fe0fdc07989dfe2ea42f60ef44698fb0dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#! /usr/bin/env gforth

\ Challenge 103
\
\ TASK #1 � Chinese Zodiac
\ Submitted by: Mohammad S Anwar
\ You are given a year $year.
\
\ Write a script to determine the Chinese Zodiac for the given year $year.
\ Please check out wikipage for more information about it.
\
\ The animal cycle: Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey,
\ Rooster, Dog, Pig.
\ The element cycle: Wood, Fire, Earth, Metal, Water.
\
\ Example 1:
\     Input: 2017
\     Output: Fire Rooster
\ Example 2:
\     Input: 1938
\     Output: Earth Tiger

: .one  { addr len n -- , type name }
    addr
    n 8 * +                 \ start of word
    8 -TRAILING TYPE SPACE ;

: .animal   { n -- , prints name of animal }
    S" Rat     Ox      Tiger   Rabbit  Dragon  Snake   Horse   Goat    Monkey  Rooster Dog     Pig     "
    n 12 MOD .one ;

: .element   { n -- , prints name of element }
    S" Wood    Wood    Fire    Fire    Earth   Earth   Metal   Metal   Water   Water   "
    n 10 MOD .one ;


NEXT-ARG S>NUMBER? 0= THROW DROP    \ get year
1924 -                              \ subtract base year
DUP .element .animal CR
BYE