自動解答系の作り方(13)

処理における留意点などを書いていきます.

第2問

これは2012年度の類題なので,頂点の座標,平行移動,最大・最小値及び対応する定義域内の元,x軸との共有点の座標の条件は既に組んでいた関数が適用され,y軸切片のマッチングパターンを追加すれば数学の部分はOKなのですが,文中の選択肢がいけません.

今回のシステムが空欄に当てはめるのは,項または論理式であり,等号や不等号といった述語記号のみの入力はMathematicaの仕様外です.対策としては一度ToStringしてStringJoinした後,ToExpressionする手がありますが,ここは結合に注意しつつ,Greater,Less,GreaterEqual,LessEqualを中置きで挿入する方法を採りました.

結果,変換に約15秒,実行に約1.6秒で

{{Ans[1] -> -1, Ans[2] -> 2, Ans[3] -> 6, Ans[4] -> 3, Ans[5] -> 6, Ans[6] -> 3, Ans[7] -> -1, Ans[8] -> 1, Ans[9] -> 4, Ans[10] -> 8, Ans[11] -> -1, Ans[12] -> 3, Ans[13] -> 3, Ans[14] -> 3, Ans[15] -> 6, Ans[16] -> 1, Ans[17] -> -1, Ans[18] -> 3, Ans[19] -> 9, Ans[20] -> 6, Ans[21] -> 3, Ans[22] -> 6, Ans[23] -> -1, Ans[24] -> 3, Ans[25] -> 3, Ans[26] -> 1, Ans[27] -> -1, Ans[28] -> 7, Ans[29] -> 3}}

に至ります.