たったnつの冴えたやり方

Posted on

paizaさんが提供しているプログラミングゲームをちょこちょこ進めてます。
先週の時点では一番下の「D」ランク問題を見てもさっぱりわからず、どこから手を付けて良いのか検討もつかないという有様でしたが、やっと「こうすれば行けるかな?」だめでした「じゃあこすればいいかな」だめでしたx4回程繰り返して正解にたどり着く、みたいなナメクジ並の速度で進められるようになってきました。
わかる人が見ればなんでわからないのかがわからない、わからない人は何がわからないのかもわからない、っていう状況のわからない側に立って初めてわかることもある。

https://paiza.jp/botchi/より
問題例:
電波でデータ通信するプログラムが壊れてしまっており、あなたはそれを直そうとしています。
n回の通信をしたとき、受信した各データ各電波強度 d_i が与えられます。各電波強度 d_i は 0 から 10 の整数で表され、 5 以下では通信に失敗します。
n 回の通信のうち通信に成功した回数を出力してください。

入力:
6
9 9 8 3 1 9

期待される出力:
4

なるほど。1個めが通信回数、2個めが通信強度、6以上が何個あればいいのか数えればいいのね。
いつも「以下」はその数が含まれるのかどうか悩む・・・

とりあえず調べたところ、文字列を配列に変換する関数があるらしいのでそれで2個めの文字列を配列に。
その配列に6以上が何個あれば数えればいいのでは、と思ったんですが、なんか調べてもそれに当てはまるような関数がよくわからん。
array_searchだと見つかったら最初のキーを返してくるだけだし、array_count_valuesもなんか出力フォーマットがちょと違うような。。
しかもそれだと通信回数使ってないから出題側の想定から外れてる気がする。

通信回数でループを作って、、配列を1個ずつ順番で見て、、成功だったら 成功回数に+1していって、、
最終的に成功回数を出力、、でどうですかね?

$qty = fgets(STDIN);
$str = fgets(STDIN);
$str_array = explode (" ",$str);
  for ($i=0;$i<=$qty;$i++) {
    if ($str_array[$i] > 5) {
$result++;
}
}
echo $result;

こんな感じ?
で提出したら

やったー

ここまでの道のりがだいたい1時間ぐらいかかるw
どんだけ納期あっても間に合わなさそうww

実は中学の頃の将来の夢が「プログラマー」だったけどそりゃ実現しない訳だ。
数学の証明問題とかがほんと苦手で苦痛だったし。
マラソンと数学どっちが嫌いかって言われたら今なら迷いなくマラソン走るけど当時ならどうだったかなぁ。


コメントを残す

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