Numer0n Programming Tips #1 シャッフル後の分析データにスラッシュの効果を反映させる
検証プログラムなんだけど、コンピュータと対戦しててバグを発見した。
シャッフルしたら分析データからスラッシュの効果が消えちゃった。
シャッフルはチェンジと違い、スラッシュナンバーは継続して有効なはずなのにだ。
修正するにはシャッフル後の正解候補群に対して再度スラッシュ効果を反映してやれば良いのだが、棋譜データを遡ってスラッシュコマンドを探すのは超めんどい。
そこで分析データ構造体にスラッシュナンバーを追加した。
スラッシュナンバーが非ゼロならば、スラッシュが有効であるという設計で。
チェンジが行われたらスラッシュは無効になるのでゼロにすれば良い。
厳密に言うとチェンジ時点の分析データによっては新たなスラッシュナンバーを算出できるパタンもあるのだが、そこまで計算するのはさすがにめんどくさい。
スラッシュ効果の反映法は、言うまでもなく正解候補ナンバーのスラッシュナンバーをチェックしてはじくだけ。
class Analyze { DigitID slash; }; BOOL Analyze :: AddSlashData( const Record & record ) { slash = record.uSlash.slash; } BOOL Analyze :: AddShuffleData( MoveID move, const Record & record ) { for ( int number = 0; number < maxNumber; number++ ) { if ( buffer[ number ] ) { NumberToArray( number, array ); if ( slash > 0 ) { min = digit9; max = digit0; for ( int column = 0; column < setColumn; column++ ) { if ( array[ column ] < min ) { min = array[ column ]; } if ( array[ column ] > max ) { max = array[ column ]; } } if ( max - min != slash ) { buffer[ number ] = FALSE; } } } } } BOOL Analyze :: AddChangeData( MoveID move, const Record & record ) { slash = digit0; }
以上。