フリーセルの友 V2.8
フリーセルの友ダウンロード(FrSolver.zip : 77KB)
---------- 関連ページ ----------
フリーセル1000(ゲーム管理機能付きフリーセル)
フリーセルの遊び方
フリーセル全問解答集
フリーセル100万ゲームの解析結果
ひとり遊びカードゲーム・パック

 フリーセルは、Windowsに標準添付されているトランプの一人遊びゲームです。フリーセルで遊んでいて、どうしても解けなくてイライラしたことはありませんか? フリーセルの友は、ゲームの解手順を求めるプログラムです。
 また、フリーセルの友は、解手順に従って、カードを自動的に移動しますから、フリーセルの遊び方を知らなくても移動ルールを覚えることができ、一人で遊べるようになります。

フリーセルの友のスクリーンショット(左)
shot1

 解が求まるとフリーセルの盤面と同じカード配列を表示し、移動元を青四角、移動先を赤四角として移動方法を示します。OKボタンを押すと、フリーセルの友とフリーセルの双方のカードを手順に従って移動し、次の移動手順を表示します。但し、Windows Vista以降でのフリーセル側のカード移動は、MS Freecellには対応していません(フリーセル 1000は可)。
 尚、列移動に関しては、フリーセル本体にいくつか問題があり双方のウィンドウで同期がとれなくなることがあります。詳細は、後述の説明を参照して下さい。


修 正 記 録

 [V2.8] (2009.8.13)

 [V2.7] (2007.1.15)

 [V2.6] (2006.1.23)

 [V2.5] (2005.11.21)

 [V2.4] (2005.1.23)

(1) 機能の追加変更 (2) バグ修正
 [V2.3] (2005.1.13)

 [V2.2] (2005.1.10)

 [V2.1] (2004.8.29)

(1) 機能の追加変更 (2) バグ修正
 [V1.6] (2004.6.13)

 [V1.5] (2003.11.5)

 [V1.4] (2003.7.3)

(1) 機能の追加変更 (2) バグ修正
 [V1.3] (2003.6.22)

 [V1.2] (2002.11.1)

(1) 機能の追加変更 (2) バグ修正
 [V1.1] (2002.10.10)

 

フリーセルの列移動について

 Vista以前のMS Freecellで、フリーセルのゲーム中に複数枚のカードを空列に移動したり、他の列に結合しようとする時、期待通りにフリーセルが動作しないことがあります(Windows 7以降での動作は未確認)。

(1)列全体を移動できない

 列を空列へ移動するとき、移動方法をフリーセルが問い合わせてきますが、このとき列移動を選択しても、列の途中から移動してしまい期待通りに移動できないことがあります。
 下の図左では、「ダイヤ9〜クラブ4」を空列に移動しようとしていますが、実際には、スペード6以下しか移動されません(図右)。

fr1

 →  
fr2


 このような場合は、次のように、いくつかの手順を経て期待する形にします。

fr3

(2)移動可能枚数計算に誤りがある

 空列が複数ある時、フリーセルの移動可能枚数計算に誤りがあるため、実際には移動できるのにエラーとなる場合があります。
 移動可能枚数は次式によって求めることができます。

移動可能枚数 = (1 + f) x 2e
f:空セルの個数
e:空列の個数(e乗)

 下の例では、「ハートQ〜スペード5」をクラブKに連結しようとしていますが、フリーセルは6枚しか移動できない旨警告しています。
 しかし、空セル1 + 空列2のときは、(1 + 1) x 22 で8枚のカードを移動することができます。

fr4

 以下に移動方法を示します。


ハート6 → 空列 ダイヤ8 → 空列 ハート6 → クラブ7 ハート10 → 空列
ハートQ → クラブK
ハート10 → スペードJ
ダイヤ8 → スペード9
 

フリーセル100万ゲームの解析結果

解 あ り
所要時間
 (秒)
ゲーム数
V2.1V2.3
1 未満 993,488 998,356
1 -  54,6071,576
6 - 1054622
11 - 2063228
21 - 406599
41 - 60591
61 - 8010
所要時間:ゲームの解が求まるまでの時間
最大所要時間: V2.1 65秒(#176299)
V2.3 48秒(#267779)
解 な し
ゲームNo.所要時間(秒)
V2.1V2.3
119823341
14669210
18621600
45588910
49550550
51211840
5177762070
78194800
-1--0
-2--403


 Windows XP添付の100万ゲームをDell Dimension 2400C (Celeron 2GHz)で、解析した結果です。V2.2, V2.3では、速度性能向上のための改造を行っています。
 解析作業は全くの内部処理のためCPUの発熱量が多く、温度の上昇に伴って保護機構か働くのでしょうか、速度性能が次第に低下していきます。従って、ゲームを連続して解析した場合、最適環境下での単発のゲーム解析時間と比べて、所要時間はかなり多めになります。
 マシンの性能によっては、解が求まるまでに多くの時間を要するかもしれませんが、Windows 9x系の標準32000セットでは、クロックタイム800MHz程度あれば、全てのゲームで長くても10秒程度で解が求まります。但し、V2.1以前では、#11982の解なしが求まるまでにかなり時間を要します。
 以下にV2.4の参考データとして、1000万ゲームのうち解のないゲーム番号を示します。#1,000,001以降のゲームは、Windows XPにはありませんが、同じ乱数発生関数を使用した場合のゲームです(V2.4も速度性能を改善しました)。

解なしゲーム(#1 〜 #10,000,000)
1〜  11982  146692  186216  455889  495505  512118  517776  781948
1000000〜1155215 1254900 1387739 1495908 1573069 1631319 1633509 1662054
2000000〜2022676 2070322 2166989 2167029 2501890 2607073 2681284 2712622 2843443 2852003 2855691 2923820
3000000〜3163790 3172889 3194539 3217820 3225183 3366617 3376982 3402716 3576395 3595299 3878212 3946538
4000000〜4055965 4207758 4266168 4269635 4324282 4334954 4440758 4446355 4765843 4863685 4910222
5000000〜5046726 5050537 5086829 5225172 5244797 5260342 5401675 5478410 5611185 5672090 5817697
6000000〜6020049 6099064 6100919 6234527 6314799 6332629 6416342 6749792 6761220 6768658 6844210 6895558 6898316
7000000〜7035805 7261039 7334559 7360592 7400819 7484159 7497878 7530003 7536454 7705172 7748399 7777900 7795097 7801943 7814345 7825750 7863486 7887312 7923001 7965413
8000000〜8000527 8046431 8076134 8104908 8105324 8114984 8119415 8121228 8237732 8267373 8354257 8381178 8527378 8608154 8712426 8719444 8736337
9000000〜9093368 9110337 9190487 9222830 9262134 9414989 9415104 9435589 9452398 9626317 9647001 9660366 9747437 9771903 9830419 9855268 9861848 9917279
総解析時間:205分
1ゲームに要した最長時間:24秒


<参考値>NEC PC98-NX Mate (Celeron 1.8GHz)による解析結果
1000万ゲームの総解析時間
 V2.3V2.8
 127分106分
所要時間(秒) 〜 ゲーム数
1 未満9,992,4679,993,756
1 -  57,5276,241
6 - 1053
11 - 2011
1ゲームに要した最長時間
 16秒16秒
100万ゲーム中の解なしゲームでは、
V2.3 V2.8伴に#-2のみ6秒
その他は1秒未満
MPUは、Dell/NECともにCeleronでNECの方が遅いのに何故処理時間が大幅に短縮されているかは不明。実装メモリがPC98の方が倍近くあるが解析プログラムはそれほどメモリを使用しないのでページング オーバーヘッドも余り差はないと思われる。また、双方のマシンとも停止可能なサービスやタスクは全て停止した状態で実施したので、ディスパッチによる実行権の喪失も大きな影響はないように思われる。となるとやはり発熱への対処の違いか?


 

fh1 フリーセルの遊び方  fh1

 フリーセルは、図1のように8列に並べられたカードを、フリーセルと呼ぶ一時的なカード置き場を使用しながら順序を入れ替え、最終的に全てのカードを1から順番にホームセルに積み上げるゲームです。

図1:ゲーム開始時の状態 (ゲーム番号#1)
fh01[途中経過]
fh11

[ゲーム・オーバー]
fh01a

 ホームセルにカードを移動するためには、ホームセルへの移動条件を満たすカードが移動可能位置になければなりません。移動可能位置にあるカードを移動候補と呼びます。ゲーム番号#1の開始時を例に示すと、移動候補は図2のようになります。

fh02
図2
移動候補となるカードは、水色枠で囲った箇所にあるカードで、列の下端もしくはフリーセルにある一枚のカードです。これらのカードが後述の移動方法(条件)に合致する時、実際に移動することができます。

ゲーム番号#1でプレイするには、フリーセルを起動してF3キーを押し、そこでゲーム番号として1を指定します。

 原則として、カードは、一回の操作で一枚移動します。フリーセルで実際にカードを移動するには、まず移動したいカードを左クリックし、次に、移動先を左クリックします。
 移動方法には、
の4つがあり、以下それぞれについて説明します。

 説明文中、クラブ/スペード/ハート/ダイヤの四種類のカードをそれぞれ、C, S, H, Dと略記します。

  CA:クラブのエース
  S2:スペード2
  HJ:ハート11
  DK:ダイヤ13
1. フリーセルに移動

 フリーセルの4つのカード置き場に空きがあれば、移動候補は、自由にそこに移動することができます。
 カード置き場のそれぞれをセル、カードのないセルを空セルと呼びます。

fh03
図3
図2では、8枚の移動候補のいずれか一枚を空セルに移動できます。
例えばD3を空セルに移動するために、まずD3を左クリックし、次にフリーセルの左端セルを左クリックすると図3のようになります。

2. ホームセルに移動

 ホームセルを除くボード上のカードの中で最も数字の小さいものが、移動候補にあれば、そのカードは、ホームセルに移動することができます。ホームセルに移動したカードを、再び移動することはできません。

fh04
図4
図3でボード上の最も数字の小さいカードは、四種類のエースですが、移動候補の中にこれらのカードはありません。そこでC2を空セルに移動すると、CAが移動候補となり、ホームセルに移動できます。同様にSAもホームセルに移動することができます。

隠れて見えないエースカードの種類は、それを右クリックすることにより確認することができます。

 CAとSAをホームセルに移動すると、最も数字の小さいカードは、クローバとスペードが2、ダイヤとハートがエースになります。もしこれらのカードが移動候補にあれば、ホームセルに移動することができます。
 この操作を順次繰り返して、52枚全てのカードがホームセルに移動した時、ゲームオーバーになります。

3. 他の列に移動連結

 いずれかの列の下端のカードと色違いで、一つ数字が少ないカードが、移動候補にあれば、その列に連結することができます。

fh05
連結できるカード        図5
図4の各列に連結できるカードは、左図のようになります。
この局面では、移動候補の中に連結できるカードはありません。

H2に連結できる黒のエースはホームセルに無条件に移動できるので、連結する意味はありません。同様にC2の下位の連結候補「赤のエース」も無条件にホームセルに移動できるので、C2をボード上に残しておく意味はありません。このような時、フリーセルはCAをホームセルに移動すると、即座にC2も移動します。

fh06
図6
そこで、CQを空セルに移動するとどうでしょう。今度は、H7が移動候補になるので、C8に連結することができます。また、S6もしくはC6をH7に連結することもできます。

一般的に空セルや空列(カードが一枚もなくなった列)を作った方が戦略的に有利なので、通常は、H7をC8に連結します。

4. 空列に移動

 移動を繰り返していると図7のようにカードが一枚もない空列ができることがあります。移動候補は、空列に移動することもできます。

fh07
図7
図7では、フリーセルの2枚のカードと各列下端の7枚のカード、計9枚のカードのいずれか一枚を空列に移動することができます。

 空セルへの移動と空列への移動の違いは、空列に移動した場合、その下にカードを連結できるということです。
 空列を利用すると、連を列から切り離して、新しい局面を作ることができます。連とは、列下端に色違いに連番で並んだカード群を指します。

fh08
図8
例えば、図7では、「C8〜H7」の連を、

 (1)H7を空セルへ
 (2)C8を空列へ
 (3)H7をC8に連結

という手順を経て、空列に移動することができます。結果は図9のようになります。

fh09
図9
フリーセルは、上記(1)〜(3)の一連の操作を、H7の列を左クリックし、次に空列を左クリックすることで、代替してくれます。但し、この時、連(列)の移動なのか、単一カードの移動なのかを問う確認メッセージが出ます。

以下、
  • HJ, D4 → 空セル
  • HA → ホーム
  • CQ → HK
  • HJ → CQ
の手順で容易にゲームを終了することができます。
手順の続きをみる

 このような連の空列への移動や他の列への連結は、一枚ずつカードを移動して行うのが基本操作ですが、フリーセルは、移動元と移動先をクリックすることにより、一回の操作で移動や連結を自動的に行ってくれます。

fh10
図10
この例で、右端のH8〜H6の連をS9に連結する場合、基本操作は、

 ・H6,S7 → 空セル
 ・H8 → S9
 ・S7 → H8
 ・H6 → S7

となりますが、フリーセルでは、H6の列をクリックし、次にS9の列をクリックすれば、先の一連の操作を自動的に行ってくれます。

 尚、連の移動に関してはフリーセルにいくつかの問題点があります。詳細はこちらの説明を参照して下さい。


 

ゲーム#1 解手順の続き

かっこ内は、一番左を第一列とした列番号

fh11
図11 (H9 → S10まで)
C10 → HJ
H6 → 空セル
SQ → 空セル
C9 → H10
D8 → C9
D3 → S4
D7 → S8 (8 → 2)
S7 → D8
H6 → S7
C3 → ホーム
H3 → ホーム
H5 → C6 (8 → 5)
C6 → D7 (5 → 2)
S4 → H5
S10 → 空列
D9 → C10 (3 → 7)
C8 → D9
S9 → 空列
H9 → S10
 
fh12
図12 (DQ → 空列まで)
H8 → S9
H4 → ホーム
H10 → SJ
SJ → HQ
S6 → H7
D5 → S6
S8 → H9
D10 → 空列 (2 → 3)
S9 → D10
C5 → H6 (2 → 4)
D4 → C5
SK → 空列 (2 → 5)
CK → 空セル
HQ → SK
D6 → 空セル
S3 → D4
C4 → ホーム
DQ → 空列 (4 → 2)

©2002 YManTOPへ