納得!朝三暮四

色々書きます

算数パズルをプログラムに解かせたい

次の□に+か-を入れて等号が成り立つようにしなさい。
0□1□2□3=4

こういうパズルを業務で作ってるわけなんですが、作為を考えつつ別解がでないようにしててもどこかで見落としをするので、プログラムに確認させたい、という気持ちがある。

入力は整数列(a1,a2, ... an)と右辺の整数値で、演算子加減乗除と「結合」(たとえば1□2が12、12□3が123となる、左が0の場合はなしにしたいけどプログラムで除外するほどのものではない)があるとする。

実際の問題では使える演算子は上述の問題のように限っているのだが、大した出力にもならないので、そこらへんは目でやることにする。色々やれば探索の枝刈りとかできそうな気はしたが、面倒くさいしどうせn<=7程度なので、全探索しても死なないので全探索することにした。こういう問題ならCとかで書いても良さそうな気はしたんだけども環境構築がだるかったので、他の業務にも使ってるHSPでやることにした。

nが入力を受け取るまで不定な以上、各□の多重ループで全探索は無理っぽいのは何となく分かる。それで最初は再帰関数を使ってやろうとしたが、配列を変数にわたすとかうんぬん考えてたら死にそうだったのでやめた。数列と答えを受け取って、実現できるかどうかを返すみたいな。あと、結合→乗除→加減の順で計算しなければいけないあたりでも死を招きそうだ。

全探索するので、とりあえず全通りの数を出せば良い。5^(n-1)である。あとはこの数を5進数表示にして演算子列に変換する。あとは結合→乗除→加減の順で順々に計算していく。ここらへんの作業用数列/演算子列と元の数列/演算子列の扱いだとか、どの演算子を見ているかあたりの扱いを適当にやって壮大に死んだが、なんとかした。コピペまみれの糞コードで250行ぐらいかかったけど間違ったことはしてなそうだし、よしとする。

「お金を入れてね!」

普段使っているスーパーには、簡単なゲームコーナーがあり、ガチャガチャとかチューインガムが貰えるよくわからん機械が置いてある。その中に、プリチャンが鎮座している。悲しいかな、地方小都市のスーパーマーケットの客層はほとんどがジジババで、ついぞこのゲームが遊ばれているところを見たことがない。一度だけ、「ボタンを押すのは楽しい!」ということに気が付き始めた頃の男児が金も入れずボタンを連打していたのを見たっきりである。よしんば、対象年齢の女児がいたとしても、買い物の付き添いに来ただけの子供が、ナマ物を腐らせたくない母親を言い含めて、ジジババの前でゲームに興じるということの難易度が、ゲームそれ自体の難易度よりもはるかに高いことは想像に易い。アイドルになりたい女の子も、地方営業なんて別にしたくないのだ。しかるに筐体の中の女の子たちは、今日も周りのジイサマバアサマに向けて空虚な声を上げ続けている。

最近のああいう筐体は、おそらくカメラがついていて、目の前に人が立っているときと立っていないときで微妙に宣伝の内容が変わるらしい。目の前に立っている人は少なからず興味を持っているのだろうから、より積極的にゲームをプレイするように求めるのである。ただ、あまりに小さすぎてサッカー台(というらしい、あの荷物詰めるスペース)の真後ろに置かれているプリチャンは、荷造りを終えて通り過ぎるジイサマバアサマに反応して声をあげるのである。

お金を入れてね!

昨今の基本無料ゲームに慣れきった子供たちにとっては、お金を払わなければ遊べないゲームが存在することを知らないのかもしれない。あるいは、お金を入れずともある程度進んで途中からお金を入れるシステムだと思っている子供もいるのかもしれない。そういった子供に向けた言葉なのだろうか。あるいは、遊びもしねえくせにゲームの前に陣取ってんじゃねえぞという脅しであるのか、色々な気持ちが込められているのかもしれない。

お金を入れてね!

それにしても、なかなか「お金を入れてね」とは日常生活で使うことのない文章だ。1000円カットの券売機の使い方がわからんジイサン相手にしか使っているところを聴いたことがない気がする。それも、お金を入れる客と、入れられる機械、説明する店員の3人がいる状況で使われる言葉だ。プリチャンはお金を入れられる側であり、説明をする側なのだ。そしてまた、ゲームの中の彼女たちは決してその世界の内だけで生きていれば、発することがない言葉だ。いかに彼女たちがアイドルといえど、ファンに向かって「お金を入れてね」とは言わない。ゲームの中の世界から、わざわざこちらの世界の事情を汲んで、メタな発言をしているのである。いったい声優はどういう気持ちで「お金を入れてね」を収録しているのだろう……。

お金を入れるのかしら?

いや待て。
それはなんだ。「お金を入れるのかしら?」、それを、尋ねるのか?俺はプリチャンのことは全くわからんが、このセリフから、このキャラクターがおそらくはお嬢様で、ちょっと高飛車なところがあるキャラクターなのだということぐらいは、超絶リテラシーをもって理解することができる。プリチャンが好きな女児もまあ知ってるんだろう。こういうキャラクターは、お金の要求なんかしない。お嬢様だし。こういうキャラクターが「お金を入れてくださいね」とか言おうもんなら、没落からのにゃんにゃんな薄い本の展開まで読めてしまう。こういう現実に存在しなそうなお嬢様キャラクターは多分女児受けもいいんだろう、多分。だからわざわざゲームプレイの要求にまで出しゃばらされているのだ。その、落とし所が「お金を入れるのかしら?」なのか。「まあ、私はあなたがプレイしようがしまいが好きにすればいいとは思うけれど」ぐらい前置きとしてついてきそうだ。でも、こんなコンテクスト、女児には読めないだろ。「そうだよ!入れると遊べるんだよ!」って毎日どこかで答えている女児がいるんではないか……

通り過ぎ去ったジイサマを見失ったしゃべる箱は、また目の前に人を呼ぶ宣伝へと戻っていった。多分着せ替えた後、リズムゲームかなにかするんだろうけど、お金を入れていない私にはそこまでの説明なんてしてくれず、女の子たちが笑顔で歌を歌っているのが流れるのみである。

算数だけで解ける(解けない)2

これも前回の記事の問題を出した先生が生徒に出題していた。問題と答えは知っていたが、解き方は知らんかったので自分で解くことにする。


1日考えてダメだったので、模範解答を見る。あ~~~~~~~上手いな~~~~~~

まあこれもそんなことしなくてもx+√3x=10とおけばよい。しかもxを求めずとも後は式変形だけで面積に持っていける。高校生ならそれができれば十分だろう(教えてた生徒は中1で三平方習ってないから厳しそう)。

悔しいので別解を作ろう。多分その別解もこんだけバズった問題なら数多の人間が思いついているのだろうが、それでもやろう。算数になんか負けないぞ。

まず数学で答えを求めると、25になることがわかります。

わかっているのは長さだけなので、とりあえず面積の次元に持っていきたいです。10を一辺とする正方形でも良い気はしますが、どこに埋め込んでもスッカスカなのが気になります。まあ4倍だから仕方ない。なので、10を対角線とする正方形にしましょう。これは正方形の上下に正三角形を作って、正三角形の孤立している4頂点を結ぶとできます。この正方形の面積は10*10/2=50なので、この中には元の面積の2倍である、正三角形4つと正方形2つが入っていることになります。明らかに正三角形4つと正方形1つが入っているので、残っている二等辺三角形4つが正方形1つの面積と等しくなることを言えればよいです。

言えればいいんだよ。

数時間の死のもと、やっていきます。とりあえずこの二等辺三角形の角度を求めましょう。15°, 15°, 150°になる。人間は等しい長さを見ると、重ね合わせてみたくなります。なるんだよ。とりあえず2つの二等辺三角形を等辺で重ねます。

重ねたから許してくれ。

数分の死のもと、やっていきます。あと2個二等辺三角形が残っているので、とりあえずこれもくっつけたいです。そのままくっつけると間が空いてしまう(なんかイヤ)なので、等積変形してやって、さっき重ねた等辺の先に同じ長さを取って孤立頂点と結びます。あとはこの四角形の面積を求めればよい。よいんだ。この四角形は対角線が直角に交わってるので、対角線×対角線÷2で面積が求まります。等辺を重ねたほうは、明らかに2x(xは正方形の一辺、表記の問題であって数学は使わんから許せ)。もう一つの対角線は実は、最初に重ねた二等辺三角形の、重ねてない等辺と正三角形をなす(360°-150°*2=60°)ので、x。よってこの面積は2x*x/2=x^2で、正方形の面積1つと等しい。ゆえに求める面積は25。

ここまで考えてようやく途中過程をいくらかスマートにする方法が見えてくる。ようはこの15°, 15°, 150°の二等辺三角形は算数の範囲で面積を求められるのだ。等辺を底辺とすれば、高さは30°,60°,90°の直角三角形を使って高さが等辺の1/2であることがわかる。ここから面積をx^2 /4と求めればよかった。これ単体で出されてもなかなかに面白い問題だなとは思う。

教育に携わってる者として、「この問題を解くこと」にいくつか考察をしたい。この問題にはいくつか解き方がある。
A. 算数を使った模範解答
これは見えるか見えないかが強い解答だと思う。パズル性が強く、逆にいえば既存の方法学習で対応できない解法である。
B. 数学を使った解法
三平方の定理を使って長さを求める。数字は汚くなったりするが、直感的であり、既存の方法学習で対応できる。それゆえに、三平方の定理を学ばないと不可能である。
C. 私が行ったような、苦しみの算数
スマートな解答が思いつかない、あるいはそれを制限されたときにやる方法。袋小路に入るし、遠回りもする。ある程度「見えなく」ても解ける。

現在までの学校での数学教育がB. を推し進めているのは理解しやすい。高度な道具を与えてそれを使えるようになるのを理想とする。逆に難関中学入試では、むしろA. のような発想を重視している感じが強い。算数・数学だけでなく、あらゆる問題はたいがいこの発想と道具が両立してこそ解決に至る。

しかし、この「発想力」はいかにして身につくのか?考えつく、今までに言われてきてそうなこととしては、
1. 考える
2. いっぱい解く
あたりだろうか。発想力よくわからなすぎて、発想力に対するメタな道具が全然ない。発想力ってなんなんだ。1.考えるは尤もらしさが強い。考えつくには考えるしかない。答えを見ずに考える過程が多ければ、それだけ発想に近づく。2.のいっぱい解くことで、その中の思考を早めたり、ショートカットを覚えることができる。

しかし、結局これらは「発想が有限」であることを仮定にしてるに過ぎない気がする。そしてそうだとしても、これは教育が「扱える有限」なのだろうか?作問するのも人間であるから、その発想も有限であることは、確からしい。しかし悲しいかな人生には優劣がつきものだ。そもそも単純に生きてきた年数が違う。そして作問者はだいたいにおいて発想に優れた人間である。上記の問題も、松丸さんが小学生のときに作った問題らしいから、この時点で2n歳のおっさんの発想力に勝っている(ような気がする)。

そうか、得てしてこういう発想力に優れた人間エピソードにあるあるっぽいこれも解法の1つなのかもしれない。つまり、
3. 問題を作る
である。問題を作る側に回る経験は教育においてほとんどさせてもらえないが、たいがい頭のいいヤツはそういうエピソードを持ってる。なんならワシもやってた。作り手のキモチを理解するには作問するのが速いのかもしれない。まあ実際にこれやってみる(小学生~中学生あたり)と、発想の問題を作れる人間はそういない。たいがいカルト知識問題を作るか、なぞなぞになってないなぞなぞになる。解けた人数によって点数を変える(全員正解・0人正解は0点で正解者数が少ないと高い点みたいな)みたいにしても、まあだいたい相手チームの学年から逆算した知識問題に落ち着く。つまりは、そもそもの視点として「発想」と「道具」がある(というのもこちらの単なる教育哲学でしかないのかもしれないが)ことが、欠如しているのかもしれない。その視点を与えることに「算数パズルを考える、考えて考えてわからなかったら答えを見る」みたいなことが役立つのかもしれない。あるいは、直接的にその視点の存在は教えておいたほうが良いのかも知れないけど(体得には実際に上述の作業が必要なのでしょう)。

しかし、私達が育てた結果として得られるのが「A.で解ける」人間であってもよくない。厳密には「A.でしか解けない」ではダメである。B.の教育を受けてきた子どもたちにとっては、A.の提示はしばしば「A.が道具」の結果をもたらしかねない。こうなると、結局与えられる長さが変わった問題しか解けなくなる、ではダメである。ここが難しい。マジでわからん。発想を鍛えるために「問題を解かして、A.を見せる」は発想を鍛える方法として良さげに見えて、実は子どもの側がB.の教育として受け取っているかもしれない。あるいは受け取らざるをえない子どももいるのかもしれない。複数解を用意してもあまり結果は変わりそうにない。もう少し意地悪して、解答を見せたあと、別解を作らせるとかでも良いのかもしれない(私がやった)が、B.の受け取りをしてる人間は結局それも「複数の発想」ではなく「複数の道具」として捉えるかもしれない。

そもそも、私は本当に発想を学んでいるのだろうか?実際、発想の乏しさからかなり「道具的な発想」を使っている。「長さは二乗すると面積になる」だとか「同じものは重ねる」とか「できるだけ元のものに近づけるようにする」とか発想ではあるが、ある程度どの場面でもそれなりに有効な「道具的な発想」を持っている。それ以外の発想は本当に乏しい。もしかしたら、A.の解法にもそういうのがあるのかもしれないが、私にはそれを「道具として」扱えない気がする。

結局この「発想力」が自分にもよくわかってないし、それを伝える方法もわからない。「道具的な発想」を鍛えることは、学校教育を受けてきた生徒にもある程度できそうな気はする。それを突き詰めていくと、実はA.の解法が作り出せる人間になったりするのだろうか。弊害的に語っているが、学校教育にすべての問題があるわけでもないはずだ(実際、この問題に関してはB.の解法で解けるだけで十分なはずだ)。仮に、学校教育が全く変わるなり、あるいは学校教育を全く受けていない子どもに、「発想力を伸ばす」教育ができるのか?道具なきところに発想もないのは尤もらしそうである。

教育に携わってそろそろ1年は経ってる気がするが、まだまだ解けない。そもそも道具を教えるのもまだまだクソ下手なのではあるけれど。

算数だけで解ける(解けない)

「算数だけで解ける問題」を初見で算数だけで解けたことがない。絶対に数学を使う。算数だけで解けると、ほほーっという気分にはなるが、でも数学で解けてるからいいじゃんってなる。色々な解き方ができることが重要なのは確かだと思うが、「算数でしか解けない問題」がまずないんだから数学をやれと言いたくなる。

算数だけで解く場合、まず算数でろくすっぽ教えてもらえない補助線を引いたり図形を分割する必要がある。私は補助線が引けないので補助線の引き方も教えられんが、教えられる人間はこの世にいるんだろうか。結局色々やって「見える」ようになるしかないぞーって感じが強い。こういうのがダメである。

こういう問題を考えもせずにどっかからもってきて生徒に出題して悦に至る教師が存在する。ファック。

f:id:AsamiCrayon:20190118104244p:plain
問題図

図から察してほしいが△ABCと△CDEは直角二等辺三角形である。オレンジ色の△ADFの面積が28で、BEが3だ。ABの長さが算数で求まる。らしい。また聞きであるので、おそらくもっとキレイな図がツイッターとかにあるんだろうけど、それを見出すリテラシーはなかった。著作権とか存在しないだろうし許してほしい。

ABの長さをxとおけば方程式が作れて終わる。(x+x-3)*x/2-x*x/2-(x-3)*(x-3)/2/2=28。x=11。いや本当はもう少し算数的変換してから簡単な方程式解いたけどそこは許してほしい。

ここから算数だけで解くことを考える。ファッキン。とりあえず二等辺三角形だから正方形にしたくなる。これが算数だ、ファック。新しい点をGとする。対称性がなんか見えてAEFも28だとわかる。28+28=56で、△AED=56だ。正方形ABCGから△ABE、△AGD、△CDEを除くと56だ。ここでまず思考が停止し、数学をし始める。そして何も得られない。死。

さらに飛び道具を考える。わかってる長さは3だ。面積の世界に持ち込むためにとりあえず2乗する。9。ここで56+56+9=121という神が降ってくる。終わりだ、もうこれでいいだろ。28+28+28+28+3*3=11*11だから、11。多分どうにか図形を組み合わせるとこうなるんだ、許してくれ。ファック。

△ABEと△AGDは合同なので移動して長方形にしたくなる。俺にできるのはそれだけなんだ。こうするとなんか台形GDE(fuck)ができる。これの面積が56だ。これ2つと一辺3の正方形を組み合わせると正方形ができるんだ。できるんだぞ。ファック。ファック。ファック。DEの部分で折り返すように重ねるとできた。許してくれ。許された。算数だけで解いたぞ。許してくれ。

これを出題した教師は揚々と、おそらくはネットで見た賢い解法を生徒に話していた。なんかADFをぺたんってひっくり返すと△ABCの面積をいい感じにできるらしいです。算数だけで解いてるけど三角形の面積を求めるときに分数を使ってるから俺の勝ちです。




いや分数を使わずに解けるもファックである。算数はファック。許してくれ。

バイト

バイト

正確には給料出ないんですけど、働き始めました。いまんとこ基本的に平日2時間小学生が勉強してんのを見てるだけですが。今日は3人の子と将棋をして1勝2敗でした。経験者じゃないから序盤で死ぬ。

PC

HD交換されました。エロ画像のタグデータが吹っ飛んだ以外は特に被害はないです。HDがイカれた原因は割と明白で、再起動中とかに電源押して消したりつけたりとかしまくってたせいだと思います。そもそも重くなった原因は分からずじまいでした。もやもや。いまんとこエクセルが使えないので割とできることが少ない。

戦プロ

なんとか連合軍追い出される前に戻ってこれた。ガチャは諸々引けなかったけども。井伊家ガチャは井伊直虎が当たりました。長篠の戦いはEXの3戦目あたりで全滅。武田・上杉の武将とか数いないので仕方ない。高坂昌信は★6にできたのでよしとする。総力戦は今後もしばらくは九州かなあ。

FGO

PCが動かない間に始めた。FATEはなんかセイバーとかいろんなのが聖杯とかいうすげーもの巡って争って、力を得るためにエッチする程度の知識しかない状態で始めたんですが、意味不明な用語が飛び交うのを眺めていることで、なんとかこれは大長編ドラえもんタイムボカン24みたいなことをするストーリーであることを理解しました。要所要所で全滅して復活させながらストーリーを進めている。★5サーヴァントが1つも出ないので主力はステンノという女神なのですが、使いやすいのか使いづらいのかいまいちわかっていない。ワイバーンをそれなりに倒してくれるのは良いことか。単純にレベル上げがクソ面倒くさいので、1日1,2回プレイする程度に落ち着きそう。

散髪

散髪

した。母親はかっこよくしろとか色々言ってたけど結局いつものような特に注文のないオーダーをして普通な髪型になった。

世界史

ようやくオリエントの部分を読み終えた。読み終えたけどここらへん、だいたいどっかからぽっと出の奴が出てきてはオリエント統一して、分裂して出来たやつ全部ぽっと出の奴が潰して統一してみたいな繰り返しだなー。あとギリシャとかローマとか勉強してないとこの勢力が出て来るの、ネタバレ感がある

戦プロ

40万人突破記念(新人じゃない方)を回して、伊達政宗織田信孝(2)をゲット。毛利元就も出たが、2体いるし、運も上げようとは思えないので売却。

思ったよりガチャの数が多い。バレンタインガチャ当たらなかったしもう1回回そうかと思ってたけど辞めたほうがいいかしら。とはいえ今115個勾玉あるし、15個ぐらいなら2,3日で貯まるんだよなあ。剣士ピックアップは藤堂2人赤尾1人いるのでパスするとして、残り2つ+バレンタインor1周年記念か。普通に40万人突破記念も魅力あるんだよなあ。

大乱イベントは残り7日で150kptまで92kptぐらいで厳しそうか。玉大量に割ってまでやる気は起きないなあ。

通院2

2月2日

一昨日のことなんか覚えてるわけねーだろ、この野郎。流石に2日に1回はブログ書かないとあかんなあ。

通院2

カウンセリングを始めて受けたんですけど、カウンセリングってやっぱカウンセルすることを考えとかないとダメですね。ただでさえコミュ障だから気まずい時間が流れ勝ちになってしまう。先週と同じ薬を貰った。バレンタインが近いということで受付でチョコを貰えた。これはバレンタインに貰ったチョコに加算してよいのだろうか?帰りに寿司を食ったら結構なお値段になってしまった。本屋に寄って暇潰しのために世界史と日本史の書き込み教科書と漢字パズル誌を買った。世界史に手を付けてるけどいつまで続くやら。

世界史のお勉強

歴史の何が退屈かって前史時代のつまんなさだと思うんですよね。偉人とか出ないし、でっかい出来事もないし。人類の進化に思いを馳せながら気になったことを調べつつ読んでみている。アウストラロピテクスのアウストラロは「南の」って意味で、オーストラリアと同じなわけですね。ホモハビリスのハビリスは「器用な」という意味で、ableとかの語源になっている。ホモ・エレクトゥスのエレクトゥスは「直立する」なのでこれはエレクチオンと同じですね。勃起人。古代オリエントあたりは、ウルとかウルクとかあったなあって覚えがあるんですけど、ミタンニ王国って何……全く聞き覚えがない……(地理選択の限界)

戦プロ

イベガチャは足利義輝(2)だった。90ぐらい溜まってるのでもう1回回そうかなあ。とりあえず次のガチャ予定が出るまで様子見かなあ。

マンガ

  • 街コロ : 良い
  • 死にあるき : すっげえ展開速いけど何話で終わらせる気なんだろう……