Location : Home > Languages > Perl > Package
Title : Math::MagicSquare::Generator
Toolbox Logo

名称

 Math::MagicSquare::Generator - 魔方陣の生成


概要

use Math::MagicSquare::Generator

my $square = Math::MagicSquare::Generator->new(size => 5,
                                               step => 3,
                                               start=> 6);
for ($square, $square->vflip, $square->hflip) {
print $_->as_string;
print "-----\n";
}

$square->[0][0] = -15; # Break magic :)
print $square->check ? "Magic square\n" : "Just a square\n";

print '';
print Math::MagicSquare::Generator->new->hflip->vflip->as_html;
print '';

説明

 本モジュールは魔方陣を生成する。魔方陣とはすべての要素が異なっており、すべての列和・行和・対角線の和が等しい行列のことである。また Math::MagicSquare::Generator は汎方陣(panmagic squares)や偶数次の魔方陣は生成できない。(汎方陣とは「折りたたんだ」対角線も和も等しい魔方陣のことである。)


使用例

     3 16  9 22 15
    20  8 21 14  2
     7 25 13  1 19
    24 12  5 18  6
    11  4 17 10 23

(この方陣は Math::MagicSquare::Generator->new->as_string; の出力)
行の和は 65。
列の和は 65。
対角線の和も 6。.


メソッド

new

 即時に方陣を生成するコンストラクタ。所与の名称の引数を用いてオブジェクトを生成する。引数は size と step と start である。size は正の奇数でなければならない。

item check

 チェッカーである。もし魔方陣なら共通の和を返し、そうでない場合は undef を返す。和は 0 にはなりえないのでこれをブール値として用いることもできる。(ただし 1x1 の方陣では和が 0 も可能ではあるが。)
 魔方陣が修正されたかどうかの確認にも使用できる。

sum

 行・列・対角線の和を返す。

vflip, hflip

 方陣の上下反転または左右反転を返す。

as_string, as_html, as_csv

 書いてる通り(DWYM)。書式が整えられた文字列・html または CSV フォーマットの方陣を返す。


本モジュールと Math::MagicSquare

 Math::MagicSquare は正方形にならんだ数字の組が魔方陣であるかをチェックするモジュールである。この場合は新たなメソッドとして起動するので生成された方陣と区別しなければならない。

use Math::MagicSquare;
use Math::MagicSquare::Generator;

my $square = Math::MagicSquare::Generator->new;
print Math::MagicSquare->new( @$square )->check, "\n"; # 2

 本モジュールを利用して方陣をチェックすれば常に 2 を返す。( 1 x 1 方陣なら 3 を返す)


バグ

 まだない。


著者

 Juerd, <juerd@juerd.nl>

Toolbox Logo
Updated : 2006/06/29