手数はどこから?

KTB48 のprogram を書き直して以下のように書いてみた。

TJNファイルから、DIAファイルに KAITOU_SEG と KAITOU_DIF
を持ってくるところだ。

procedure TDiaManager.SetTjnSegDif(ATJNName: string);
var
  i: integer;
  Seg, Dif: integer;
  curNum: string;
begin
  TjnManager :=  TTjnManager.Create;
  TjnManager.TjnFileLoad(ATJNName);
  TjnManager.SetRecordIndex;
  for i  := 0 to RecordCount -1 do begin
    CurRecordIndex := i;
    GetRecord;
    curNum := getFieldValue(tbfNUM);
    TjnManager.GetSegDif(curNum, Seg, Dif);
    setFieldValue(tbfKAITOU_SEG, Seg);
    setFieldValue(tbfKAITOU_DIF, Dif);
    CurRecordIndex := i;
    SetRecord;
  end;
  TjnManager.Free;
end;

いつも、これくらい、スッキリしたコードが書けるといいのだが、ここまでくるには、何度も書き直していて、時間ばっかりかかった。費用対効果は、メッチャ悪い。

で、門脇さんの似たような作業のソースコードをみてみる。

'---------------
*KAITOU
'---------------
KAI=0
ER=0: open TJN_FIL$(NN) for input as #1
if ER=1 then KAI=1 : RETURN
GY=GY+1: locate 0,GY
print "解答インデックスを作成します。          ";
LL#=0
NUM_ORG=0
while not eof(1)
  line input #1,A$
  NUM=val(left$(A$,4))
  if NUM<>NUM_ORG then REC%(NUM)=int(LL#/330)+1
  if NUM<>NUM_ORG then DIF%(NUM)=LL#-330*(REC%(NUM)-1)
  T1=instr(A$,"手")
  if T1>0 then
    T2=T1
    while instr("0123456789",mid$(A$,T2-1,1))>0: T2=T2-1: wend
    if T2<>T1 then
      if T2<T1-3 then T1=T2+3
      TEKAZU%(NUM)=val(mid$(A$,T2,T1-T2))
    endif
  endif
  LL#=LL#+len(A$)+2
  NUM_ORG=NUM
  if T1>0 then NUM_ORG=0 '同じ番号の解答が2つ連続して出た場合の対策
wend
close #1
locate 40,GY: print "→完了           "
return

ううむ。ここで手数を get するのか。

program は、手数も求める修正が必要かもしれぬ。まあ、いいか。

柿木将棋の手数は、

1. 指し手を数える
2. まで○○手 という記述から
3. 詰将棋情報から

のやり方で求められる。3つとも同じ数字だったら問題は無いが、違った場合はどうなるのか?

KTB48 では、詰将棋情報の手数で上書きする仕様だったが、TBase で解答インデックスを付け替えると まで○○手 の手数になってしまうのだろう。


スポンサーサイト



hoarding

今回の廃品回収は 15kg となった。

一日1kg の目標には、全然届かない、まあ、いいか。

別冊文藝春秋や小説新潮だと、進まないや。