【paiza】スキルチェック過去問題セット:神経衰弱 (paizaランク B 相当) 解答例 – PHP編


神経衰弱 (paizaランク B 相当)

この問題はpaiza動画講座の「スキルチェック入門編」 > スキルチェック入門編6: 神経衰弱 (Bランク) (全3回) 」で解説されています。

多次元配列を使えるかが鍵となる問題です。多次元配列使用して座標のカード情報を取得し、2つのカードが同じならターンプレイヤーのカード枚数を2つ上げ、違う場合ならターンプレイヤーを変更するプログラムを作成します。動画を見ていたからなんとか解けたものの、予備知識がないとガチモンの初心者はこのあたりで躓くかも…

解答例

 

解答方針

与えられる情報から、どの位置(座標)に何のカードがあるかというカード情報を格納する配列「$carddata」、めくられたカードの座標を格納する配列「$carddata」、プレイヤーが獲得したカード枚数を格納する「$pleyerdata」という配列を作り、実行結果から解答を導きます。

 

標準入力からトランプの行数、列数、プレイヤーの人数を取得する

トランプの行数を「$h」、列数を「$w」、プレイヤーの人数を「$n」に格納します。
ちなみに今回、「$w」は使用しません。

各データの配列を作成する

先程のトランプの行数「$h」と、プレイヤー人数「$n」を利用して、各データを管理する多次元配列とターンプレイヤーを管理する変数を作成します。

「$carddata」…カードの配置情報を格納する多次元配列
「$cardwrok」…めくったカード情報を格納する多次元配列
「$pleyerdata」…プレイヤーのカード取得枚数を記録する多次元配列
「$pleyerflag」…ターンプレイヤーを管理する変数

神経衰弱をプレイ

少々長ったらしいですが、「 if($carddata[$cardwrok[$i][0]-1][$cardwrok[$i][1]-1] == $carddata[$cardwrok[$i][2]-1][$cardwrok[$i][3]-1])」の部分…これは、もし一枚目のめくったカードと二枚目のカードが一致していた場合という意味合いになります。プレイされたカード一枚目のy座標を$cardwrok[$i][0]-1]、x座標を[$cardwrok[$i][1]-1]と表しており、この座標に位置するカードを「$carddata」から引っ張り出しています。二枚目も同じように、座標からカードを取得しています。

そしてカードが一致してた場合、「$pleyerdata[$pleyerflag] += 2;」とすることで、ターンプレイヤーのカード枚数を2増やし、このままターンプレイヤーを継続させます。
「else」の場合、「$pleyerflag++;」とすることで、ターンプレイヤーが切り替わります。

エッグ

シェアする