人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

気学の暦を作りたいのですが、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と表示(九紫火星)
という形です。

よろしくお願いします。

●質問者: tisei
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:1919年 1920年 1921年 1922年 1923年
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● imo758
●40ポイント ベストアンサー

例えば

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

◎質問者からの返答

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

ありがとうございます。


2 ● きゃづみぃ
●22ポイント

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

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

ちなみに

2010年=9

2011年=8

2010年=8

2011年=7

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

◎質問者からの返答

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


3 ● Mook
●22ポイント

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


ファイルに

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

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


 perl kinum.pl 1919

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

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


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

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


4 ● Sinraptor
●22ポイント

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ