自分の生年月日の年を選択すると、気学の何星かを出力するものです。
例
1919年=9
1920年=8
1921年=7
1922年=6
1923年=5
1924年=4
1925年=3
1926年=2
1927年=1
・
・
2010年=9
2011年=8
という形の9進数で巡っていきます。1919年から現在の2011年までの9進数を出していただきたいです。
意図していることは、自分の生年月日を入力して、自分の生まれ年がどの9進数かを出したいということです。
例
1982年と入力すると、9と表示(九紫火星)
という形です。
よろしくお願いします。
例えば
for$y(1919..2010){ printf "西暦 $y 年 = %d\n", -($y - 1927)%9+1; }
のようにすれば計算できます
・年が1増えると数値は1減っていくので +$yではなく-$yを用います
・1927年に最小値となるので$yを$y-1927に置き換えます。($y-1936、$y-1945…でも構いません)
・9年周期なので%9とします。
・最小値は1なので+1とします。
例えば
for$y(1919..2010){ printf "西暦 $y 年 = %d\n", -($y - 1927)%9+1; }
のようにすれば計算できます
・年が1増えると数値は1減っていくので +$yではなく-$yを用います
・1927年に最小値となるので$yを$y-1927に置き換えます。($y-1936、$y-1945…でも構いません)
・9年周期なので%9とします。
・最小値は1なので+1とします。
最小値ってどうやって出すんでしょう。でも凄い!
ありがとうございます。
$kekka = 9-$Year+1919+ INT(($Year-1919) / 9)*9
未確認ですが、こんな感じでできるでしょう。
ちなみに
2010年=9
2011年=8
は
2010年=8
2011年=7
となるのですが、途中で 何かあるのでしょうか?
あっ、ごめんなさい。それが正しいです。
9進数という表現に問題あるかと思いますが、1~9 を返す式と解釈してよいでしょうか。
ファイルに
print ( 9 - ( $ARGV[0] + 7 ) % 9 );
と書いて kinum.pl 等で保存し、 コマンドラインで
perl kinum.pl 1919
と実行すれば、数値が表示されると思います。1919 が正しければ、2010 は 8 のよう
ですが、その辺りはオフセット(現在は7)で調整してください。
これを関数にすれば、スクリプト内で汎用的に使用できるかと思います。
不明な点は下のコメントにて補足しますので、有効にお願いします。
それって全然9進数じゃない※、&その計算だと2010年は8になるはず、ですが、
以下のような式で簡単に導けます。
my $y = 2010; #年を入れる
my $ans = 9 - (($y - 1919) % 9); #1919は基準年
print "$y:$ans\n";
気学ってのが何なのかさっぱりなので、基準年は例にあった1919となっています。
基準年より前は計算できません。
基準年の部分には一番古い9の値になる西暦年を入れてください。
※0,1,...,7,8,10,11,..,17,18,20,...ってなるのが9進数。
9進数は数字の9を使わない。10進数に10を表す数字がないのと一緒)
最小値ってどうやって出すんでしょう。でも凄い!
ありがとうございます。