あそびをせんとや


2001.02.27 公開
2018.02.22 更新

ちょっと珍しいパズル・ゲーム・ブロックなどを紹介するページです。


ひとこと




2月22日(木) 六角魔方陣の研究(その2)

 昨日、2例ほど解いてみた六角魔方陣の解は、実は立方八面体魔方陣になっていたという話を書きました。ということは、立方八面体には4つの六角形の断面がありますから、1つの立方八面体魔方陣の解から4種類の六角魔方陣の解のパターンが生成できるということになります。くどいですが全部図示してみました。

図 1 図 2
図 3 図 4
図 5 図 6
図 7 図 8

 すべての図において、左側の立方八面体の13の点の数字は全く一緒です。それぞれの段の左側、赤で示した六角形の位置が違います。赤い六角形の頂点の数字が、右側の六角魔方陣の六角形の頂点になるように六角魔方陣に数字を入れます。図は全部で4つあって、六角形の頂点は6つですから、1〜12の数字はすべてちょうど2回ずつ頂点に置かれます。確かめてみてください。また、右側の4つの六角魔方陣がちゃんと成立していること(すべて和が21になっていること)を確かめてみてください。

 先日たまたま、1が六角形の頂点になっている六角魔方陣と、1が辺の中点になっている六角魔方陣の例を作ってみましたが、実はこの2つは立方八面体を考えると全く同じだったのでした。

 いかがでしょうか。平面上の六角魔方陣の解としては別解になっている4つのパターンが、いずれも同じ立方八面体魔方陣の異なる平面射影図だと理解できるのです。とても面白いと思います。

 ここまで確かめると、次に自然に出てくる疑問は「ほかにも立方八面体魔方陣の解はあるのか?」「立方八面体魔方陣の解ではない、六角魔方陣の解はあるのか?」というものです。この疑問を解決するため、プログラムを書いて調べることにしました。

(つづく)

<おまけのひとこと>
 2月21日(水)は2つの病院に行くためにお休みを取りました。リスーピアワークショップの準備をしました。もう少ししたらこのページでもご案内を出させていただこうと思います。

 2月22日(木)の朝に、2/22, 2/23 の2日分の更新をしています。






2月23日(金) 多角魔方陣を解くプログラムを書いてみた

 昨日の疑問、「ほかにも立方八面体魔方陣の解はあるのか?」「立方八面体魔方陣の解ではない、六角魔方陣の解はあるのか?」を確かめるべく、計算機に頑張ってもらうことにしました。こんなプログラムを書いてみました。

 いつものようにソースコードの「画像」です。テキストではありません。ごめんなさい。(「でも、このくらいの行数なら手で打ち込んでもたかが知れているよね」とか思うのは私が年寄だからかなあと思います。)

 関数 perm() は順列を求める常套手段の再帰関数です。ここには書かれていませんが、マクロとしてN_GONというのを定義してあって、六角魔方陣ならば N_GON は6です。以下、説明を簡単にするために六角魔方陣だとします。

 グローバル変数として、Point[13] という配列を用意します。ここに、1〜13の数字が入ります。Used[13]という配列も用意しておいて、数字を配置するときに、その場所がまだ空いているかを判断するために使っています。

 Num という変数も出てきますが、これは N_GON と同じです。(N_GONにしておけばよかったですね。)13個の数字の順列を全部生成すると時間がかかるので、中心の7は固定にして、さらに7をはさんで向かい合う2つの数字の和は必ず14になるので、一度に数字を2つずつ入れていきます。

 さらにさらに、数字の1と、その向かい側の13の位置を固定します。main()関数の最初のかたまりでは1と13を六角形の頂点に配置します。2つ目のかたまりでは1と13は辺の中点にします。こうすることで、再帰の深さは高々5段に抑えられます。

 perm()は数字の2(と12)を入れるところから呼び出され、3と11、4と10、5と9、6と8まで入れたら perm()関数の最初の if 文に引っ掛かって check_array()関数で六角魔方陣として成立しているかをチェックします。具体的には6つの辺の3つの数字の和を確かめるだけでOKです。

 このプログラムでは、1を固定しているため回転解は出てきませんが、対称解は出てきてしまいます。なので計算結果の数を2で割ったものが求める解の個数ということになります。

 まず最初に N_GON を4にして、いわゆる普通の3×3の正方形の魔方陣を解かせてみたら、あっという間に2つ、鏡像解が出てきました。成功です。

(つづく)



 

 水曜日に病院に行った後で処方箋を持って薬局に寄ったのですが、薬局を出たところの掲示板に、小平奈緒選手の新聞記事の切り抜きと、いかにもプリンタで1枚ずつ出力しました、という手造り感あふれるおめでとうメッセージが掲示されていました。

図 2

 ああ、すごいなあと思いました。ここだけでなく、いろいろなところ、いろいろなお店に「おめでとう」メッセージが出ていて何かサービスがあったりして、地元としては本当に純粋に明るいニュースで、とても嬉しいことです。

<おまけのひとこと>
 上記のプログラム、いきなりあっさり動くプログラムが書けたかのごとくご紹介していますが、もちろんそんなわけではありません。高々100行にも満たないコードなので、最初に書くのは10分もかかりませんでしたが、再帰関数を私がいきなり正しく書けるはずもなく、意図通り動くようになるまでに30分近くデバッグしました。

 対称性も含めて同じ解は出力しないようにするならば、過去の解を全部記憶しておいて、新しい解が見つかったら過去の解と照合するルーチンを入れればいいのですけれども、そんな手間をかけるくらいなら鏡像解を受け入れるほうが早いと思ったので、そういう実装はしませんでした。




前回の「ひとこと」へ⇒


Contents

過去の「表紙のひとこと」

 事実上のメインコンテンツです。過去の「表紙のひとこと」へのリンクの表を表紙に載せていましたが、2008年1月から、別ページのみにしました。

古楽の楽譜のページnew!

 ホームページ領域がオーバーフローしたのに伴って、家族の領域まで進出させてもらうことにしました。この機会に自作の楽譜のページを新設することにしました。なんと無謀にも英語だけのページにしてみました。(需要はなさそうです。)

 ノード(Naudot,J.C)のフルートソナタト長調の通奏低音をリアライズした楽譜を追加しました。(2018年1月20日)


その他のContents

 あまり更新していません…

あそびのコラム

 (2015.01.03 更新)  Updated 

 サッカーしょうぎを追加。約10年ぶりに「あそびのコラム」を追加しました。「サッカーしょうぎ」のルールと実戦例の解説です。



あそびのページ

 (2002.04.29 更新:六面(仮)ボード追加)

 このページでは、JAVAによるパズルやゲームをいくつかと、ちょっと珍しい(と私が思っている)ブロックなどを紹介します。
 JAVAのパズルのほうは「Flip It パズル」・「UFOパズル」と「Posit」というゲームがメインで、そのほかに何種類かゲームやパズルを載せています。興味がある方がいらしたら、一部ソースコード等も公開してゆこうと思っていますのでお問い合わせください。
 ブロックの方はとりあえず写真でご紹介しています。こちらは画像中心です。


  • リコーダーのMIDIのページ  (2002.01.02 更新)
     バッハのフーガを1曲と、ヘンデルを3曲追加。

  • JAVAによる遊べるページ(画像をクリックしてください)
    キングと悪魔のパズルのページ (2005.11.29 更新)  new

    このパズルに関しては、このサイトの中の2003年12月15日のひとことから数日にわたってご紹介していたのですが、2005年11月29日のひとことで、キングの側のアルゴリズムを強化したのに伴って、ここに載せることにしました。
    カラーキューブ カラーキューブパズルのページ (2004.06.16 更新)

    カラーキューブパズル、という色をあわせるタイプのパズルをJavaアプレットにしてみました。このパズルに関しては、このサイトの中の2004年6月2日のひとことから数日にわたってご紹介しています。あわせてご覧下さい。
    将棋パズル2 将棋パズル2のページ (2003.01.27 更新)

    将棋の駒を使ったパズルを作りました。駒の動きについての説明はありません。ごめんなさい。将棋パズル1に関しては、このサイトの中の2003年1月19日のひとことのあたりに10問ほど用意してありますのでご覧ください。
    エントロピー エントロピーのページ (2002.01.16 更新)

     エントロピーという二人で遊ぶゲームのゲーム盤を作りました。ルールは簡単なのですが、  言葉だけで説明するとちょっとわかりにくいので、このゲーム盤をお試しください。
    flipit  Flip It Puzzleのページ (2001.10.06 更新)

     Flip It というパズルを載せました。問題集に問題を20問と、研究用に駒を自由に配置してプレイできるFlip It ボードを用意しました。お試しください。
    Posit  Positのページ (2001.03.18 更新)

     「ポジット」という二人ゲームを紹介します。ルールを体験していただくため、JAVAアプレットのプログラムを用意しました。とても弱いプログラムですが、ルールを理解していただく手助けにはなるかと思います。ぜひプレイしてみてください。

     ハンディキャップをつけるため、様々な状態からプレイをはじめられるように改造してみました。プログラムが弱すぎてつまらない方、いくつか「問題」を追加しましたのでお楽しみください。
    game-puzzle その他のゲーム・パズル集 (2002.04.29 更新)  new

     スライドパズルやサウンドパズル、2人で遊ぶゲームをパズルとして遊ぶものなどを置いてあります。お楽しみください。
     六面(仮)ボードを追加しました。



  • ブロックなどを紹介するページ  (2001.05.08 更新)
     "3D Geo Shapes", "BoYon Golo", "K'nex", "体感ブロック", "フレームキューブ" といった、ちょっと珍しいブロックを紹介します。新たに"Sternmosaik"を追加しました。
     Sternmosaikのページに、印刷して切って試せる型紙を載せました。

  • その他

    ○ あそびをせんとや・分室  (2002.07.21 作成)
     無料のホームページスペースを借りて、サイズの大きい画像ファイルなどを載せています。
    ○ このページおよび作者について  (2007.11.18 更新)
     ここはページ公開直後の状態のまま手付かずだったので、久々に修正しました。
    ○ リンク集  (2010.04.11 更新)  Updated
     実に8年ぶりくらいに大幅に見直しました。

     リンクはどのページへもご自由にどうぞ。ページの構成はかわる可能性があります。 asobi.gif(リンクバナー画像)

    ご意見、ご感想をお寄せください。
    mailto:hhase@po10.lcv.ne.jp
    2001-2017 hhase