2019慶應義塾大学総合政策数学

既に、いろんな所で紹介はされているのだろうけど、行方不明にならないように貼っておこう

2019慶應義塾大学総合政策数学
2019_慶應義塾大学総合政策数学03
スポンサーサイト



-√2 は何処へ? 発散?

ボケ防止の為「大学への数学」のバックナンバーをヤフオクから購入して眺めているのだけれども
たまたま、2006年2月号の「√2 に近づく工夫(1)」栗田哲也 に面白い記事があった。

連分数と漸化式の違いはあるものの、収束する条件の考え方は同じとすれば

風みどりの詰将棋と関係ない話(33) -√2は何処へ?

での -√2 の行方(発散?)が、わかるかもしれない。
20221108_3.jpg
20221108_4.jpg
20221108_1.jpg
20221108_2.jpg


KTB48 について

KTB48とは、

複数の柿木将棋の  *.KI2 ファイルを TBase の *.DIA *.TJN ファイルに変換するものです。

門脇さんの、ソースコードには Ki2-tb.bas や Kiftb.bas があるので、
どこかにコンパイルしたものあるはずと思っていた。
なので、あえて、自分が作らなくともいいと考えていた。

20220924_2.jpg

メールでの、作っていませんか? の問い合わせにも、
「作っていない、すでにあるものは、作らない」旨の返事をしていたのだが、、

9月のはじめ、風さんが TJN ファイル だけでも、有ればいいようだったので、
TJN ファイルだけなら、既にあるものを転用するだけでいいので作ってみたのが大間違い。

門脇さんソースコードで、詰将棋情報を変換するのは

      if kmid$(A$,1,2)="作者" then lset SAKUSHA$=kmid$(A$,4)
      if kmid$(A$,1,3)="発表誌" then lset SOURCE$=kext$(kmid$(A$,5),1)
      if kmid$(A$,1,3)="表題:" then lset DAIMEI$=kext$(kmid$(A$,4),1)
      if kmid$(A$,1,3)="作品名" then lset DAIMEI$=kext$(kmid$(A$,5),1)
      if left$(A$,8)="発表年月" then gosub *YEAR

の通りで 5行 4種類にすぎなかった。
これでは、もし、門脇さんのプログラムがあっても、使い勝手が悪いだろうと思った。

で、20年以上も前の TMKPlay などのソースコードや
最近の ジュティム のソースコードをかき集め、試運転版を作った。

昔は Shift-Jis だけで文字列を扱えば良かったが、最近は ユニコード (utf-8 )ベースとなっている。Suiho や for you などの ユニーコード化が終わって、 Shift-Jis のことは「穴に埋めた」たばかりなのに、「穴を掘り返せ」ということか、、そして、他には使い道の無いことだった。

試運転版を試してもらっているうちに、いろいろと解ってきたこともあった。それは、いろんなやり方の寄せ集めではメンテナンスが大変ということだった、Shift-Jis とユニーコードの型変換の警告が、50以上も出ていたりする。

おかもとさんにバグ出していただいたおかげで、(ミクロコスモスなどの 1000 手以上の時に、次のField に書き込んでしまうというバグは残っている) 使えるようにはなって来たと思っていたのだが、

20220924_1.jpg

詰将棋情報の解析が必要?となり、ムムムとなっている。
「オプション」にて、解決する予定だが、どうなるか。

TBase からの読み書きを統一した方法でやらないと、program のメンテナンスは大変なので、色々と研究をしていたりする。

20220924_3.jpg

20220924_4.jpg
DIA ファイルの Field が Excel でイジることが簡単な、 CSV で 取り出すことができるようにしてみた。 CSV から、 DIA ファイルに戻すことができれば、柿木将棋の変換は、あまり凝らなくても済むと思われたりするのだった。

 


警告がこんなに

9月のはじめの、風さんの Twitter がきっかけで KTB48 なる program を作った。

そのコンパイル時に出る警告が、40以上もあるのだった。

20220914_1.jpg

こんなことにならないように、いろいろ考えてはいたのだったが、動けばいいやと思ってしまったので、こんなありさまだ。
まあ、一段落できたようで、「雀魂」の最近の成績は、以下の通り。一頃の低迷がウソのようだ。心の持ちようだなー。
20220914_2.jpg


今昔の感

柿木将棋 から TBaseの変換の Program の一部で、日付の変換部分を以下ののように書いてみた。

          DateTime := VarToDateTime(kkInfos[KIC]);

          kkInfos[KIC] :=
            Format('%.4d%.2d', [YearOf(DateTime), MonthOf(DateTime)]);
          numDay := DayOf(DateTime);
 
門脇さんのソースは、以下のようで、多分、似たことをやっているのだろう。

まあ、 VarToDateTime を使うと、エラーは出たりするのだが、今昔の感が拭えない。

'------------------
*YEAR
'------------------
R$=mid$(A$,11)
L1=instr(R$,"年") :L2=instr(R$,"月") :L3=instr(R$,"日")
RR$=kext$(R$,1)
LR=klen(RR$)
EEE=0
if LR>0 then
  for III=1 to LR
    if kinstr("平成昭和年月日",kmid$(RR$,III,1))=0 then EEE=1 : exit
  next III
endif
if L1>0 and L2=0 then EEE=1
if EEE=1 then  lset YEAR$="" : lset YEAR2$="" :lset REMARK$=R$ : return
if instr(R$,"平成")+instr(R$,"昭和")=0 then gosub *YEAR1 else gosub *YEAR2
return
'-----------  平成・昭和の記入なし
*YEAR1
'-----------
if L1=0 then '19970502 の様な場合
  lset YEAR$=left$(R$,6)
  lset YEAR2$=right$("00"+fnS$(val(mid$(R$,7))),2)
else         '1997年5月15日の様な場合
  LL=L2-L1-2
  YY$=mid$(R$,L1-4,4): MM$=right$("00"+mid$(R$,L1+2,LL),2)
  if L3=0 then DD$="00" else DD$=right$("00"+mid$(R$,L2+2,L3-L2-2),2)
  lset YEAR$=YY$+MM$ :lset YEAR2$=DD$
endif
return
'
'------------  平成・昭和の冠号あり
*YEAR2
'------------
Q=instr(R$,"元年")
if Q>0 then R$=left$(R$,Q-1)+mid$(R$,Q+2)
L1=instr(R$,"年") :L2=instr(R$,"月") :L3=instr(R$,"日")
LL=L2-L1-2
MM$=right$("00"+mid$(R$,L1+2,LL),2)
if L3=0 then DD$="00" else DD$=right$("00"+mid$(R$,L2+2,L3-L2-2),2)
if instr(R$,"平成")>0 then NENGOU$="平成" else NENGOU$="昭和"
LN=instr(R$,NENGOU$)
YY$=mid$(R$,LN+4,L1-LN-4): YY=VAL(YY$)
if NENGOU$="平成" then YY=1988+YY else YY=1925+YY
YY$=fnS$(YY)
lset YEAR$=YY$+MM$ :lset YEAR2$=DD$
return
'