にっちもさっちもいかなくなって、AOJ(Aizu Online Judge)始めた アルゴリズム初心者

アルゴリズムやりたい気分は突然に。

 

Leetcodeを模したアプリを解いていたのだけど、基礎力があまりに不足していたのだろう。いずれそうなる日が来ることは遅かれ早かれ来ることは当然だった。その日が今日訪れた。毎日地道にコードを書き続けていれば、実力も伴ってくるだろうと希望に満ちた世界はある日突然終わりを告げてしまったのだ。

 

そして新しい日常、Aizu Online Judgeと戦う日が始まる。

思えば、自分の実力を過信していたのだろう。少しでもレベルの高いものをと思い写経してはコンパイルして動作確認。

「動かすことによって成功体験を積み上げ、ある日突然アルゴリズムを自在に操るスーパープログラマーになれる!」のようなことを思い描いて始めた取り組みはわずか3日目の挑戦で折れてしまった。しかしこのまま死ぬわけにはいかない。倒れるときは前のめりに!

 

なんて大袈裟な話ではないのだ。私の問題解決能力が低すぎる現状、選択肢を誤ればそれだけ時間が失われてしまう。急がば回れ

ということで、おとなしくアルゴリズムを基礎からやっていきますと改めて宣言。

 

参考にした動画など保存するとともに、上達した暁には、また過去の記事を読みながら「ワシにもそんな頃があったのじゃよ、ふぉふぉふぉ」と謎の老人プレーをどうしても来年やりたくなったので、とにかく方法を変えて上達していくのだ。

 

AOJまだ7問目

問題:3つの数字を取得して、小さい順に並び替えて出力せよ。

リンク 

Aizu Online Judge:Sorting three numbers

なーんだ、簡単じゃん!と思ったが、意外とやってみると躓きそうになった。

私のレベルはまだこの程度なのだろう。

 

自分のコード

f:id:aoshis:20191101051005p:plain

今日の積み上げ

Math.maxは引数を2つしか使わないのだけど、入れ子にすることで3つ以上の数を比べることができるようだ。グーグル調べ

 

この書き方だと、4つ以上になるとどんどん煩雑になっていくため、実用性皆無なのだ。ただ書けばいいものではないと知りつつも、これも実力のうちと強く認識しよう。

 

AOJのヒント

1番目と2番目の数を比べて、交換するかどうか

2番目と3番目の数を比べて、交換するかどうか

1番目と2番目の数を比べて、交換するかどうか

 

入れ替えるとすると配列を使うのかな?

そう思って解答例を巡回していると、そうなんだね。配列もOKなのか。そりゃそうだろう。いい解答があったので貼り付けておく

f:id:aoshis:20191101052504p:plain

解答例

AIZU ONLINE JUDGE: Code Review

 

普通にソート使ってるし、そうなのね、それでいいのな。

 

 

総評:

簡単なものから始めてみると、まだ頭を使えばコンパイルが通ることがよくわかる。アルゴリズムアプリ解いていて、半分はコンパイル通らなかったことを考えると大きな前進なのである。

時間はとにかくかかるが、少しずつ前進していけそうな気がした。

 

次に参考にした動画や教材などをメモしておく。