2017年2月27日月曜日

paizaスキルチェックCランクの正解率低い問題に挑戦

うーん、なかなか難しいですね

条件を一つ一つ満たしていって、「そろそろいいかなぁ」と思って提出すると結構残念な判定になります。


問題自体をブログに載せる事はできませんので、どんな困難があるのかということを漠然に書いてみたいと思います(例なので色字だけ読んで頂ければ大丈夫です)


例えば
o2i35y28957234h2348ry28rwhr28
fj30497tujf084570956
w3oj42094w6
j2308929754urj8fwj35ru

アルファベットと数字の羅列した文字列が入力されるとして、それぞれ数字部分を選別し、奇数よりも偶数の数字が多ければTrue,同じならEqual,小さければFalseと出力する
(1行目は偶数が5個、奇数が1個なのでFalse,
 2行目は偶数が1個、奇数が1個なのでEqual)

という問題です。

このとき手順として

  • 数字とアルファベットを分ける
  • リストなどでそれぞれの数字を管理する
  • それぞれの数字が奇数か偶数か判定する
  • 偶数or奇数の数字の個数を判定する
  • 偶数が多ければTrue,同じならEqual、小さければFalseを出力


といったいろいろ面倒な手続きを踏まないといけないわけです

初心者の場合、いろんな変数を出したり場合分けをしていくうちに頭の中がごちゃごちゃになってしまい、だんだんちょっと書き直して実行→ちょっと書き直して実行を繰り返してしまいます。

Pさん(仮)は試行錯誤の結果
True
Equal
True
True

と、なんとか問題例の解答に適したコードができたので、そのコードを提出しました



するとどうでしょう、答案は間違いだらけ

なぜPさんは問題例の解答に適したコードを提出したのに間違いだらけだったのでしょうか






------

Pさんの解答を改めて見てみましょう

True
Equal
True
True


解答のなかに"False"がないですね、つまりPさんはFalseの条件判定をどこかで間違えていた可能性が高いです。


例題では正解しても、提出したコードのチェックは条件を満たすさまざまな値を代入してチェックします。

したがって例題とは異なる文字列が入力されたとき、Pさんのコードではそのすべての条件を満たすことはできなかったということになります。


------


Cランクの正答率が低い問題は、おおよそ”さまざまな条件を仮定したときに正確に動くプログラム”というのが求められます。慣れないうちは問題文をしっかり読み、すべての条件に当てはめられるプログラムを作成できるかどうかが重要になるかと思います。プログラミング速度はその後。


当然、1問を解くだけでも時間のかかる作業になりますが、このような正確性の練習の積み重ねがプログラミングの上達に重要だと信じております。



0 件のコメント:

コメントを投稿