2015年9月8日火曜日

Target Time ( Regulation)


ナンプレを解くに必要な標準的な時間、「目標時間」を与える数式を求めるために、その定式化について考えてみよう。

「目標時間」は問題の難易度と解く人の技量によって変わる。つまり、問題のレベルとプレーヤーのレベルである。

すべてのナンプレ本で、どのレベルの人がその問題のレベルを決めたのか書いていない。一人の解き手なのか、何人かの解き手の要した時間の平均なのか明記されていない。 

正確には数値的にどのレベルの人なのかを特定するのは無理である。逆に示された時間からどの人のレベルを推測することが可能である。

本によっては、上級者と初心者に分けて目標時間を記述しているのもある。しかし曖昧である。

本章では、目標時間なるものがどのような因子に大きく影響されるものなのか、またそれをどのように定式化するかを探っていこう。

幾つかの例を示そう。

この2年間朝日新聞 Be数独に掲載された114の問題を鉛筆で解き、その結果を表出数(Givens)からわかる 空白セル(Empty Cell) でプロットしてみた。



もともと鉛筆時間というものは、同じレベルの問題でも、バラツキの大きいものであり、この図より難易度別の有意な傾向を読み取ることは難しい。

データ数を増やした「世界標準ナンプレ300」でも同じことを調べてみた。


やさしい問題では、なんとか平均値が取れそうであるが、普通われわれが対象とする表出数 30未満の問題では、前の図とおなじく有意な傾向は読み取れない。

これは難易度に直接関係しないパラメータを使用したからであろう。

そこで「龍涎」ソフトの Technical Point をパラメータとして図をつくってみた。

まず、朝日新聞の方は次の通り。


 
 
同様に「世界標準ナンプレ300」では次のようになった。
 
 

これも同様のことがいえる。

鉛筆時間では、同じ人間でもバラツキの多いものなので、コンピュータの所要時間をプロットしてみた。



先に示した「鉛筆時間」よりその傾向のバラツキの差が縮まっているように思われる。 

いずれにせよ、目標時間を表すパラメータとして、Technical Point を採用するのが妥当と思われる。

朝日新聞Be数独の目標時間を求める式として次の図を作成する。


本図は問題のレベル(★2、★3、★4、★5)別に平均値を求めプロットしたものである。丸印の大きさは、問題の個数に対応している。

これにより数独を解くに要する時間は、2次曲線で与えられるのがわかる。


同様のことを「世界標準ナンプレ300」で行うと次の図となる。

ただし、縦軸には 本に記された標準時間をとっている。

私の場合も他人のやったものも、同じ2次曲線で近似出来ることがわかる。

to be continue










  

2015年9月6日日曜日

Target Time (Introduction)


1. はじめに

ナンプレ本には、「目標時間」とか「標準時間」が問題ごとに添えてあるのがある。ワン・コイン・ブックに多いが、権威ある数独本や週刊誌・新聞の単発問題には殆んどない。

そもそも「目標時間」とはどういう意味なのか?

数独を解く場合、その人の現在もつレベルによって、問題によっていくつかの局面がある。

① 淀みなく、スラスラ解けた。

② すこし手こずったがうまく解けた。

③ 行き詰った所があったが、何とか解けた。

④ 四苦八苦して長時間かけて、なんとか解けた。

⑤ 途中で行き詰まり、自分の力の限界を感じ挫折した。

⑥ 全く歯がたたず、自力では永遠に無理だ!


本によっては「限界時間」という表現もある。

また、「目標時間」が無限大というわけのわからない記述のもある。

普通に解釈すれば、解けるのを前提としてその「目安」を与える時間であろう。

されば、各人の能力レベルによって当然 ① から ⑥ の状態が違ってくる。解く人によってその状態が決定できる。

目標時間は問題のレベルと同列に論じられるものである。

数独本に記載されている問題のレベル(例えば、★4とか”Medium”とか)は、実は「目標時間」そのものということができる。

その関係を明らかにするのが、このブログの狙いである。

to be continue

2015年7月27日月曜日

Technical Point


Technical Point とは、PCソフト「龍涎」シリーズで定義されている 難易度を表す指標の一つです。

その算出方法を具体的な問題(朝日新聞Be数独 2015年7月25日掲載)を例にとり簡単に説明します。

まず 問題と解答と解き順の Output 例です。


上図の下の盤面は、全空白セル 57の解き順とそれに使用した技の種類(下の右図)を表したものです。

数独の「次の一手」の決め方は、基本技(basic と略記、 4種類、B,R,C,D)で一発で決める方法と、関係する候補の関係から余分な候補の数字の場所や数字を消去した後、基本技で決める方法(deform、V,W,Q,P,Gなど)があります。

そして、それぞれの技に対して、点数を配分します。 次の表の右端の数値です。

具体的な最初の例題で説明します。




57 ステップの決め技が、4列目に Output されています。

五列目は、basic point 、六列目がdeform point です。その合計が、七列目の Technical Point になります。



Deform で決まるのは、第6手だけです。 したがって、




2015年7月21日火曜日

ナンプレ実力測定 Vol.1




近代映画社出版の正味ワン・コイン・ブック (ocb)の223題をナンプレPCソフト「龍涎レベル特性」で分析したデータをまとめました。

本Book(ocb6)には、223題の各問毎に、「段位」と「制限時間」が掲載されており、これを「難易度」との関連を求めることにより、一般のナンプレ問題にも適用できるデータを提供するのが目的です。

例えば、朝日新聞の土曜日に掲載される Be数独には「難易度」ランクが、★3~★4 が記載されてはいるものの、時間や段位(例えば初心者向けとか)に関しての付加情報はありません。

ましてや、月刊誌(文藝春秋など)や週刊誌や新聞に連載されるナンプレにはそれすらありません。

あまたあるナンプレ問題冊子にも、何ランクかの「難易度」レベルの表示があるのが普通です。

それも、何人かの熟練者が解いて見て、その平均で求めたというような記述を、これまで見かけたこともありません。

その意味で、本Bookのように、段位を22階級にも分割し、それぞれの制限時間を、大胆に規定する試みは、ナンプレ分野においては、新しいルール化の先駆けとなるものです。

この不確定性の高いデータを使って、「龍涎」ソフトによる「難易度」解析と統計解析を駆使することにより、何とか普遍性のあるルールを作る方法と、できればその数値の予測ができればと期待しています。

これは、ナンプレに関するニッチな学究的ブログなので、アクセス数も少なく、いつまで続くか分かりませんが、できるだけ分かり易く説明しますので、継続してお読みください。


まず、次の図をご覧ください。




この図は、次の表から作成しました。




縦軸の標準時間は、本に記載の「制限時間」の段位別個数の平均値です。

段位別の個数は、図のバブルの大きさで表しています。

横軸は、「難易度」の指標を表す Technical Point でこれも段位別の平均値です。

このグラフから「難易度」 x と「制限時間」 y は二次曲線でよく近似でき、

        y = 3.3 x^2 - 289 x +6725

で表すことができます。

段位と難易度の関係は、次の図のようになります。


 1級から初段になるところでジャンプしていますが、その後は八段まではほぼ横ばいになっています。ゴルフのシングルになるのは、難しいけど、HCP5位まではスルスルいくのに似ていますね。

とはいうものの、連続的な右上がりの近似式に直します。



 今度は、一次式です。

         x = 1.6 z +41


参考のため、他のBook に対する段位表も上げておきました。








2014年7月6日日曜日

full_number_check (2)

 このマクロは、盤面にある数字のパターンより、

 (1) 数字の分布
 (2) B数 (各Blockにある数字の個数)
  (3) R数 (各行にある数字の数)
 (4) C数 (各列にある数字の数) 

をカウントするものである。

このマクロを使って作成された鉛筆で解く数独記録ソフト(BS:Brain Simulation)の使用法を紹介しよう。

まず、問題番号を入力すると、開始画面として次のような盤面が表れる。



3                              C D  E  F  G  H   I    J    K  L   M  N  O   P
17 

ここに、 C6~C14 は、数字の個数、例えば 3の数字は4個あり、8とともに最も多い。

      D6~D14 は、B数を表す。例えば中央 Block 5 は3個の数字よりなる。

      O6~O14 は、R数を表す。例えば、1行目には 5個の数字がある。

      F5~N5  は、C数を表す。例えば、1列目には 3個の数字がある。

操作の方法は、 
     (1) 答えを入れるセルをクリック。  (4、7)をクリック。
     (2) 使用する技(P6~P14)をダブル・クリック。 P16に記号が入る。 Bをクリック。
     (3) 16行の水色のセルの数字をクリック。 3をクリック。
     (4) 「確認」をクリック。

 これで、 Step1 (4,7)=3  B と経過時間が、Sheet5に記録される。

以下同様に進めると、 Step28 で次の画面となっている。




full_number_check は、各stepにおいて書きかえられ、表出数(赤色18font)と既決数(青色14font)のみがカウントの対象になる。 フォント12の小さな文字は、借り置きのHidden pair である。

BRC数が7個以上になると、フォントが大きく表示される。取りこぼしを知らせてくれる。

最終盤面は、次のようになります。



Sheet 5 に記録された途中経過(決定順序と時間)は、Graph で表示される。

「次の一手」で示されている鉛筆による解析例はすべてこのソフトによるものである。 





2014年7月1日火曜日

full_number_check (1)

transfer_problem  (M3) >  full_number_check (M27)
                                    >  kosu_in_unit (M27)
                                   >  iblock_search (m27)

数独の表出数字の1~9 までの数字別個数をカウントする。

また9つあるブロック内の数字の個数(B 数)、行内の数字の個数(R数)、列内の数字の個数(C数)をカウントする。

計算した結果の一例を示す。




このマクロは直接数独の解法に寄与するものではない。

龍涎ソフトでは、数独の格付けに必要な「見た目」の表現に使われる。すなわち、数字の形のもつ美しさの評価を表すアロマ・インプレションやLack DigitはVisual point に関係する。上の例では、表出数の中の数字で、40%が、3689の丸味を帯びた数字(round shaped digit)であり、見た目の印象では全体的に円満なやさしい感じを与えるパターンであることを示している。

B数を求めるアルゴリズムは少しばかり手間のかかるものであるので、次に示しておこう。

iblock_search マクロは、掃引するBlock の開始のセル( igs , jgs )と最後のセル(ige ,jge) を与えるものである。

Sub iblock_search()
ps = 3
pt = 3
nn = Int((cigrp - 1) / ps)
n = nn + 1
igs = ps * nn + 1
ige = ps * n
jgs = (cigrp - nn * ps - 1) * pt + 1
jge = (cigrp - nn * ps) * pt
End Sub



2014年6月11日水曜日

keisen


 このkeisenマクロは、Sheet 1 の EXCEL画面に盤面を描くものである。



 盤面とは、セルを区切る細い線とブロックを囲む太い線だけであるので、簡単なようだが EXCEL画面上にVBAで描かせるのは意外と難しいので、そのマクロ本体を下に紹介することとしよう。「コピペ」することで、 任意のナンプレ画面を描くことができます。

Sub keisen()
 Application.ScreenUpdating = False
 ars = ricj((ppp + 1), (qqq + 1))
 are = ricj((ppp + z), (qqq + z))
 ar = ars & ":" & are
  Range(ar).Borders.LineStyle = xlContinuous
For i = 1 To pt
 arrs = ricj((ppp + (i - 1) * ps + 1), (qqq + 1))
 arre = ricj((ppp + i * ps), (qqq + z))
 arr = arrs & ":" & arre
  Range(arr).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
Next i
For j = 1 To ps
 accs = ricj((ppp + 1), (qqq + (j - 1) * pt + 1))
 acce = ricj((ppp + z), (qqq + j * pt))
 acc = accs & ":" & acce
  Range(acc).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
Next j
'
 ars = ricj((ppp + 1), (qqq + 1))
 are = ricj((ppp + z), (qqq + z))
 ar = ars & ":" & are
  Range(ar).BorderAround LineStyle:=xlContinuous, Weight:=xlThick
 Application.ScreenUpdating = True
End Sub
'
Function ricj(i, j)
If j <= 26 Then
  jc = j
  ricj = qt(jc) & i
ElseIf j <= 52 Then
 jc = j - 26
  ricj = "A" & qt(jc) & i
ElseIf j <= 78 Then
 jc = j - 52
  ricj = "B" & qt(jc) & i
ElseIf j <= 104 Then
 jc = j - 78
  ricj = "C" & qt(jc) & i
Else
 MsgBox ("You indicate too large RANGE !!")
End
End If
End Function
'
Function qt(jc)
Select Case jc
 Case 1: qt = "A": Case 2: qt = "B": Case 3: qt = "C": Case 4: qt = "D": Case 5: qt = "E"
 Case 6: qt = "F": Case 7: qt = "G": Case 8: qt = "H": Case 9: qt = "I": Case 10: qt = "J"
 Case 11: qt = "K": Case 12: qt = "L": Case 13: qt = "M": Case 14: qt = "N": Case 15: qt = "O"
 Case 16: qt = "P": Case 17: qt = "Q": Case 18: qt = "R": Case 19: qt = "S": Case 20: qt = "T"
 Case 21: qt = "U": Case 22: qt = "V": Case 23: qt = "W": Case 24: qt = "X": Case 25: qt = "Y"
 Case 26: qt = "Z"
End Select
End Function

 ここに、(ppp,qqq) はSheet 1 上の盤面の原点の位置(左上のセルの座標)を表し、ps,pt はそれぞれ1ブロックの縦方向(行)および横方向(列)のセルの数を表す。また、z=ps*pt はナンプレの大きさを表す。これらの数値はbasic_settingで設定する。

ノーマル・ナンプレでは、9×981のセルを細線で囲み、3×39個のブロックを太線で囲む。すなわち、ps=pt=3 ,z=9 である。

16×16 大型ナンプレの場合、 ps=pt=4  z=16 
28×28 変形ナンプレの場合、 ps=4pt=7  z=28  である。

なお、このマクロは、EXCEL/VBA/2007 以前に対応するもので、列番号のアルファベットを数字に直す Function を使っています。

最後に、変形ナンプレ(全体12×12、ブロック 3×4)を keisen マクロを使って描いた例を示します。この場合、上のマクロにおいて、ps=3, pt=4, z=12 とおきます。