『今週の問題』第179回 解答


◆東京都 明 さんからの解答

【問題1】

○,○,×,×,×,
×,×,×,◎,◎,
×,×,×,×,◎,
○,×,×,×,×,
×,×,◎,◎,×
【問題2】

基本的な配列は1通り。
回転(4種類)、裏返し(2種類)で8通りとなります。

【問題3】

まず豚2匹の基本配置を以下のように洗い出し、縦、横、斜めをつぶして、5箇所以上の空きができるものを拾い上げ、さらに一匹を追加して、最終的に5箇所の空きが残るものを拾いあげました。
結果、3つ(同型)を見つけました。

中央に1匹がいる場合(5通り)
中央になく、内周に少なくとも1匹の場合(24通り)
外周のみに2匹の場合(21通り)

論理的な決定法がわかりませんので洗い出しのプログラムを「(仮称)十進BASIC」で作ってみました。
これで計算すると、豚とライオンの関係は下記のようになります。

 豚 ライオン 解の数
 0  25    1
 1  12   16
 2   7   24
 3   5    8
 4   4   18
 5   3    8
 6   2  246 
 7   2   24
 8   1(これ以後は時間がかかりすぎるので
 ・   ・ 実行していません。)
12   1   16
13   0    ?
 ・   ・ 
25   0    1

ライオン(または豚)の数が0となる場合 の解の数は、25個から豚(またはライオン)の数を選ぶ 組み合わせの数となると思います。


【コメント】

広島県 清川 育男 さんからの情報によると、次のような結果になるそうです。

  豚 ライオン 解の数
  0  25      1
  ・   ・        ・
   1  13        0 
  1  12      16
  1  11    192
  1  10   1064
  1   9   3600
  1   8   8281 
  2   7     24
  3   5      8
  4   4     18
  5   3      8
  6   2    246 
  7   2     24
  8   1   8281
  9   1   3600
 10   1   1064
 11   1    192
 12   1     16
 13   1      0
  ・   ・        ・ 
 25   0      1

◆明さんのプログラム

DECLARE EXTERNAL SUB ZYUN
LET A=5  ! 配列数定義
LET W=3  ! 監視人数定義(豚の数)
DIM ARAY(A,A)  ! 配置領域定義
DIM KANS(A,A)  ! 監視人配置パターン領域定義

REM 基準配列の生成
LET HN=A*A   ! 配置領域数
DIM N(HN)
MAT N=ZER
LET WW=W
FOR I=HN TO 1 STEP -1
   IF WW>0 THEN
      LET N(I)=1
      LET WW=WW-1
   END IF
NEXT I

REM 監視もれ数の最大値を求める
LET ZO=0    ! 監視もれ数
LET AC=0    ! 適合配列数
LET NO=0    ! 配置No
DO
   MAT ARAY=ZER
   LET NO=NO+1
   FOR I=1 TO HN
      IF N(I)=1 THEN CALL KANSI
   NEXT I

   CALL ZANSUU
   IF ZN>ZO THEN
      LET ZO=ZN
      LET AC=1
   ELSEIF ZN=ZO THEN
      LET AC=AC+1
   END IF
   CALL ZYUN(HN,EX,N)
LOOP WHILE EX=1

PRINT "配列 : ";A;"×";A;"   監視人数 : ";W
IF ZO=0 THEN
   PRINT "NOTHING"
   STOP
END IF
PRINT "CHECK数 : ";NO;"   適合配列個数 : ";AC;"   監視もれ数 : ";ZO

REM 監視もれ数が最大の監視人配置を求める
MAT N=ZER
LET NO=0    ! 配置No

LET WW=W
FOR I=HN TO 1 STEP -1
   IF WW>0 THEN
      LET N(I)=1
      LET WW=WW-1
   END IF
NEXT I

DO
   LET NO=NO+1
   MAT ARAY=ZER
   MAT KANS=ZER
   FOR I=1 TO HN
      IF N(I)=1 THEN
         CALL KANSI
         LET KANS(X,Y)=1
      END IF
   NEXT I

   CALL ZANSUU
   IF ZN=ZO THEN
      PRINT
      PRINT "CHECK No : ";NO
      CALL OUTPUT
   END IF

   CALL ZYUN(HN,EX,N)
LOOP WHILE EX=1
PRINT
PRINT "END"
STOP

SUB KANSI   ! 監視範囲の塗りつぶし
   LET X=INT((I-1)/A)+1
   LET Y=MOD((I-1),A)+1
   FOR J=1 TO A
      LET ARAY(X,J)=1
      LET ARAY(J,Y)=1
   NEXT J
   LET DX=1
   LET DY=1
   FOR J=1 TO 4
      CALL NANAME
      LET DX=DX*DY
      LET DY=-DY
   NEXT J
END SUB

SUB NANAME   ! 斜め方向の塗りつぶし
   LET XX=X
   LET YY=Y
   DO UNTIL XX=0 OR XX=A+1 OR YY=0 OR YY=A+1
      LET  ARAY(XX,YY)=1
      LET XX=XX+DX
      LET YY=YY+DY
   LOOP
END SUB

SUB ZANSUU   !監視残数のCHECK
   LET ZN=0
   FOR I=1 TO A
      FOR J=1 TO A
         IF ARAY(I,J)=0 THEN LET ZN=ZN+1
      NEXT J
   NEXT I
END SUB

SUB OUTPUT   ! 結果配列の出力
   FOR I=1 TO A
      FOR J=1 TO A
         IF KANS(I,J)=1 THEN
            PRINT "○ ";
         ELSEIF ARAY(I,J)=0 THEN
            PRINT "◎ ";
         ELSE
            PRINT "× ";
         END IF
      NEXT J
      PRINT
   NEXT I
END SUB

END

!順列の変更
EXTERNAL SUB ZYUN(K,EX,N())
DECLARE EXTERNAL SUB SEIRETU
LET EX=0
LET J=1
DO
   IF J>=K THEN EXIT DO
   IF N(K-J)<N(K-J+1) THEN
      CALL SEIRETU(J,K,N)
      LET L=1
      DO
         IF N(K-J)>=N(K-J+L) THEN
            LET L=L+1
         ELSE
            LET B=N(K-J)
            LET N(K-J)=N(K-J+L)
            LET N(K-J+L)=B
            LET EX=1
            EXIT DO
         END IF
      LOOP
      EXIT DO
   ELSE
      LET J=J+1
   END IF
LOOP
END SUB

!配列の整列
EXTERNAL  SUB SEIRETU(J,K,N())
LET D=K-J+1
LET E=K
DO WHILE D<E
   LET B=N(D)
   LET N(D)=N(E)
   LET N(E)=B
   LET D=D+1
   LET E=E-1
LOOP
END SUB

◆千葉県 菜花子 さんからの解答

【問題1】

×,◎,◎,×,×,
×,◎,×,×,◎,
×,×,×,×,◎,
○,×,×,×,×,
○,×,×,○,×
--------------------
×,×,◎,◎,×,
◎,×,×,◎,×,
◎,×,×,×,×,
×,×,×,×,○,
×,○,×,×,○
--------------------
×,×,◎,◎,×,
○,×,×,×,×,
×,×,×,×,◎,
×,×,×,◎,◎,
○,○,×,×,×
--------------------
×,◎,◎,×,×,
×,×,×,×,○,
◎,×,×,×,×,
◎,◎,×,×,×,
×,×,×,○,○
--------------------
○,×,×,○,×,
○,×,×,×,×,
×,×,×,×,◎,
×,◎,×,×,◎,
×,◎,◎,×,×
--------------------
×,○,×,×,○,
×,×,×,×,○,
◎,×,×,×,×,
◎,×,×,◎,×,
×,×,◎,◎,×
--------------------
○,○,×,×,×,
×,×,×,◎,◎,
×,×,×,×,◎,
○,×,×,×,×,
×,×,◎,◎,×
--------------------
×,×,×,○,○,
◎,◎,×,×,×,
◎,×,×,×,×,
×,×,×,×,○,
×,◎,◎,×,×
【問題2】

8通り

【問題3】


◆広島県 清川 育男 さんからの解答

●予想

(2n+1)*(2n+1)

豚(ライオン)ライオン(豚)
2n-1個(3n2-3n+4)/2個


5*5
 1 
○,○,×,×,×,
×,×,×,△,△,
×,×,×,×,△,
○,×,×,×,×,
×,×,△,△,×,

 2 
○,×,×,○,×,
○,×,×,×,×,
×,×,×,×,△,
×,△,×,×,△,
×,△,△,×,×,

 3 
×,○,×,×,○,
×,×,×,×,○,
△,×,×,×,×,
△,×,×,△,×,
×,×,△,△,×,

 4 
×,×,×,○,○,
△,△,×,×,×,
△,×,×,×,×,
×,×,×,×,○,
×,△,△,×,×,

 5 
×,×,△,△,×,
○,×,×,×,×,
×,×,×,×,△,
×,×,×,△,△,
○,○,×,×,×,

 6 
×,△,△,×,×,
×,×,×,×,○,
△,×,×,×,×,
△,△,×,×,×,
×,×,×,○,○,

 7 
×,△,△,×,×,
×,△,×,×,△,
×,×,×,×,△,
○,×,×,×,×,
○,×,×,○,×,

 8 
×,×,△,△,×,
△,×,×,△,×,
△,×,×,×,×,
×,×,×,×,○,
×,○,×,×,○,

 7*7 
 1 
○,×,○,×,×,×,○,
×,×,×,×,△,×,×,
×,△,×,△,×,△,×,
×,△,×,×,△,×,×,
×,△,×,△,×,△,×,
×,×,×,△,△,×,×,
○,×,×,×,×,×,○,

 2 
○,×,×,×,○,×,○,
×,×,△,×,×,×,×,
×,△,×,△,×,△,×,
×,×,△,×,×,△,×,
×,△,×,△,×,△,×,
×,×,△,△,×,×,×,
○,×,×,×,×,×,○,

 3 
○,×,×,×,×,×,○,
×,×,△,△,△,×,×,
○,×,×,×,×,×,×,
×,×,△,×,△,△,×,
×,△,×,△,×,△,×,
×,×,△,×,△,×,×,
○,×,×,×,×,×,○,

 4 
○,×,×,×,×,×,○,
×,×,△,△,△,×,×,
×,×,×,×,×,×,○,
×,△,△,×,△,×,×,
×,△,×,△,×,△,×,
×,×,△,×,△,×,×,
○,×,×,×,×,×,○,

 5 
○,×,×,×,×,×,○,
×,×,△,×,△,×,×,
×,△,×,△,×,△,×,
×,×,△,×,△,△,×,
○,×,×,×,×,×,×,
×,×,△,△,△,×,×,
○,×,×,×,×,×,○,

 6 
○,×,×,×,×,×,○,
×,×,△,×,△,×,×,
×,△,×,△,×,△,×,
×,△,△,×,△,×,×,
×,×,×,×,×,×,○,
×,×,△,△,△,×,×,
○,×,×,×,×,×,○,

 7 
○,×,×,×,×,×,○,
×,×,×,△,△,×,×,
×,△,×,△,×,△,×,
×,△,×,×,△,×,×,
×,△,×,△,×,△,×,
×,×,×,×,△,×,×,
○,×,○,×,×,×,○,

 8 
○,×,×,×,×,×,○,
×,×,△,△,×,×,×,
×,△,×,△,×,△,×,
×,×,△,×,×,△,×,
×,△,×,△,×,△,×,
×,×,△,×,×,×,×,
○,×,×,×,○,×,○,

 9*9
 1 
○,○,×,×,×,×,×,×,○,
×,×,×,△,△,△,△,×,×,
×,×,×,×,△,△,×,△,×,
×,×,△,×,×,×,△,△,×,
×,×,△,△,×,×,△,△,×,
×,×,△,×,△,×,×,△,×,
×,×,×,△,△,△,×,×,×,
×,○,×,×,×,×,×,×,○,
○,×,×,×,×,×,×,×,○,

 2 
○,×,○,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
○,×,○,×,×,×,×,×,×,
×,×,×,×,△,×,△,△,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,×,×,△,△,×,△,×,×,
○,×,×,×,×,×,×,×,○,

 3 
○,×,○,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
×,×,×,×,×,×,×,×,○,
×,△,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,×,×,×,△,△,△,×,×,
○,×,○,×,×,×,×,×,○,

 4 
○,×,○,×,×,×,×,×,○,
×,×,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,△,×,
×,△,×,△,×,△,×,△,×,
×,×,×,×,△,×,△,×,×,
○,×,×,×,×,×,×,×,○,
×,×,×,△,△,△,△,×,×,
○,×,×,×,×,×,×,×,○,

 5 
○,×,○,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,△,×,
×,△,×,△,×,△,×,△,×,
×,×,×,×,△,×,△,×,×,
×,×,○,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
○,×,×,×,×,×,×,×,○,

 6 
○,×,○,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,
×,×,×,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
○,×,○,×,×,×,×,×,○,

 7 
○,×,×,×,×,×,○,×,○,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,×,×,×,
×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,○,×,○,

 8 
○,×,×,×,×,×,○,×,○,
×,×,△,△,△,×,×,×,×,
×,×,×,×,×,×,○,×,○,
×,△,△,×,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,△,×,×,×,
○,×,×,×,×,×,×,×,○,

 9 
○,×,×,×,×,×,○,×,○,
×,×,△,△,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,
×,△,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,×,×,
○,×,×,×,×,×,○,×,×,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,×,×,○,

 10 
○,×,×,×,×,×,○,×,○,
×,×,△,×,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,
×,△,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,×,×,
○,×,×,×,×,×,×,×,○,
×,×,△,△,△,△,×,×,×,
○,×,×,×,×,×,×,×,○,

 11 
○,×,×,×,×,×,○,×,○,
×,×,△,△,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,△,×,
○,×,×,×,×,×,×,×,×,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,○,×,○,

 12 
○,×,×,×,×,×,×,○,○,
×,×,△,△,△,△,×,×,×,
×,△,×,△,△,×,×,×,×,
×,△,△,×,×,×,△,×,×,
×,△,△,×,×,△,△,×,×,
×,△,×,×,△,×,△,×,×,
×,×,×,△,△,△,×,×,×,
○,×,×,×,×,×,×,○,×,
○,×,×,×,×,×,×,×,○,

 13 
○,×,×,×,×,×,×,×,○,
○,×,×,×,×,×,×,○,×,
×,×,×,△,△,△,×,×,×,
×,△,×,×,△,×,△,×,×,
×,△,△,×,×,△,△,×,×,
×,△,△,×,×,×,△,×,×,
×,△,×,△,△,×,×,×,×,
×,×,△,△,△,△,×,×,×,
○,×,×,×,×,×,×,○,○,

 14 
○,×,×,×,×,×,×,×,○,
×,○,×,×,×,×,×,×,○,
×,×,×,△,△,△,×,×,×,
×,×,△,×,△,×,×,△,×,
×,×,△,△,×,×,△,△,×,
×,×,△,×,×,×,△,△,×,
×,×,×,×,△,△,×,△,×,
×,×,×,△,△,△,△,×,×,
○,○,×,×,×,×,×,×,○,

 15 
○,×,×,×,×,×,×,×,○,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,○,×,×,
×,×,△,×,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,
×,△,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,○,×,○,

 16 
○,×,×,×,×,×,×,×,○,
×,×,×,△,△,△,△,×,×,
○,×,×,×,×,×,×,×,○,
×,×,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,△,×,
×,△,×,△,×,△,×,△,×,
×,×,×,×,△,×,△,×,×,
○,×,○,×,×,×,×,×,○,

 17 
○,×,×,×,×,×,×,×,○,
×,×,△,△,△,△,×,×,×,
○,×,×,×,×,×,×,×,○,
×,×,△,×,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,
×,△,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,×,×,
○,×,×,×,×,×,○,×,○,

 18 
○,×,×,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,
×,×,○,×,×,×,×,×,○,
×,×,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,△,×,
×,△,×,△,×,△,×,△,×,
×,×,×,×,△,△,△,×,×,
○,×,○,×,×,×,×,×,○,

 19 
○,×,×,×,×,×,×,×,○,
×,×,×,△,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,
×,△,×,△,×,△,×,△,×,
×,×,×,×,△,×,△,△,×,
○,×,○,×,×,×,×,×,×,
×,×,×,×,△,△,△,×,×,
○,×,○,×,×,×,×,×,○,

 20 
○,×,×,×,×,×,×,×,○,
×,×,△,×,△,△,×,×,×,
×,△,×,△,×,△,×,△,×,
×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,
×,△,△,×,△,×,×,×,×,
×,×,×,×,×,×,○,×,○,
×,×,△,△,△,×,×,×,×,
○,×,×,×,×,×,○,×,○,

予想の変更の可能性。
11*11

○,×,○,×,×,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,×,×,
○,×,○,×,×,×,×,×,○,×,○,
×,×,×,×,△,×,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,×,×,
×,△,×,△,△,△,×,△,×,△,×,
×,×,×,△,△,△,△,×,×,×,×,
×,×,×,×,×,×,×,×,○,×,○,     9-32

○,×,○,×,×,×,×,×,×,×,○,
×,×,×,×,△,△,△,×,×,×,×,
○,×,○,×,×,×,×,×,○,×,○,
×,×,×,×,△,×,△,×,×,×,×,
×,△,×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,△,×,
×,△,×,△,×,△,×,△,×,△,×,
×,△,×,×,△,×,△,×,×,×,×,
×,△,×,△,△,△,×,△,×,△,×,
×,×,×,△,△,△,△,×,×,×,×,
○,×,×,×,×,×,×,×,○,×,○,  10-32

 ◆ 問題へもどる

 ◆ 今週の問題

数学の部屋へもどる