見えない何かに邪魔され

Posted on

Paizaさんの問題続き。
D問題は全部解けたので次はCランクへ。絶妙な難易度UP感におののく。

問題
AとBがn回じゃんけんする。
Aが出した手とBが出した手が入力されるので、Aが勝った回数を1行目、Bが勝った回数を2行目に出力。

入力文字列
3
g g
c p
p g
(3回勝負で、1回めはAがg(=グー)、Bもg(=グー)、二回目はそれぞれチョキ・パー・・・って感じ)

なるほどですねー。
引き分け及び勝ち負け判定をどうしようかな。
AとBが同じ時は「引き分け」
、ではなかった時に、
AがグーでBがチョキだったら、
「Aが勝ち」
、ではなかった時に、
みたいに最初に引き分け判定して、
それに当てはまらなかったらAの勝ちパターンを3つ書いて、
それ以外はBが勝ち、ってことにしたらいいかな。

そいでまあ書いてみたは良いのですが、なんか全然うまく行かない。
具体的にどこがおかしいんだろう・・と見直していったらまぁもう最初の「引き分け」の判定がすでにできてない。
配列に変換してるのがダメなのかなぁとか、単純に===じゃダメなのかなぁとか
ちゃんと指定できてないのかなぁ、とか。
でもそこら辺はちゃんとできてると思うのよね。
最終的にただ比較演算子使うのはちょっとphp的には危ういよ、っていう説明を散見したのでstrcmpを使うことに。
ただそれでも最初のグーとグーの引き分けを判断してくれない。何なの!?じゃあ2つの違いは何なの?!って聞いたら「-1」ですよって。
えーーーー・・・?

困ったときのvar_dumpで改めて確認したらBの手の後にひっそり改行入ってるのね。こいつか!こいつが悪いんか!
まあそう見て思ったら確かに改行されてるし、問題文にも改行入ってますって書いてあるし、それはそうなんだけど、そんなことまで考えないといけないとか知らなかったんだもーーーーーん。
「GoogleさんPHPで改行削除する方法教えて!」

てことでやっと完成した

    $btl = fgets(STDIN);
    $score_A = 0;
    $score_B = 0;
    for ($i=0;$i<$btl;$i++){
        $result = explode(" ", trim(fgets(STDIN)) );
        if (!(strcmp($result[0],$result[1]) == 0)){
            if ($result[0] == "p" && $result[1] == "g"){
                $score_A ++;
            }
                elseif ($result[0]=="c" && $result[1]=="p"){
                    $score_A ++;
                }
                    elseif ($result[0]=="g" && $result[1]=="c"){
                        $score_A ++;
                }
                    else {
                       $score_B ++;
        }
    }}
    echo $score_A."\n".$score_B;

そういう事もあるんだなーと勉強になりました。


コメントを残す

メールアドレスが公開されることはありません。