はじめに
Paizaにてレベルアップ問題集(PHP編)を色々と解いてみました。
本番問題の解答・解説はNGですが、こちらに関しては、公開していいそうなのでまとめておきます。
この記事では、スキルチェック問題ランクC,Dを解き終えた後にトライした問題の中で、参考になったものを抜粋して記載しております。全ては記載しておりません。
(回答をPaizaでは再度閲覧できないため、備忘録的目的もあります。)
また、事前知識として標準入力の基本を知っておく必要がありますが、今回は割愛します。以下が参考になるかと思います。
https://paiza.jp/works/search_chapters/3003
ifを使いますか?三項演算子を使いますか? (paizaランク C 相当)
以下が問題のリンクです。詳細はこちらでご確認ください。
https://paiza.jp/works/mondai/etc/ternary?language_uid=php
※問題文抜粋※
5行の入力が与えられます。
・1行目では整数aが与えられます。aが0より大きいなら”plus”、そうでなければそのまま1行目で表示してください。
・2行目では文字列bが与えられます。bが”hoge”に一致するなら”yes”、そうでなければそのまま2行目で表示してください。
・3行目では文字列cが与えられます。cが10文字なら”ten”、そうでなければそのまま3行目で表示してください。
・4行目では文字列dが与えられます。dが文字”x”を含むなら”x”が最初に見つかった位置、そうでなければ”nothing”を4行目で表示してください。
・5行目では文字列eが与えられます。eが5文字なら”five”、そうでなければeの最初の1文字だけを5行目で表示してください。
実際に入力される値: 5 hoge abcdefghij zzxxyy abcd テストパターン2(回答結果時に使用される値): -7 fuga 9 aabbcc abcde
期待される出力: plus yes ten 2 a
解答コード: <?php $a = trim(fgets(STDIN)); //trim()で囲っておかないと改行スペースまで代入されて等価演算子が機能しません。 $b = trim(fgets(STDIN)); $c = trim(fgets(STDIN)); $d = trim(fgets(STDIN)); $e = trim(fgets(STDIN)); if($a > 0){ echo "plus\n"; } if("$b" === "hoge"){ echo "yes\n"; } if(mb_strlen("$c")===10){ echo "ten\n"; } $position=strpos("$d","x");//2が代入 if(!empty($position)) { echo "$position\n"; }else{ echo "nothing\n"; } if(mb_strlen("$e")===5){ echo "five\n"; }else{ echo substr("$e", 0, 1); //第1引数で対象文字列、第2引数で開始位置、第3引数で文字数指定 } ?>
関数調べまくりました。
正直知ってるか知らないかの世界。関数は1000個以上あるらしいので覚えるのは非常に困難ですね・・・
三項演算子は以前分かりにくかった印象があったのでif文で無難に書きました。
以下、参考にしたサイトのリンク集です。
・【PHP初心者向け】特定の文字列を含むかをチェックする方法
https://blog.codecamp.jp/programming-php-haracter-string
・【PHP入門】NULL判定をする方法まとめ!3つの関数の結果を比べる
https://www.sejuku.net/blog/22964
・phpでの文字列の切り出しのやり方【substr/mb_substr】
https://blog.codecamp.jp/php-substr
以上で正解と思いきや・・・

不正解でした・・・笑
問題見た限り出力内容も合ってそうなのですが・・・
少し格闘したのですが、原因がわからなかったので一旦ステイします(泣)
分かり次第更新します。
おわりに
引き続きランクBになれるよう頑張ります。
※追記※三項演算子版
三項演算子の方がシンプルに記述できるという記事を読んだので試してみました。
解答コード: <?php $a = trim(fgets(STDIN)); $b = trim(fgets(STDIN)); $c = trim(fgets(STDIN)); $d = trim(fgets(STDIN)); $e = trim(fgets(STDIN)); echo ($a > 0) ? "plus\n": "\n"; echo ("$b" === "hoge") ? "yes\n": "\n"; echo (mb_strlen("$c")===10) ? "ten\n": "\n"; $position = strpos("$d","x"); echo (!empty($position)) ? "$position\n": "nothing\n"; echo (mb_strlen("$e")===5) ? "five\n": substr("$e", 0, 1); ?>
めちゃくちゃシンプルになりました。
以前思っていた使いにくい=理解が甘かっただけのようです。。。
とても楽に書けました。うまく使い分けていこうと思います。
※こちらもif文のコード同様正解には至りませんでした。。。原因分からず。。。
関連リンク
Paiza スキルチェック見本問題(PHP編)まとめ ~ランクC相当~
https://chobimusic.com/paiza_skillcheck_c/
Paiza スキルチェック見本問題(PHP編)まとめ ~ランクD相当~
https://chobimusic.com/paiza_skillcheck_d/
Paiza 標準入力セット(PHP編)まとめ ~ランクD相当~
https://chobimusic.com/paiza_standard_input/
コメントを残す