平成24年12月9日

[流れ星]

     第284回数学的な応募解答

      <解答募集期間:129日〜1230日>

[4区画数独]

今年の慶應義塾大学薬学部の入試問題です。

<水の流れ:実際のナインフレームの場合は一体全部で何通りあるか知りたいです>

NO1「uchinyan  12/09 1309分受信 更新12/30

abcd 1234 のいずれかとして,

abcd abcd abcd abcd

cdab cdab cdab cdab

badc bcda dabc dcba

dcba dabc bcda badc

 

abcd abcd abcd abcd

cdba cdba cdba cdba

badc bcxx daxx dcab

dcab daxx bcxx badc

 

abdc abdc abdc abdc

cdab cdab cdab cdab

bacd bcxx daxx dcba

dcba daxx bcxx bacd

 

abdc abdc abdc abdc

cdba cdba cdba cdba

bacd bcad dacb dcab

dcab dacb bcad bacd

 

16 パターンが候補ですが,これらのうち x のあるものは不可なので,12 パターンが可能です。

abcd の入り方は 4! = 24 通り なので,結局,24 * 12 = 288 通りになります。

 

(感想)

対称性などを考慮すればもう少しうまく数えられるかも知れませんが,

この程度ならば書き出した方が簡単でしょう。

なお,実際の数独では,Wikipedia

http://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC

によると,

数独の組み合わせパターン数

数独の組み合わせパターン数は、回転や反射や順列や名前を変更することなどの左右対称が考慮に入れられると、

5472730538になるとエド・ラッセルとフレーザージャービスによって示されている[8]

...

8 ^ Jarvis, Frazer; Ed Russell (200597).

There are 5472730538 essentially different Sudoku grids ... and the Sudoku symmetry group”.

Frazer Jarvis's home page. 2006916日閲覧。とあります。

が,私は,確認してみる気にはなれないです (^^;

NO2「スモークマン」  12/10 0755分受信

「スモークマン」  12/11 1608分受信 更新12/30

再考しました...

4 3 | 2 1
2 1 | 1 1
--- ---
2 1 | 1 1
1 1 | 1 1

左上の区画が決まれば(=4!)...あとは必然的に残りの数が制限されちゃうので...
右上と左下は対称に決まってしまうんですねぇ ^^
 
けっきょく...4!*2^2=24*4=96 通り

ちなみに...区画がなければ...
左上の区画は...4*3^2*2=4!*3 通りになるから...上の場合の3倍になるはずで...

4 3 2 1
3 2 1 1
2 1 1 1
1 1 1 1
 
から...4!*6*2=288 通り=96*3 ...ですね ^^v

ナンプレって、したことはありませんが...上のことから類推できそうな...?...^^...Orz

NO3「浜田明巳」 12/25 1153分受信 更新12/30

エクセルのマクロで解いた.覆面算の要領である.
 このマクロにより,答は288通りである.
 9フレームの場合のマクロも作成したが,あまりにも膨大な数になるため,そう簡単には計算が終わらない.

(4フレームの場合)
Option Explicit
'a11 a12 a13 a14
'a21 a22 a23 a24
'a31 a32 a33 a34
'a41 a42 a43 a44
Sub Macro1()
    Sheets("Sheet1").Select
    Dim a11 As Integer, a12 As Integer, a13 As Integer, a14 As Integer
    Dim a21 As Integer, a22 As Integer, a23 As Integer, a24 As Integer
    Dim a31 As Integer, a32 As Integer, a33 As Integer, a34 As Integer
    Dim a41 As Integer, a42 As Integer, a43 As Integer, a44 As Integer
    Dim gyou As Integer
    Cells(1, 1).Value = 0
    For a11 = 1 To 4
     For a12 = 1 To 4
     If a11 <> a12 Then
      For a13 = 1 To 4
      If a11 <> a13 And a12 <> a13 Then
      a14 = 1 + 2 + 3 + 4 - a11 - a12 - a13
      For a21 = 1 To 4
       If a11 <> a21 And a12 <> a21 Then
     a22 = 1 + 2 + 3 + 4 - a11 - a12 - a21
    For a23 = 1 To 4
    If a13 <> a23 And a14 <> a23 And a21 <> a23 And a22 <> a23 Then
    a24 = 1 + 2 + 3 + 4 - a21 - a22 - a23
    If a13 <> a24 And a14 <> a24 Then
    For a31 = 1 To 4
    If a11 <> a31 And a21 <> a31 Then
    a41 = 1 + 2 + 3 + 4 - a11 - a21 - a31
     For a32 = 1 To 4
     If a12 <> a32 And a22 <> a32 And a31 <> a32 And a32 <> a41 Then
   
 a42 = 1 + 2 + 3 + 4 - a12 - a22 - a32
      If a31 <> a42 And a41 <> a42 Then
 
   For a33 = 1 To 4
       If a13 <> a33 And a23 <> a33 And a31 <> a33 And a32 <> a33 Then
    
  a34 = 1 + 2 + 3 + 4 - a31 - a32 - a33
      If a14 <> a34 And a24 <> a34 Then
      a43 = 1 + 2 + 3 + 4 - a13 - a23 - a33
    If a34 <> a43 And a41 <> a43 And a42 <> a43 Then
    a44 = 1 + 2 + 3 + 4 - a41 - a42 - a43
    If a14 + a24 + a34 + a44 = 1 + 2 + 3 + 4 And a33 + a34 + a43 + a44 = 1 + 2 + 3 + 4 Then
  Cells(1, 1).Value = Cells(1, 1).Value + 1
   gyou = Cells(1, 1).Value * 5 - 4
  Cells(gyou, 2).Value = a11
  Cells(gyou, 3).Value = a12
 Cells(gyou, 4).Value = a13
 Cells(gyou, 5).Value = a14
 Cells(gyou + 1, 2).Value = a21
 Cells(gyou + 1, 3).Value = a22
 Cells(gyou + 1, 4).Value = a23

 Cells(gyou + 1, 5).Value = a24
 Cells(gyou + 2, 2).Value = a31
 Cells(gyou + 2, 3).Value = a32

Cells(gyou + 2, 4).Value = a33

 Cells(gyou + 2, 5).Value = a34
 Cells(gyou + 3, 2).Value = a41
 Cells(gyou + 3, 3).Value = a42

Cells(gyou + 3, 4).Value = a43

 Cells(gyou + 3, 5).Value = a44
  Range
("B" & gyou).Select
  End If
End If

End If
 End If
  Next a33
   End If
  End If
   Next a32
    End If
   Next a31
    End If
  End If
 Next a23

 End If
  Next a21
   End If
    Next a13
    End If
     Next a12
    Next a11
    Range("A1").Select
End Sub

(9フレームの場合)
Option Explicit
Dim a(9, 9) As Integer
Sub Macro2()
    Sheets("Sheet3").Select
    Cells(1, 1).Value = 0
    Range("A1").Select
    Call saiki(1, 1)
End Sub
Sub saiki(ByVal m As Integer, ByVal n As Integer)
    a(m, n) = 1
    While a(m, n) <= 9
      If juufuku(m, n) = 0 Then
        If n < 9 Then
          Call saiki(m, n + 1)
        ElseIf m < 9 Then
          Call saiki(m + 1, 1)
        Else
          Cells(1, 1).Value = Cells(1, 1).Value + 1
        End If
      End If
      a(m, n) = a(m, n) + 1
    Wend
End Sub
Private Function juufuku(ByVal m As Integer, ByVal n As Integer)
    Dim b(9) As Integer
    Dim j As Integer, jj As Integer
    Dim max1 As Integer, max2 As Integer
    juufuku = 0
    For j = 1 To 9
      b(j) = 0
    Next j
    For j = 1 To m
      b(a(j, n)) = b(a(j, n)) + 1
      If b(a(j, n)) > 1 Then
        juufuku = 1
      End If
    Next j
    For j = 1 To 9
      b(j) = 0
    Next j
    For j = 1 To n
      b(a(m, j)) = b(a(m, j)) + 1
      If b(a(m, j)) > 1 Then
        juufuku = 1
      End If
    Next j
    For j = 1 To 9
      b(j) = 0
    Next j
    For j = Int((m - 1) / 3) * 3 + 1 To m
      For jj = Int((n - 1) / 3) * 3 + 1 To -(Int((n - 1) / 3) * 3 + 3) * (j < m) - n * (j = m)
        b(a(j, jj)) = b(a(j, jj)) + 1
        If b(a(j, jj)) > 1 Then
          juufuku = 1
        End If
      Next jj
    Next j
End Function