プログラマ初心者です。Perlで占いのプログラムを作りたいのですが、暦を作りたいんです。

平成23年1月= 9
平成23年2月= 8
平成23年3月= 7
    ・
    ・
    ・
平成23年9月= 1

というような、9からはじまり1で終わり、また9から始まって1で終わるという九進数のループを教えていただきたいです。
年マタギする部分が一番分からないので、平成24年にまたぐ瞬間をどのように書けばよいのか教えてください。 

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/02/01 16:47:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:snmp No.1

回答回数20ベストアンサー獲得回数1

ポイント58pt

平成○○年のところを月変換し、変換した値とその月の合計値を9で割れば

9進数の計算ができるかと思います。

以下参考までに

#!/usr/bin/perl

use strict;
use warnings;

#平成23年
for my $tuki(1..12){
        &keisan(23,$tuki);
}

#平成24年
for my $tuki(1..12){
        &keisan(24,$tuki);
}


sub keisan {
        my ($heisei,$tuki) = @_;
        my $tuki_sum = $heisei * 12 + $tuki;

        my $amari = $tuki_sum % 9;

        if($amari == 7){ print "平成".$heisei."年".$tuki."月=9\n"; }
        if($amari == 8){ print "平成".$heisei."年".$tuki."月=8\n"; }
        if($amari == 0){ print "平成".$heisei."年".$tuki."月=7\n"; }
        if($amari == 1){ print "平成".$heisei."年".$tuki."月=6\n"; }
        if($amari == 2){ print "平成".$heisei."年".$tuki."月=5\n"; }
        if($amari == 3){ print "平成".$heisei."年".$tuki."月=4\n"; }
        if($amari == 4){ print "平成".$heisei."年".$tuki."月=3\n"; }
        if($amari == 5){ print "平成".$heisei."年".$tuki."月=2\n"; }
        if($amari == 6){ print "平成".$heisei."年".$tuki."月=1\n"; }

}
exit;


実行結果

--------------------------------

平成23年1月=9

平成23年2月=8

平成23年3月=7

平成23年4月=6

平成23年5月=5

平成23年6月=4

平成23年7月=3

平成23年8月=2

平成23年9月=1

平成23年10月=9

平成23年11月=8

平成23年12月=7

平成24年1月=6

平成24年2月=5

平成24年3月=4

平成24年4月=3

平成24年5月=2

平成24年6月=1

平成24年7月=9

平成24年8月=8

平成24年9月=7

平成24年10月=6

平成24年11月=5

平成24年12月=4

--------------------------------

id:tisei

素晴らしいですね。朝飯前って感じですね。すごい!!

このアルゴリズムが計算できなくて、、、。

助かりました。使わせていただきます!!

2011/02/01 16:46:43

その他の回答3件)

id:snmp No.1

回答回数20ベストアンサー獲得回数1ここでベストアンサー

ポイント58pt

平成○○年のところを月変換し、変換した値とその月の合計値を9で割れば

9進数の計算ができるかと思います。

以下参考までに

#!/usr/bin/perl

use strict;
use warnings;

#平成23年
for my $tuki(1..12){
        &keisan(23,$tuki);
}

#平成24年
for my $tuki(1..12){
        &keisan(24,$tuki);
}


sub keisan {
        my ($heisei,$tuki) = @_;
        my $tuki_sum = $heisei * 12 + $tuki;

        my $amari = $tuki_sum % 9;

        if($amari == 7){ print "平成".$heisei."年".$tuki."月=9\n"; }
        if($amari == 8){ print "平成".$heisei."年".$tuki."月=8\n"; }
        if($amari == 0){ print "平成".$heisei."年".$tuki."月=7\n"; }
        if($amari == 1){ print "平成".$heisei."年".$tuki."月=6\n"; }
        if($amari == 2){ print "平成".$heisei."年".$tuki."月=5\n"; }
        if($amari == 3){ print "平成".$heisei."年".$tuki."月=4\n"; }
        if($amari == 4){ print "平成".$heisei."年".$tuki."月=3\n"; }
        if($amari == 5){ print "平成".$heisei."年".$tuki."月=2\n"; }
        if($amari == 6){ print "平成".$heisei."年".$tuki."月=1\n"; }

}
exit;


実行結果

--------------------------------

平成23年1月=9

平成23年2月=8

平成23年3月=7

平成23年4月=6

平成23年5月=5

平成23年6月=4

平成23年7月=3

平成23年8月=2

平成23年9月=1

平成23年10月=9

平成23年11月=8

平成23年12月=7

平成24年1月=6

平成24年2月=5

平成24年3月=4

平成24年4月=3

平成24年5月=2

平成24年6月=1

平成24年7月=9

平成24年8月=8

平成24年9月=7

平成24年10月=6

平成24年11月=5

平成24年12月=4

--------------------------------

id:tisei

素晴らしいですね。朝飯前って感じですね。すごい!!

このアルゴリズムが計算できなくて、、、。

助かりました。使わせていただきます!!

2011/02/01 16:46:43
id:niwa-mikiho No.2

回答回数516ベストアンサー獲得回数40

ポイント12pt

use strict;

use warnings;

my $heisei = 23;

my $month = 1;

my $nine = 9;

my $range = 24;

for(my $i = 1; $i < $range; $i++){

  print "平成$heisei年$month月=$nine\n";

  $month++;

  if($month == 13){

    $heisei++;

    $month = 1;

  }

  $nine--;

  $nine = 9 if $nine == 0;

}

■実行結果

平成23年1月=9

平成23年2月=8

平成23年3月=7

平成23年4月=6

平成23年5月=5

平成23年6月=4

平成23年7月=3

平成23年8月=2

平成23年9月=1

平成23年10月=9

平成23年11月=8

平成23年12月=7

平成24年1月=6

平成24年2月=5

平成24年3月=4

平成24年4月=3

平成24年5月=2

平成24年6月=1

平成24年7月=9

平成24年8月=8

平成24年9月=7

平成24年10月=6

平成24年11月=5

id:tisei

$nine--;の部分が・・・。ただマイナスにするだけではだめなんです。惜しい・・・。

2011/01/28 13:27:36
id:imo758 No.3

回答回数121ベストアンサー獲得回数19

ポイント10pt

http://codepad.org/ydprbUoD

このようなものでよろしいのでしょうか?

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 type-a 516 420 40 2011-01-28 14:33:34
  • id:imo758
    間違っていたので訂正 http://codepad.org/36VyCNBR
  • id:tisei
    imo758さん
    ありがとうございます。
    アルゴリズムがよくわからないのですが、+6をした意味が分からないです。
    現在の月を出力させて、9進数の中でどの数字が出るか。というのが意図していることです。
    説明不足で申し訳ありません。
  • id:imo758
    ひとつの解釈としては、平成0年6月に1となる、という意味になります。

    …実際のプログラミング手順としては、+0だと平成23年1月 = 3となりますので
    得たい数値の9と出力の差3から修正値+6を得ています。



    他の方法としては

    printf "平成 $y 年 $m 月 = %d\n", (-$y*12-$m+6)%9+1;

    の代わりに

    printf "平成 $y 年 $m 月 = %d\n", (-($y-23)*12 -($m-9) )%9+1;

    としても同じ結果が得られます。(23年9月に最小値をとるという意味で立式)

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

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

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

回答リクエストを送信したユーザーはいません