自動解答系の作り方(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}

と答えてくれます.