気学の暦を作りたいのですが、perlで西暦に合わせた9進数のプログラムを作って頂けないでしょうか。

自分の生年月日の年を選択すると、気学の何星かを出力するものです。


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と表示(九紫火星)
という形です。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/02/02 11:50:46
  • 終了:2011/02/02 17:19:13

ベストアンサー

id:imo758 No.1

imo758回答回数121ベストアンサー獲得回数192011/02/02 12:21:25

ポイント40pt

例えば

http://codepad.org/NtxFEXod

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とします。

id:tisei

最小値ってどうやって出すんでしょう。でも凄い!

ありがとうございます。

2011/02/02 17:12:05

その他の回答(3件)

id:imo758 No.1

imo758回答回数121ベストアンサー獲得回数192011/02/02 12:21:25ここでベストアンサー

ポイント40pt

例えば

http://codepad.org/NtxFEXod

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とします。

id:tisei

最小値ってどうやって出すんでしょう。でも凄い!

ありがとうございます。

2011/02/02 17:12:05
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/02/02 12:35:11

ポイント22pt

$kekka = 9-$Year+1919+ INT(($Year-1919) / 9)*9

未確認ですが、こんな感じでできるでしょう。

ちなみに

2010年=9

2011年=8

2010年=8

2011年=7

となるのですが、途中で 何かあるのでしょうか?

id:tisei

あっ、ごめんなさい。それが正しいです。

2011/02/02 17:15:44
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912011/02/02 12:59:44

ポイント22pt

9進数という表現に問題あるかと思いますが、1~9 を返す式と解釈してよいでしょうか。


ファイルに

 print ( 9 - ( $ARGV[0] + 7 ) % 9 );

と書いて kinum.pl 等で保存し、 コマンドラインで


 perl kinum.pl 1919

と実行すれば、数値が表示されると思います。1919 が正しければ、2010 は 8 のよう

ですが、その辺りはオフセット(現在は7)で調整してください。


これを関数にすれば、スクリプト内で汎用的に使用できるかと思います。

不明な点は下のコメントにて補足しますので、有効にお願いします。

id:Sinraptor No.4

Sinraptor回答回数3ベストアンサー獲得回数02011/02/02 16:35:57

ポイント22pt

それって全然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を表す数字がないのと一緒)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません