といってもやっていることはmake10 問題一覧と解答の問題を拝領しているのですが。
子供の頃に、電車の切符に記載されている4桁の数字を使って10を作るというのをよくやっていたと思います(こういうのをテンパズルと呼ぶのは知りませんでした)。Suicaになって、そういう数字を見ることもなくなってしまい、あっても車のナンバーくらいでしょうか。ドラゴン桜2で、この計算が数字に強くなるのに適していると書いてありました。とはいえ、毎度切符を買うわけにもいかないし、ドライブしている時くらいしかできないのは辛いです。
アプリでもあるようですが、子供向けには紙でプリントされた状態で、手を動かす方が学習効果は大きいかと思います。ということで、問題用紙を生成するGoogleスプレッドシートを作りました。
誰でも編集権限を与えていますが、GoogleドライブにアクセスするのでGoogleログイン必須のようです。また、このシート自体はGoogleの承認を得ていないので、警告メッセージが出ます。
手順
Googleスプレッドシートにアクセスします。問題生成ボタンを押すと、承認が必要といわれます。

このアプリは確認されていませんと出ます。

詳細のリンクをクリックします。 テンパズル(安全ではないページ)に移動
をクリックします。この時点で私が信頼できない方は止めておいてください(生成に際して、編集権限を付与しているので、悪意を持った人が編集している可能性もあります…)。

権限を付与します。

問題が生成できるようになります。

自分で作る場合
こちらの方がお勧めです。Googleスプレッドシートの 問題用紙
と 問題一覧
の内容をそのままコピーしてください。シート名も同じにしてください。
ツールメニューのスクリプトエディタを開いて、次のコードを貼り付けます。552というのは問題の数で、決め打ちです(問題一覧シート参照)。なお、今回は全問解けるものだけにしています。解けないものを入れることもできますが、0000とか簡単すぎるものも入ってしまうので、今回は除外しています。
function generate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('問題一覧');
var s = ss.getSheetByName('問題用紙');
var data = sheet.getRange(1, 1, 552, 3).getValues();
for (var i = 0; i < 5; i++) {
var params = data[Math.floor(Math.random() * data.length)];
var numbers = zeroPadding(params[0], 4).split('');
var row = (i + 1) * 4;
for (var j = 0; j < 4; j++) {
s.getRange(row, (j + 1) * 2).setValue(numbers[j]);
}
}
}
function zeroPadding(num,length){
return ('0000000000' + num).slice(-length);
}
やっていることは問題一覧を取得して、その中からランダムに4問取り出して、問題用紙に貼り付けているだけです。
後は問題用紙にある 問題生成
ボタンのトリガーとして generate
関数を実行しています。
まとめ
問題はボタンを押す度に新しいものに変わります。色々な問題を作って、算数脳を鍛えてみてください。なお、小学校5〜6年生レベルだそうですが、中高生で数学が苦手な人にもいいそうです。
謝辞&参考: