paiza問題でTypeScriptを学んでみた
はじめに
最近TypeScript,Reactなどを勉強しています。この記事では初心者がTypeScriptの学習にpaiza問題を使用した結果、思ったことや良かったことなどを紹介したいと思います。
やったこと
paiza問題集を解く、スキルチェック問題D問題、C問題を全て解く
問題集やスキルチェックをTypeScriptで解くには
現在のPaizaでは使用言語でTypeScriptを選ぶことはできませんが、JavaScriptを選べるのでこちらの記事を参考にして https://zenn.dev/mediysato/articles/821588a75be31e
TypeScriptをJavaScriptへ変換し解答していました。
paiza問題集で練習
標準入出力メニューから算術演算、論理演算、配列、条件分岐、ループなど基本的なことの学習から始めました。
Paiza上でコードを提出したら複数のテストケースに対してOKかNGの判定が出るので、正しい内容を提出できていることを確認しながら学習を進めることができました。
学習初期はOKの判定が厳しくない?と途中で思うこともあって、最初に苦労した点は「スペース」や「改行」が期待結果と異なる場合にNGとなってしまうところです。
例えばループ処理を書いた時に期待結果が
1 2 3 4 5
などの場合に5の後ろにスペースが入っているとNGになります。
if文を追加して処理を制御したり、for文を途中でやめるなどの処理が必要になります。
問題に詰まったときの解決方法
問題集では解説があるので、それを読んで解決できれば良いのですが、解説の実装例ではTypeScriptはもちろんですが、JavaScriptの解答がなく、C++やPython3の解答例がある場合が多くあります。
TypeScriptではどうやって書けばいいんだろうと悩み続けても仕方ないのでChatGPTを使って解決することが多くありました。
-
やりたいことを聞く
TypeScript 配列を昇順ソートする方法を教えて
-
プログラムの意味を聞く
こうすれば問題が解けるけど、なんとなく理解できていない時はコードを貼り付けて、解説を依頼したら結構丁寧に教えてくれるので助かります。 -
リファクタリングしてもらう
問題は解けたけど、無駄なことをしていたり、絶対にもっと良い記述方法があると思った時には自分が書いたコードを貼り付けて、改善してもらいました。
var result = "";
for (i = 0; i < lines[0].length; i++) {
if (lines[0].charAt(i) == lines[0].charAt(i).toUpperCase()) {
result += lines[0].charAt(i).toLowerCase();
} else {
result += lines[0].charAt(i).toUpperCase();
}
}
console.log(result);
ChatGPTでリファクタリング
var inputString = lines[0];
var swappedString = swapCase(inputString);
console.log(swappedString);
function swapCase(inputString) {
return inputString
.split('')
.map(function (char) { return char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase(); })
.join('');
このリファクタリングしてもらう→その結果がわからなかったら解説してもらう
これが学習を早めることに重要な役割をしていたと感じています。
知らなかった標準ライブラリの使い方を学べたり、この問題に特化した解き方を学ぶことができました。
スキルチェックD問題C問題を全部やってみた
2ヶ月ぐらいでDランク253問、Cランク126問を解いてみました。Dランクは1分で解けるような問題も含まれていますが、平均解答時間が10分近い問題も中にはありました。
D問題をたくさん解くと基本的な処理に迷わなくなる。
やはり繰り返し問題を解くことで、悩まずに解けるようになっていくことを実感しました。
初期学習の練習にはいいと思います。最初はこの変数はstringなのかintegerなのかをあまり考えられておらず、思っていた計算結果にならないことが多くありました。
簡単だと思ったら間違えることもあった、問題文をよく読んでいないせいで入力値の範囲を考えていなかったり、ちょっとした勘違いなどもありました。これも良い練習でした。間違えたらレート下がるのがちょっと辛かった。
Cランク問題の方は10分で解けるものもあれば、30分〜1時間かかる問題もあるので結構気合い入れてやらないと全部解くのは厳しいです。
今回は短期間に集中して解きましたが、じっくり時間をかけて解いた方が良い問題もあったので、解答を間違えてしまった問題はもう一度解いたりしています。
Cランク問題を正確に理解し、プログラムで実装するのは練習が必要だと実感しました。Dランク問題とは違い、文章を読み解く力や、ロジックを組み立てる力が必要になってきます。
スキルチェック問題は生成系AIや他者から得た解答コード、ヒントを利用することを禁止されているので注意が必要です。
まとめ
paiza問題集をやってよかった。実際に手を動かしながら学習を進めることができ、paizaにも慣れることができました。
D問題を全部やる意味はあった。最初の方が簡単な問題が多いが、問題を読む→解答する流れを繰り返すことで初期学習に定着になった。D問題の終盤は問題を読み間違えたり、綺麗な解き方ができなかった問題もあったので、考え方や解き方を学ぶきっかけとなりました。
ChatGPTの活用をもっと早い段階で積極的に行えばよかった。リファクタリングしてもらったり、解説してもらうのは初期学習の効率UPに繋がります。
Discussion