自動解答系の作り方(8)
空欄を多く含む論理式の扱いはそれなりに工夫を要します.実際,空欄の個数が5を超える場合,軽い処理のループでもかなり時間が掛かります.
幾つかのケースでは式を分割することもできるのですが,例えば,2009年度本試験数IIB第3問の最後に現れる
$$U_{n}=\frac{{ans[16] ans[17]}}{{ans[18] ans[19]}}-\frac{{ans[20] ans[21]} n + {ans[22] ans[23]} }{{ans[18] ans[19]}} \frac{1}{ans[24] ^ n}$$
は9個の空欄を含み,分割の余地はありません.
配点は空欄の個数ではなく人間にとっての難易度を反映しており,丁寧な誘導が付いている上記は,最初の4個で2点,残りの5個で2点しかなく,オミットしても良いのですが,ans[15]までは完答していますので,何とか最後まで進めたいと考え,思いついたのが空欄の圧縮です.
つまり,上記を
U[n] == ans1617 / ans1819 - ( ans2021 n + ans2223 ) / ans1819 1 / ans24 ^ n
といった5変数にするよう組んでおけば,数秒で
{Ans[1] -> 1, Ans[2] -> 3, Ans[3] -> 1, Ans[4] -> 9, Ans[5] -> 3, Ans[6] -> 8, Ans[7] -> 1, Ans[8] -> 9, Ans[9] -> 1, Ans[10] -> 3, Ans[11] -> 9, Ans[12] -> 2, Ans[13] -> 8, Ans[14] -> 9, Ans[15] -> 9, Ans[16] -> 2, Ans[17] -> 7, Ans[18] -> 3, Ans[19] -> 2, Ans[20] -> 2, Ans[21] -> 4, Ans[22] -> 2, Ans[23] -> 4, Ans[24] -> 9}
と答えてくれます.