2012/07/24

[競技プログラミング][PHP][AtCoder]宝くじ

A - 宝くじ

時間制限 : 2sec / スタック制限 : 10MB / メモリ制限 : 64MB

問題文

高橋君は夏の宝くじをこっそり買っていました。今日はその宝くじの当選発表日です。
購入者は、0 から 9 までの 10 個の数字から重複せずに 6 つの数字を選び購入します。
発表日には 6 つの本数字と 1 つのボーナス数字が発表され、
購入した宝くじとその数字がいくつ一致しているかで以下のように当選の等級が決まります。
  • 1 等 : 6 つ数字が一致
  • 2 等 : 5 つ数字が一致し、残りの 1 つの数字がボーナス数字と一致
  • 3 等 : 5 つ数字が一致
  • 4 等 : 4 つ数字が一致
  • 5 等 : 3 つ数字が一致
上記のどれにも当てはまらない場合ははずれになります。
また、複数の等級を満たす場合は上位の等級(数字が小さい等級)が適用されます。

高橋君が購入した宝くじの等級を求めなさい。
なお、与えられる当選番号とボーナス数字の 7 つの数字は互いに異なります。

入力

入力は以下の形式で標準入力から与えられる。
E0E1E2E3E4E5
B
L0L1L2L3L4L5
入力は 3 行ある。
1 行目には、当選番号を表す 6 つの整数 Ei(0≦i≦5, 0≦Ei≦9) が与えられる。
Ei は昇順に並んでいる。
2 行目には、ボーナス数字を表す整数 B(0≦B≦9) が与えられる。
3 行目には、高橋君が購入した宝くじの 6 つの数字を表す整数 Lj(0≦j≦5, 0≦Lj≦9) が与えられる。
Li は昇順に並んでいる。
Li の 6 つの数字は互いに異なります。
Ei と B を合わせた 7 つの数字は互いに異なります。

出力

高橋君が購入した宝くじの等級数 (1 等の場合は 1、2 等の場合は 2、のように) を標準出力に 1 行で出力せよ。
また、はずれの場合は 0 を出力せよ。
なお、最後には改行を出力せよ。

出典

A: 宝くじ - AtCoder Regular Contest #006 | AtCoder

回答

AtCoder/arc006_1.php at master · wada811/AtCoder · GitHub
<?php
$winning = rtrim(fgets(STDIN));
fscanf(STDIN, "%d", $lucky_number);
$bought = rtrim(fgets(STDIN));

$winning_numbers = explode(' ', $winning);
$bought_numbers = explode(' ', $bought);

$intersects = array_intersect($winning_numbers, $bought_numbers);
$count = count($intersects);
一行取得はfgetsで良いのだけれどそのままだと改行コードを含んで面倒なので
rtrimで改行コードを除去するのが良いようだ。
でないと空白で分割した後に、array_intersectで比較された時に
異なる文字列と判断されてしまう。

タグ(RSS)

ブログ アーカイブ