パズルの解を求めて

 投稿者:GAI  投稿日:2012年 2月 6日(月)12時13分57秒
  知り合いから出題されたパズルで未だ解決できずに悶々としています。
力ずくで、コンピュータによる何らかのパターン調査ができたら解が見つかるかもと思い
お願いしています。



0:白 1:黒
に塗り分けた正方形のタイルがあることにする。
その全パターンは次の16種類となり
(上下の見分けが付くように、印を付けておく。)


00  00  00  00
00  01  10  11

01  01  01  01
00  01  10  11

10  10  10  10
00  01  10  11

11  11  11  11
00  01  10  11


この16枚のタイルを4×4の形に並べ替え(各タイルの上、下を守る。)
各行、各列の境の模様を同じにする。
しかも左端と右端が同じ、最上辺、最下辺が同じ(トーラスと同相)
模様になることまで満たすこと。



この条件を満たす配列を探すことをして頂きたいのですが・・・

 

Re: パズルの解を求めて

 投稿者:山中和義  投稿日:2012年 2月 6日(月)19時06分24秒
  > No.1753[元記事へ]

GAIさんへのお返事です。

回転などの対称性は排除していません。また、行や列でスライドしたものも含みます。


!問題
!次の0,1の模様(4ビットで構成された)がある16枚のピースがある。
! 1   2   3   4    5   6   7    8   9   10  11  12   13  14  15  16
!  00  00  00  00   01  01  01  01   10  10  10  10   11  11  11  11
!  00  01  10  11   00  01  10  11   00  01  10  11   00  01  10  11
!
!16枚を4行4列に条件を満たすように並べよ。
!条件
!・行や列の境ではビットが同じ並びである。
!・左端辺と右端辺、上端辺と下端辺が同じ並びである。

!答え
!題意を満たすビットの並び
! 01 | 12 | 23 | 30
! 45 | 56 | 67 | 74
! ----+----+----+----
! 45 | 56 | 67 | 74
! 89 | 9A | AB | B8
! ----+----+----+----
! 89 | 9A | AB | B8
! CD | DE | EF | FC
! ----+----+----+----
! CD | DE | EF | FC
! 01 | 12 | 23 | 30
!
!よって、[0],[1],[2],[3],…,[E],[F]の16ビットのビットパターン

10 DATA 0,1,4,5 !1行1列目のピース 番号は、[0]*2^3+[1]*2^2+[4]*2^1+[5]*2^0
   DATA 1,2,5,6 !1行2列目
   DATA 2,3,6,7 !1行3列目
   DATA 3,0,7,4 !1行4列目

   DATA 4,5,8,9 !2行1列目
   DATA 5,6,9,A !2行2列目
   DATA 6,7,A,B !2行3列目
   DATA 7,4,B,8 !2行4列目

   DATA 8,9,C,D !3行1列目
   DATA 9,A,D,E !3行2列目
   DATA A,B,E,F !3行3列目
   DATA B,8,F,C !3行4列目

   DATA C,D,0,1 !4行1列目
   DATA D,E,1,2 !4行2列目
   DATA E,F,2,3 !4行3列目
   DATA F,C,3,0 !4行4列目

   LET C=0 !解の数

   DIM B(0 TO 15) !ビットパターン
   FOR i=0 TO 2^16-1 !0,1,2,3,…,E,Fは、0または1
      LET t=i !2進法16桁へ
      FOR k=0 TO 15
         LET B(k)=MOD(t,2)
         LET t=INT(t/2)
      NEXT k


      RESTORE 10 !先頭へ位置付ける

      DIM P(0 TO 15) !16枚のピースへの「ピース番号(ビットパターンによる)」
      FOR j=0 TO 15
         LET V=0 !10進法へ
         FOR k=1 TO 4
            READ n$ !ビット位置を得る
            LET t=POS("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",n$)-1
            LET V=V*2+B(t)
         NEXT k
         !!!PRINT V; !debug
         LET P(j)=V !「ピース番号」
      NEXT j


      DIM F(0 TO 15) !ピースが重複するかどうか確認する
      MAT F=ZER
      FOR k=0 TO 15
         LET t=P(k) !「ピース番号」を得る
         IF F(t)=1 THEN EXIT FOR !重複!!!
         LET F(t)=1
      NEXT k
      IF k>15 THEN !重複しないなら

      !!IF P(0)<P(1) AND P(1)<P(4) THEN !対称性を考慮する

         LET C=C+1 !結果を表示する
         PRINT "No.";C
         FOR k=0 TO 15
            PRINT P(k);
            IF MOD(k+1,4)=0 THEN PRINT
         NEXT k
         PRINT

         !!END IF

      END IF

   NEXT i !次へ

END


実行結果

No. 1
15  14  9  7
13  10  4  12
6  8  0  1
11  3  2  5

No. 2
7  10  1  3
15  11  6  13
14  12  8  5
9  2  0  4

No. 3
11  6  13  15
12  8  5  14
2  0  4  9
10  1  3  7

No. 4
3  2  5  11
14  9  7  15
10  4  12  13
8  0  1  6

No. 5
15  11  6  13
14  12  8  5
9  2  0  4
7  10  1  3

No. 6
7  15  14  9
12  13  10  4
1  6  8  0
5  11  3  2

No. 7
11  3  2  5
15  14  9  7
13  10  4  12
6  8  0  1

No. 8
3  7  10  1
13  15  11  6
5  14  12  8
4  9  2  0

No. 9
13  15  11  6
5  14  12  8
4  9  2  0
3  7  10  1

No. 10
5  11  3  2
7  15  14  9
12  13  10  4
1  6  8  0

No. 11
9  7  15  14
4  12  13  10
0  1  6  8
2  5  11  3

No. 12
1  3  7  10
6  13  15  11
8  5  14  12
0  4  9  2

No. 13
13  10  4  12
6  8  0  1
11  3  2  5
15  14  9  7

No. 14
5  14  12  8
4  9  2  0
3  7  10  1
13  15  11  6

No. 15
9  2  0  4
7  10  1  3
15  11  6  13
14  12  8  5

No. 16
1  6  8  0
5  11  3  2
7  15  14  9
12  13  10  4

No. 17
14  9  7  15
10  4  12  13
8  0  1  6
3  2  5  11

No. 18
6  13  15  11
8  5  14  12
0  4  9  2
1  3  7  10

No. 19
10  1  3  7
11  6  13  15
12  8  5  14
2  0  4  9

No. 20
2  5  11  3
9  7  15  14
4  12  13  10
0  1  6  8

No. 21
14  12  8  5
9  2  0  4
7  10  1  3
15  11  6  13

No. 22
6  8  0  1
11  3  2  5
15  14  9  7
13  10  4  12

No. 23
10  4  12  13
8  0  1  6
3  2  5  11
14  9  7  15

No. 24
2  0  4  9
10  1  3  7
11  6  13  15
12  8  5  14

No. 25
12  8  5  14
2  0  4  9
10  1  3  7
11  6  13  15

No. 26
4  12  13  10
0  1  6  8
2  5  11  3
9  7  15  14

No. 27
8  0  1  6
3  2  5  11
14  9  7  15
10  4  12  13

No. 28
0  4  9  2
1  3  7  10
6  13  15  11
8  5  14  12

No. 29
12  13  10  4
1  6  8  0
5  11  3  2
7  15  14  9

No. 30
4  9  2  0
3  7  10  1
13  15  11  6
5  14  12  8

No. 31
8  5  14  12
0  4  9  2
1  3  7  10
6  13  15  11

No. 32
0  1  6  8
2  5  11  3
9  7  15  14
4  12  13  10

 

Re: パズルの解を求めて

 投稿者:GAI  投稿日:2012年 2月 6日(月)22時40分6秒
  > No.1754[元記事へ]

山中和義さんへのお返事です。

プログラムの作成ありがとうございます。
解を探しに行く発想の着眼点は思っても見ないアイデアで感心いたします。

ただ点検していましたら、次の結果での並びで 0と6が隣同士ではパターンがずれるのではないかと思われますが・・・

> 実行結果
>
> No. 12
>  2  4  13  11
>  10  1  7  15
>  8  5  14  12
>  0  6  9  3
>
>
> No. 26
>  1  7  15  10
>  5  14  12  8
>  4  9  3  2
>  0  6  13  11
>
> No. 27
>  2  5  11  3
>  10  4  13  15
>  8  1  7  14
>  0  6  12  9
>
> No. 28
>  2  4  12  9
>  10  1  3  7
>  8  5  15  14
>  0  6  13  11
>
 

Re: パズルの解を求めて

 投稿者:山中和義  投稿日:2012年 2月 7日(火)01時09分30秒
  > No.1755[元記事へ]

GAIさんへのお返事です。

> ただ点検していましたら、次の結果での並びで 0と6が隣同士ではパターンがずれるのではないかと思われますが・・・
>
> > 実行結果
> >
> > No. 12
> >  2  4  13  11
> >  10  1  7  15
> >  8  5  14  12
> >  0  6  9  3
> >
> >
> > No. 26
> >  1  7  15  10
> >  5  14  12  8
> >  4  9  3  2
> >  0  6  13  11
> >
> > No. 27
> >  2  5  11  3
> >  10  4  13  15
> >  8  1  7  14
> >  0  6  12  9
> >
> > No. 28
> >  2  4  12  9
> >  10  1  3  7
> >  8  5  15  14
> >  0  6  13  11
> >
>


NEXT J の位置が間違っていました。(ピース番号をすべて作った後でないと重複チェックはできません)
プログラムを修正しましたので、参照してください。

 

戻る