歳ッ、取らずにはいられないッ!
今の世の中、人間に不老不死なんてないんです。ただ、歳を取っても努力はできるんです。昔できたのに今できなくなったなぁ、と思っていることも、努力すればもう一度できるようになるかもしれませんよ?
私はですね、最近計算が遅くなったな、と思います。出した答えにちょっと自信が持てなくなってしまっています。であれば、私が理想とする速度で、信頼できる答えが計算できるまで、努力しようではありませんか。そう、フラッシュ暗算を使ってね!!
助けて、ジピえもん
探せばフラッシュ暗算をするためのアプリケーションなんていっぱいありそうですが、こういう場なのでコードを用意します。1から自作は大変なのでChat GPTに助けてもらいましょう。とりあえず雑に「フラッシュ暗算用のC#コードを書いて」と投げます。
using System;
using System.Threading;
namespace FlashAnzan
{
class Program
{
// =========================
// 設定(ここだけ変えればOK)
// =========================
// 出題数
static int QUESTION_COUNT = 10;
// 1問あたりの数字の個数
static int NUMBERS_PER_QUESTION = 5;
// 出てくる数字の最小値/最大値
static int MIN_VALUE = 1;
static int MAX_VALUE = 99;
// 数字を表示している時間(ミリ秒)
static int DISPLAY_TIME_MS = 700;
// 数字と数字の間のブランク時間(ミリ秒)
static int BLANK_TIME_MS = 300;
// 数字表示中にキー入力を受け付けるかどうか(true = 無視 / false = 無視しない)
static bool IGNORE_KEY_DURING_FLASH = true;
// =========================
// Main
// =========================
static void Main(string[] args)
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("=== フラッシュ暗算 ===");
Console.WriteLine($"出題数: {QUESTION_COUNT}問");
Console.WriteLine($"1問あたり: {NUMBERS_PER_QUESTION} 個の数字");
Console.WriteLine($"範囲: {MIN_VALUE} 〜 {MAX_VALUE}");
Console.WriteLine();
Console.WriteLine("Enterキーで開始します…");
Console.ReadLine();
int correctCount = 0;
Random rnd = new Random();
for (int q = 1; q <= QUESTION_COUNT; q++)
{
int answer = RunOneQuestion(q, rnd);
Console.Write("合計はいくつ?: ");
string input = Console.ReadLine();
int userAnswer;
bool ok = int.TryParse(input, out userAnswer);
if (!ok)
{
Console.WriteLine("数字で答えてください。");
userAnswer = int.MinValue; // 明らかに不正解にする
}
if (userAnswer == answer)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("正解! 🎉");
correctCount++;
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"不正解… 正解は {answer} でした。");
}
Console.ResetColor();
Console.WriteLine();
Console.WriteLine("次の問題に進むには Enter キーを押してください。");
Console.ReadLine();
}
Console.Clear();
Console.WriteLine("=== 結果 ===");
Console.WriteLine($"正解数: {correctCount} / {QUESTION_COUNT}");
Console.WriteLine($"正答率: {((double)correctCount / QUESTION_COUNT * 100):F1}%");
Console.WriteLine();
Console.WriteLine("お疲れさまでした! Enterキーで終了します。");
Console.ReadLine();
}
/// <summary>
/// 1問分のフラッシュ表示を行い、正解の合計値を返す
/// </summary>
static int RunOneQuestion(int questionNumber, Random rnd)
{
int sum = 0;
// 問題のイントロ
Console.Clear();
Console.WriteLine($"第 {questionNumber} 問 / 全 {QUESTION_COUNT} 問");
Console.WriteLine("数字が順番に表示されます。よく覚えてください。");
Console.WriteLine();
Thread.Sleep(1000);
for (int i = 0; i < NUMBERS_PER_QUESTION; i++)
{
int n = rnd.Next(MIN_VALUE, MAX_VALUE + 1);
sum += n;
Console.Clear();
Console.WriteLine($"第 {questionNumber} 問 / 全 {QUESTION_COUNT} 問");
Console.WriteLine();
Console.WriteLine($" {n}");
Console.WriteLine();
if (IGNORE_KEY_DURING_FLASH)
{
// 表示中のキー入力を捨てる
long start = Environment.TickCount;
while (Environment.TickCount - start < DISPLAY_TIME_MS)
{
if (Console.KeyAvailable)
{
Console.ReadKey(true); // 入力を読み捨てる
}
Thread.Sleep(10);
}
}
else
{
Thread.Sleep(DISPLAY_TIME_MS);
}
// ブランク画面
Console.Clear();
Thread.Sleep(BLANK_TIME_MS);
}
// 全て表示し終わった後の画面
Console.Clear();
Console.WriteLine($"第 {questionNumber} 問 / 全 {QUESTION_COUNT} 問");
Console.WriteLine("すべての数字の表示が終わりました。");
Console.WriteLine();
return sum;
}
}
}
そのまま出てきたものをペッと貼り付け。何題解くか、何個足すか、数字の範囲、1つの数字を表示する時間、数字が消えてから次の数字が表れるまでの時間を設定できるらしい。とりあえずデフォルト設定で行ってみますか。
さぁ、勝負と行きますか
実行していきますか。

おー、わかりやすい。ではEnterを押して開始。

まずはね、間違えてみましょうかね。そうすると赤文字で不正解と告げられ、答えも出してくれます。

次に正解してみると、緑文字で正解と告げられます。

最後まで解き終わると結果が表示されます。なんとも微妙ですね。表示する時間を長くしたり、足す数を少なくして、安定してきたら自分で難しくしていく、というのがいいですね。はい~。