2つの数を比較して、
- 数字と桁が等しいものの(ヒット)数
- 数字は等しいが桁が違うもの(ブロー)の数
を返す判定サブルーチンを作成します。
ヒット数を返す判定サブルーチン
まずはヒットの数を返すサブルーチンを作成します。以下の手順となります。
- 与えられた2つの数を桁ごとの数字を求める。
- 数字と桁が等しい場合には、変数$hitの値を1増やす。
【サブルーチン】
# 判定サブルーチン sub hantei { my $a, $b; my $a0, $a1, $a2, $b0, $b1, $b2; my $hit=0; ($a, $b)=@_; # 2引数を変数$a, $bに $a0=int($a/100); # 百の桁 $a1=int(($a%100)/10); # 十の桁 $a2=$a%10; # 一の桁 $b0=int($b/100); # 百の桁 $b1=int(($b%100)/10); # 十の桁 $b2=$b%10; # 一の桁 if ($a0==$b0) { $hit++; } if ($a1==$b1) { $hit++; } if ($a2==$b2) { $hit++; } return $hit; }【呼び出し側】
$answer=123; $number=&input; # 入力サブルーチン $hit=&hantei($answer, $number); print $number." : ".$hit."H\n";ヒット数とブロー数を返す判定サブルーチン
ブローの数も返すサブルーチンに変更します。
- 数字が等しくて桁が異なる場合には、変数$blowの値を1増やす。
- 変数$hitと変数$blowの値を配列にして返す。
【サブルーチン】
# 判定サブルーチン sub hantei { my $a, $b; my $a0, $a1, $a2, $b0, $b1, $b2; my $hit=0; my $blow=0; ($a, $b)=@_; # 2引数を変数$a, $bに $a0=int($a/100); # 百の桁 $a1=int(($a%100)/10); # 十の桁 $a2=$a%10; # 一の桁 $b0=int($b/100); # 百の桁 $b1=int(($b%100)/10); # 十の桁 $b2=$b%10; # 一の桁 if ($a0==$b0) { $hit++; } if ($a1==$b1) { $hit++; } if ($a2==$b2) { $hit++; } if ($a0==$b1) { $blow++; } if ($a0==$b2) { $blow++; } if ($a1==$b0) { $blow++; } if ($a1==$b2) { $blow++; } if ($a2==$b0) { $blow++; } if ($a2==$b1) { $blow++; } return ($hit, $blow); }【呼び出し側】
$answer=123; $number=&input; # 入力サブルーチン ($hit, $blow)=&hantei($answer, $number); print $number." : ".$hit."H".$blow."B\n";