平成24年12月9日
[流れ星]
第284回数学的な応募解答
<解答募集期間:12月9日〜12月30日>
[4区画数独]
今年の慶應義塾大学薬学部の入試問題です。
<水の流れ:実際のナインフレームの場合は一体全部で何通りあるか知りたいです>
NO1「uchinyan」 12/09 13時09分受信 更新12/30
a,b,c,d を 1,2,3,4 のいずれかとして,
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 パターンが可能です。
a,b,c,d の入り方は 4! = 24 通り なので,結局,24 * 12 = 288 通りになります。
(感想)
対称性などを考慮すればもう少しうまく数えられるかも知れませんが,
この程度ならば書き出した方が簡単でしょう。
なお,実際の数独では,Wikipedia,
http://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC
によると,
数独の組み合わせパターン数
数独の組み合わせパターン数は、回転や反射や順列や名前を変更することなどの左右対称が考慮に入れられると、
54億7273万0538になるとエド・ラッセルとフレーザージャービスによって示されている[8]。
...
8 ^ Jarvis, Frazer; Ed Russell (2005年9月7日).
“There are 5472730538 essentially
different Sudoku grids ... and the Sudoku symmetry group”.
Frazer Jarvis's home page. 2006年9月16日閲覧。とあります。
が,私は,確認してみる気にはなれないです (^^;
NO2「スモークマン」 12/10 07時55分受信
「スモークマン」 12/11 16時08分受信 更新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 11時53分受信 更新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 =
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