あるいは、なでしこ3で配列をどうこうしたり、表を作ってみたりする。
発端
なんで突然そういうことになったんだったか覚えてない(汗)
しかし、折角学んだので、書き記しておく。
うぃきぺでぃあ先生に教えを請う
ヒンズーの連続方式と言うそうです。
ルールは簡単そう。やってみます。
準備(魔方陣用の二次元配列を作る)
とりあえず一番簡単な3×3の魔方陣を作ることとし、魔方陣用の空配列を用意して、初期化します。
なでしこ1では配列を宣言しなくても動きましたが、なでしこ3では絶対必要です。
魔方陣=空配列。価=0。
3回
魔方陣[回数-1]=空配列。
ここまで。
0,0から数字を置いていく
うぃきぺでぃあさまの教え通りならば、まずは「上段の中央を1にする」というところなのですが、プログラム的には座標も価も0スタートが分かりやすい。
9回
列=価%3。行=価/3を切捨。
x=行*-1+列。y=行*2-列。
-
上段の左端、[0,0]の位置に0を仮置き。
-
価が1増えるごと、x方向に+1。y方向へは-1。
いきなりマイナスですが、気にしません!
そして、折り返したときの開始位置が重要です。
ここです。
-
前回の開始位置より、x方向に-1、y方向に+2の位置になります。
ここからまた同様にして価を置いて行き、3×3で9回繰り返して全ての数字を置いたらこうなります。
はみ出した数をスライドさせる
x=(x+(3/2を切捨)+3)%3。
y=(y+3)%3。
まず簡単なyの方から。
次にxです
-
全てのxに1を足す。(3/2を切捨)
これで、0が上段中央に来ました。あとちょっと。
コード
任意の数で魔方陣を作れるようにする。
「魔方陣のサイズ」を尋ねる。数=それ。
もし、(数の変数型確認)=「string」ならば、数=数を半角変換してそれを整数変換。
もし、数%2=1ならば、 #奇数
数の奇数次魔方陣作成。
違えば、
「奇数を入力して下さい」と言う。
ここまで。
●(数の)奇数次魔方陣作成
魔方陣=空配列。価=0。
# 魔方陣用の二次元配列を作る
(数)回
魔方陣[回数-1]=空配列。
ここまで。
(数*数)回。
# 0,0から数字を置いていく
列=価%数。行=価/数を切捨。
x=行*-1+列。
y=行*2-列。
# はみ出した数をスライドさせる
x=(x+(数/2を切捨)+数)%数。
y=(y+数)%数。
魔方陣[y][x]=価+1。
価=価+1。
ここまで。
魔方陣の表作成。
ここまで。
#二次元配列でテーブルを作成(タイトルなし)
●(Aの)表作成
表=「<table>」
Aを反復
表=表に「<tr>」を追加。
対象を反復
表=表に「<td>{対象}</td>」を追加。
ここまで。
表=表に「</tr>」を追加。
ここまで。
表=表に「</table>」を追加。
表をDOM親要素にHTML設定。
ここまで。
動作確認
実際に作った3*3の魔方陣と同じになることを確認出来たので、数を7にしてみて、うぃきぺでぃあさまの例と同じになっていることを確認。(価が1からになるように配列へ代入時に1を足しています)
おわります
なでしこさんで魔方陣作れました。やったね!
そういや思い出したけど、こうじゃ無かった。
なでしこ3には 配列合計無いじゃん! (v3.2.9で実装されました)
表列合計はあるのになんでだ……と思いながら、魔方陣を入力したら合ってるかを判定するの作ろうとしてたんだったわ(バカ)