※記法については『算数の問題文の記法のまとめ【随時更新】 - 算数の問題文の記法を考える』を読んでください。
【2000年度ジュニア算数オリンピックトライアル問題5問目】
①~⑫の数が書かれた玉が1つずつ、合計12個あります。
一郎、二郎、三郎の3人が4個ずつとりました。すると、3人のもっている玉に書かれた数の和が3人とも同じになりました。
つぎの3つのヒントを読んで問いに答えなさい。
ヒント1:一郎には⑤と⑫があります。
ヒント2:二郎には⑥と⑧があります。
ヒント3:三郎には①があります。
さて、三郎のもっている残りの3個の玉に書かれた数字はそれぞれいくつですか。
【記法化】
ichiro := []; ziro := []; saburo := []; 実行; [ichiro, ziro, saburo].every := 1つ辺り4つ追加 : 被りなしで全部 := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].every; 実行; sum(ichiro) == sum(ziro) == sum(saburo); 5 in ichiro; 12 in ichiro; 6 in ziro; 8 in ziro; 1 in saburo; print(saburo);
「[ichiro, ziro, saburo].every := 1つ辺り4つ追加 : 被りなしで全部 := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].every;」という表記は正直迷っている。この算数の問題文の記法の本質の1つは、例えば一郎や二郎や三郎が何番を取るかで実行結果が分岐していくことなのだけど、分岐要因の1つである移動がどういう表記であるべきかは定まっていない。
【工夫】
ichiro := []; ziro := []; saburo := []; 実行; [ichiro, ziro, saburo].every := 1つ辺り4つ追加 : 被りなしで全部 := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].every; 実行; sum(ichiro) == sum(ziro) == sum(saburo) == sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) / 3; 5 in ichiro; 12 in ichiro; 6 in ziro; 8 in ziro; 1 in saburo; print(saburo);
「sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) / 3」なのは当たり前だろとも思うのだけど、内部的にどう振る舞うのかがまだハッキリしてないので、もしかしたら必要かもしれない。そうするとそれぞれにおいて合計26になると分かるので、例えば一郎は「26 - 5 - 12」で残り9。「1、8」「3、6」「4、5」の組は選択肢にないので自動的に「2、7」が残り。二郎も同じように「3、9」。それ以外が三郎と分かる。
しかしこの工夫にしても、色々なことを前提にしてしまっている気がする。例えば一郎の場合に、残りが9であること、更には「1、8」「3、6」「4、5」の組は選択肢にないという判断を内部的に行うと考えて良いものだろうか。良いような気もするし良くないような気もする。