2014年5月15日木曜日

number_distribution

 計算を行う時には、先に格納した問題をDatabase Sheet より Sheet 1に呼び出しておく。それには Fig. 8 の Diagram の上にあるコマンド Input Problem をクリックする。
 このとき呼び出されるマクロが、この Number_distribution である。

 このマクロでは、
 number_distribution
    > clear_table
    > transfer_problem
    > minimam_givens_for_present_diagram
    > artistic_point

のように初期セットの他にいくつかの準備計算やLooks に関するポイント計算がおこなわれる。

      Fig.8   Call the Problem from Databese ( Sheet 6 ) by clicking command bottum "Input Problem" 

2014年5月11日日曜日

basic_setting



 basic_setting のマクロは 計算に必要な基本情報を設定するマクロである。

 計算を実行する前に 下図 のピンクの文字のように設定する。使用できる文字または数字は、周りにある該当するものを Double Click する。

        S  T U                AE                       AN    AP 



 isheet   Sheet 1   “S1”    入力Data のあるSheet 番号
dsheet  Sheet 1   “U1”    出力Data のあるSheet 番号

 ver    Sheet 1    “AN1”   Version を選択
beg     Sheet 1     “AP1”  各種の技(Strategy)を試す方法を選択

mondai  Sheet 1   “D2”    isheet の当該問題の記載の行番号

ppp=2 , qqq=10   Sheet 1 の Diagram (盤面)の原点となるセル位置
 Sheet 1 の 盤面 ( i , j ) のセルは、 Cells ( ppp+I , qqq+j ) で表す。
ppA=6 , qqA=2   Sheet 2 の盤面の原点の位置。

msga   Sheet 1  “C9”   計算を制御する記号
msgt    Sheet 1  “B9”  技の選択肢を制御する記号

fmsd   Sheet 1   “AS1”  基本技を設定する。
input_form  Sheet 1 “AE1”   技の順番の方法を指定する

pt=3 , ps=3  Block の 縦横のサイズを指定する。
z=pt*ps=9  
通常サイズナンプレは、9*981なので、z=9
16×16 ナンプレの場合には、 pt=ps=4, z=16.
 この数字を換えることで、大型ナンプレ、変則ナンプレに対応できる。
 




   

2014年5月5日月曜日

Input_to_sheet11


 Fig.2 のコマンド・ボタン 「 Input to isheet」(Sheet 1)をクリックすると、
       input_to_sheet11   (Module 12 )
が実行される。



   Fig. 8    Input Diagram of Sheet 1

ここに、isheet はデータベースのあるSheet番号で、Sheet11Sheet12Sheet14Sheet15などである。

このmacroでは、

     basic_setting   計算に先だって基本的な条件を設定するマクロの実行

      Fig.1の盤面の問題を isheet に書き込む。
Matrix 表示で セル (I,j) の値を isheet の mondai 行の
Cells(mondai, 9*i+1+j) に書き込む。

      Visual Data Input
      ntype(クラスターの種類の数)
      nsum(クラスターの総数)
 Fig.5 のクラスター毎の粒子数、個数、クラスター記号を読み込む。
また数字の配列や美しさに関するデータを読み込む。


                 Fig. 9    Input of Visual data

     number_distribution
    > clear_table
    > transfer_problem
    > minimam_givens_for_present_diagram
    > artistic_point






Number Place Simulation ( Output )


 問題のインプットが済むと、Fig. 2 の右側の上から二番目のコマンド・ボタンの「Input to isheet をクリックすると Fig.1 に示したデータ・ベースに 書き込まれてストアされる。

一度データベース・シートに格納されたデータは他の操作で消えることはない。もし消去したい時には同じ問題番号(Fig.1762)にして、盤面を全てクリア(Clear ボタンをクリック)してから「Input to isheet」を押す。インプット・ミスの場合も同じ要領で訂正する。

解析計算を行うには、

     Clear をクリック (盤面をクリアする)
     Input Problem をクリック (データベースから問題が呼び出される)
     Calculation Start をクリック

すると、ワン・クリックで次のような解答が得られる。


        Fig.4   Final Answer Output  of  Sheet 1 Diagram


                                  Fig.5   Digit Infomation Output  of  Givens  Distribution 



      Order    Cell     Digit Obtained  Stratege       Time     Each Technical Point   Block,Row,Column

          Fig. 6  Digital Output ( Sheet 6 )



         Fig.7     Output of  Visual Data Characteristics


















2014年5月3日土曜日

Number Place Simulation ( Input )


  数独の解法シミュレーションをするにはどのような順序で何をすればよいか?そのときアルゴリズムはどのようになっているか?使用されるマクロはどんなものか?について纏めてみよう。

(1)問題のインプット
 問題のインプットは極めて簡単である。
     まず新しい問題を格納するSheet の番号と行番号を確認する。問題は一行に納められ、最初にインプットするのは、次のデータシートの Aから Eまでの5項目である。
A   Puzzle Number 問題番号
B   Book Name
   C      Author 
   D   Date Calculated
   E   Level Published


         A                B                         C                D           E

     Fig.1     Example of  Database ( One line corresponds to one puzzle  )

    Sheet 1 の盤面に Puzzle の表出数(Givens)をインプットする。 (赤字)

  



           Fig. 2    Input of Givens data for Diagram of  Sheet 1 




    「見た目」(Looks)を計算する時には、Patternに関するクラスターの粒子数、クラスター数、クラスター記号などの諸元、Digit に関する粒子列の種類、個数、点数などをインプットする。




                Fig. 3   Input data  concerning  Visual aspect  ( Looks )










2014年4月21日月曜日

Ryuzen Macro Memorandam


 ナンプレ解析ソフト「龍涎」は、いろいろな機能を持つオブジェクト指向プログラムである。2006年に初期のversionがつくられ、年々機能の拡張がなされ、2014年現在の最新versionでは、膨大なmacro を有するプログラムになり、作者自身が把握しずらい状態になっている。

 新しいマクロを考えるにあたって、すでに同種のものが存在するのかどうかさえ、定かでない。困ったことである。一応メモ書きはあるものの、整理されていないため、あるのかどうか、あってもどこにあるのかがわからない。

これから少しずつ、思い出しながらソフトの全体像をマクロを中心としてまとめることとしよう。これは、マニアルではないから、私以外の人が見てもわかりづらいものに違いない。あくまでも私の備忘録(メモランダム)にすぎないので、たとえプログラムを書くのに精通した人でも簡単に読み解けるものではない筈だ。だから数独プログラムに興味がない人は見ない方がよいことをあらかじめ断わっておこう。

 「龍涎」プログラムは、言うなれば「ナンプレ分析ソフト」とか「数独診断ソフト」といった方がよいかも知れない。その機能、つまり何ができるかを大別分類すると次のような事だろうか。

               解法シミュレーション
問題をインプットしてしてやり、「Calculation」のコマンド・ボタンをクリックすると、一気呵成に解に関する情報、つまり最終解(Final answer)、などを計算する。

    格付け
 問題の難易度、やパターンの美しさを考慮した観点から問題の特性を解析し、DからA++までの範囲の格付けをおこなう。

    データベース検索
 一問に付き100項目を含む100冊の問題、ほぼ一万個の問題を内蔵している。また、検索機能マクロにより、各種統計検索が可能である。

    作問機能
 新しい問題の作成にあたり、同類の問題、パターンに合致する新問題を作成することができる。ワン・クリックでランダムに問題を何題でも作ることができる。




2014年3月15日土曜日

T_search memorandam(1)

T search は、陰の三国同盟(Explicit triple)と呼ばれるもので、三国同盟(Implicit triple)とマクロを共有する。
① L_search ( M45, 5 )
              > Lb_search    ( M45, 8)
              > Lr_search    ( M45, 9)
              > Lc_search    ( M45, 10)

② Lb_search >  hot_candy
                           Vb_Vr_Vc
                           Qb_Qr\Qc
                           Gb_Gr_Gc
                           deform_Lb     ( M46,10)  
                           scf
                           Bcf

③ deform_Lb
                      room=3
                      hidden_block_basic_deform  

④ hidden_block_basic_deform  ( M46,  4)
                      basic_setting
                kind = "hidden"
              kind1 = "B"
              flagM = kind & kind1 & room
        For igrp=1 to z
                     empty_cell_in_block  (M46, 1)
                     block_select_menber  ( M46, 11)
                      column_block_judge ( M46,111 )
        Next igrp

⑤ deform_Lr
                      room=3
                      hidden_row_basic_deform  

⑥ hidden_row_basic_deform  
      basic_setting
     kind = "row"
     kind1 = "R"
     flagM = kind & kind1 & room

    For ilin = 1 To z
     row_select_number
     column_row_judge
    Next illin

⑦ deform_Lc
                       room=3
                      hidden_column_basic_deform

⑧  hidden_column_basic_deform  
      basic_setting
     kind = "collumn"
     kind1 = "C"
     flagM = kind & kind1 & room

    For ilin = 1 To z
     row_select_number
     column_row_judge
    Next illin