🎉

コロナでダウンした話とpaiza1回目

2023/12/21に公開

学習初期からコロナで躓く。

3-4日程寝込んでただろうか。
とはいっても何もしてなかった訳ではなく、講義動画みたいなのをずーっとみてた。
多少体が元気な時は作った見たかったミニアプリに着手して、githubにあげてみたり。

これでも勉強になると思ってたんだけど、アプリの部分はともかく動画勉強は見終わって少ししたら内容のほとんどを忘れてたりして、アウトプットって大事だと気付かされる。

なので今日からはpaizaで今自分にできる最高レベルはDランクなので
Dランクの問題を必ず5問毎日説いて それに使った技術をzennに技術記事として投稿していこうと思う。(問題の直接的な外部公開は出来ないらしいので、うまいこと)
zennに投稿できるのは数日に1回かもしれないけど、5問は毎日。

そんな決意表明のための記事。

ということで早速今日のpaiza

前回とは違って "99 89" みたいなのを標準入力で渡されて この2個使って条件判定しろみたいな問題

まずはこの貰ってきた数列を分解しなきゃいけない

てことで使ったのがexplode関数
標準入力で渡された値"99 89"が$defaultに入っていると仮定して

explode("区切り文字","対象の文字列","最大要素数(省略可)")

$array = explode(" ","$default")

これで$arrayの中身が "99"と"89"に分かれて格納される

後に条件判定するときにstr型では都合が悪そうだったので

$scoreA = (int)$array[0]
$scoreB = (int)$array[1]

これで各要素をint型として変数に入れて
if文で条件判定してやって問題の条件通りに出力して終わり。

2問目

標準入力を分解して数値化するとこまでは一緒

1問目はそれをごく簡単な条件文に入れるだけだったんだけど、次はもうちょっと複雑な条件にあてはめろってやつ

条件Aと条件Bがあって、条件Aに当てはまる時はA、条件Bに当てはまる時はB、両方に当てはまるならAB 全部に当てはまらなければXを表示するみたいな問題

どこまで書いちゃいけないか分からないので濁した類似問題を作る

とあるお店が開店してから先着100人の中である条件を満たした来場者にプレゼントを渡したい
3の倍数番目に来場した客には商品Aを
5の倍数番目に来場した客には商品Bを
3の倍数でなおかつ5の倍数番目に来場した客には商品Cを
何れにも該当しない客には商品Dを渡したい
1-100番目の客までそれぞれどの商品を渡せばいいか出力しろ。

回答として

for($i=0, $i =< 100, $i++){
	if($i %3 === 0 && $i %5 === 0){
		echo "商品C";
		echo "\n";
	}elseif ($i %3 === 0){
		echo "商品A";
		echo "\n";
	}elseif ($i %5 === 0){
		echo "商品B";
		echo "\n";
	}else{
		echo "商品D";
		echo "\n";
}

%は数値同士を割ってでた余りなので $i %3 === 0 ってのは3の倍数であることも示してる
&&は"尚且つ"みたいな意味だから一番最初の条件式で3の倍数でなおかつ5の倍数を指定して
そこから3の倍数、5の倍数、該当無しって下って計算していく。

ちなみに商品Cに該当する客を一番最初に割り出す意味は、プログラムとは上から実行されるという基本原則があるためである。
例えば15番目の来場客は3の倍数でもあり5の倍数でもあるので商品Cを渡さなければ生らないが、商品Aの判別式が最初にあると3の倍数でもあるために、商品Aという出力になってしまう。

ということで2問目終わり。

3,4問目は1問目とほぼ同じなので割愛

5問目

絶対値に関する問題
これはphp側ですでに用意されている関数で求めることができるので
変数scoreに答えを代入、変数defaultに元の値が入っている場合

$score = abs($default);

ehco $score

これで終わり。
int型じゃない場合はint型に直すのを忘れないように。

Discussion