前提・実現したいこと
開発職未経験のものです。
PHPでワードビンゴを作成しています。
ビンゴカードのマスをSとし、S×Sのカードマスを作ります。
そのマスの中に、ワードを入力します。
例えば、S=3の場合、カードマスは
test1 test2 test3
test4 test5 test6
test7 test8 test9
と入力し、
次に、マスを開ける回数をNとしN回カードマスを入力します。
例、N=5
test1
test5
test8
test9
test6
ビンゴがあれば、「Yes」、なかったら、「No」と表示させるプログラムを作成したいです。
発生している問題・エラーメッセージ
カードの作成と、マスを開ける回数、縦横のビンゴはわかるのですが、
斜め時のビンゴアルゴリズムに少々時間を費やしています。
ここの処理をfor文か、while文で処理したいです。
何か綺麗な書き方、または、良い計算方法はございますでしょうか。
エラーメッセージ
該当のソースコード
<?php $bingoCard = []; $S = (int)(fgets(STDIN)); for ($i = 0; $i < $S; $i++) { $bingoCard[$i] = explode(' ', trim(fgets(STDIN))); } $N = (int)trim(fgets(STDIN)); $selected = []; $bingoLine = []; for ($i = 0; $i < $N; $i++) { $selected[] = trim(fgets(STDIN)); $bingoLine = [ $bingoCard[$i], array_map(function($ary) { return $ary[$i]; }, $bingoCard), /*3×3時のビンゴが斜めに揃った場合(**この斜め処理を手動ではなく、プログラム(forかwhileで処理したい)**)の処理 [$bingoCard[0][0], $bingoCard[1][1], $bingoCard[2][2]], [$bingoCard[0][2], $bingoCard[1][1], $bingoCard[2][0]], */ ]; } $result = []; foreach ($bingoLine as $line) { if (count(array_intersect($line, $selected)) >= 3) { $result = $line; break; } } echo count($result) ? 'Yes' : 'No';
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。