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;
そういう事もあるんだなーと勉強になりました。