0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

奇数×奇数の魔方陣を作るプログラム

Last updated at Posted at 2020-07-30

 あるいは、なでしこ3で配列をどうこうしたり、表を作ってみたりする。

発端

 なんで突然そういうことになったんだったか覚えてない(汗)
 しかし、折角学んだので、書き記しておく。

うぃきぺでぃあ先生に教えを請う

奇数×奇数の魔方陣の作り方

 ヒンズーの連続方式と言うそうです。
 ルールは簡単そう。やってみます。

準備(魔方陣用の二次元配列を作る)

 とりあえず一番簡単な3×3の魔方陣を作ることとし、魔方陣用の空配列を用意して、初期化します。
 なでしこ1では配列を宣言しなくても動きましたが、なでしこ3では絶対必要です。

 魔方陣=空配列。価=0。
 3回
  魔方陣[回数-1]=空配列。
 ここまで。

0,0から数字を置いていく

 うぃきぺでぃあさまの教え通りならば、まずは「上段の中央を1にする」というところなのですが、プログラム的には座標も価も0スタートが分かりやすい。

 9回
  列=価%3。行=価/3を切捨。
  x=行*-1+列。y=行*2-列。
  1. 上段の左端、[0,0]の位置に0を仮置き。

  2. 価が1増えるごと、x方向に+1。y方向へは-1。
     いきなりマイナスですが、気にしません!
     そして、折り返したときの開始位置が重要です。
     ここです。
    魔方陣1.jpg

  3. 前回の開始位置より、x方向に-1、y方向に+2の位置になります。
     ここからまた同様にして価を置いて行き、3×3で9回繰り返して全ての数字を置いたらこうなります。
    魔方陣2.jpg

はみ出した数をスライドさせる

  x=(x+(3/2を切捨)+3)%3。
  y=(y+3)%3。
まず簡単なyの方から。
  1. 全てのyに3を足す。
     これで、yの位置が全て整数になりました。
    魔方陣3.jpg

  2. それを割った余りがyの座標と言うことになります。
    魔方陣4.jpg

次にxです
  1. 全てのxに1を足す。(3/2を切捨)
     これで、0が上段中央に来ました。あとちょっと。

  2. 全てのxに3を足す。
     これで、xの位置が全て整数になりました。
    魔方陣5.jpg

  3. それを割った余りがxの座標と言うことになります。
     できました!
    魔方陣6.jpg

コード

 任意の数で魔方陣を作れるようにする。

「魔方陣のサイズ」を尋ねる。数=それ。
もし、(数の変数型確認)=「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で実装されました)
 表列合計はあるのになんでだ……と思いながら、魔方陣を入力したら合ってるかを判定するの作ろうとしてたんだったわ(バカ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?