暗算トレーニング

こちらにいると暗算が必要な機会が何かとあるので毎日暗算のトレーニングをする習慣をつけることにした。トレーニング用に以下のような感じでランダムに数字を生成して掛け算10問、割り算10問を出題する簡単なスクリプトを書いてみた。昨日から朝晩一回ずつやるようにしているが、せいぜい2,3分しか掛からないなのでそんなに手間ではないし頭のリフレッシュになって思ったより良い感じだ。

$ mmath.pl
Q1: 84 * 5 = ?
A1: 420 (Ellasped Time: 4 sec)

Q2: 51 * 4 = ?
A2: 204 (Ellasped Time: 3 sec)
...

スクリプトのソースは以下。x1とか÷1などの簡単な問題は出題されないようにしている。後9問目からは二桁の掛け算割り算が出題される。

#!/usr/bin/perl

use strict;
use warnings;

my $a;
my $b;
my $start_sec;
my $end_sec;

sub get_rand_pos {
    my ($rand_max) = @_;
    my $ret;
    
    do {
	$ret = int(rand($rand_max));
    } while($ret == 0);
    
    return $ret;
}

sub get_rand_mthan2 {
    my ($rand_max) = @_;
    my $ret;
    
    do {
	$ret = int(rand($rand_max));
    } while($ret < 3);
    
    return $ret;
}


for (my $i = 1; $i <= 10; $i++) {

    $start_sec = time;

    $a = get_rand_pos(100);

    if($i < 9) {
	$b = get_rand_mthan2(10);
    }else {
	$b = get_rand_mthan2(100);
    }

    print "Q$i: $a * $b = ?";
    <STDIN>;

    $end_sec = time;

    printf "A$i: %d (Ellasped Time: %d sec)\n", $a * $b, $end_sec - $start_sec;
    <STDIN>;
}

for (my $i = 1; $i <= 10; $i++) {

    $start_sec = time;

    do {
	$a = get_rand_pos(1000);
	
	if($i < 9) {
	    $b = get_rand_mthan2(10);
	}else {
	    $b = get_rand_mthan2(100);
	}
    } while ($b > $a);
	    
    print "Q$i: $a / $b = ?";
    <STDIN>;

    $end_sec = time;

    printf "A$i: %d (Ellasped Time: %d sec)\n", $a / $b, $end_sec - $start_sec;
    <STDIN>;
}

I wrote a simple script for my training of mental math.