見出し画像

独学の記録(プログラミング)1-26

今日は5時間くらい勉強しました。もはや勉強ではなく趣味です。先週からはそう思えるようなことしかやっていない気がします。先月勉強したことをもとにアウトプットするのも限界が来たような気がするのでそろそろインプットもやり直さないといけないかもしれない、と思いつつ…。

■今日の成果物

・昨日に引き続きPythonista3でナンプレ(数独)を自動で解いてくれるプログラムを作っていましたが、結果として今の僕には中級レベルまでしか解けないという残念な結果に終わりました。笑

今日解けた問題

・昨日は「数字の並びから絶対に一意の候補が見つかって、それを埋めると次の一意の候補が見つかる」という易しい問題だけでしたが、今日は「各マスのたて、よこ、9マスのグループの候補を比較して、その候補が一つしかない場合はその数値を埋める」という関数を追加しました。

これで全部解けるんじゃないか、と思ってテンション上がりながら難しい問題にもチャレンジしてみましたが、全く動かなかったので絶望に陥りました。甘すぎました。笑
・その後自分で難しい問題にチャレンジして難しい問題を解くための解決法を練っていましたが、ナンプレってこんなに奥が深かったっけ?と言うくらい奥が深く数時間使ってしまいました。
・とても悔しいですが、本来プログラミングを勉強しているのであってナンプレの勉強をしているわけではないので、今回の自分ではまだナンプレには勝てない、と潔く負けを認めて次のことをしていこうと思います。

・あと、僕はナンプレよりピクロス(お絵かきロジック?)派です。

・参考までに同じくプログラミングでナンプレを解いている人のプログラムの考え方を見ていたのですが、本格的なものは異常に長く読む気にもなれず、真似できそうなものは、解き方をプログラムするというより全ての数字を埋めて合っているか合っていないかを判定するというもので、自分が目指している解法とは違いました。
・もっと強くなってから再チャレンジしようと思います。笑

■今日の気づき

①新しいデータ構造を使えた

・今日も今まで自分でプログラムを書く中では使ったことがなかった、辞書や集合のデータ構造を使って関数を作ったりしていました。基礎を勉強している時は「文字列と数値とリストで十分なんじゃないか」と思っていたりもしましたが、最初の方に学ぶだけのこともあって(そもそもそんなデータ構造が準備されている時点で当たり前なんでしょうが)、すごい便利ですね。
・どうしても辞書の取り扱いや集合の計算は忘れがちでしたが、今回良い復習になったと思います

②綺麗にコードを書く難しさ

・現時点で、誰かと今書いているコードを共有したりする予定はありませんが、今回は綺麗にコードを書くことも意識してやっていました。というのも、仕事でエクセル関数を使っている時にも数ヶ月前に自分が作った表を見てチンプンカンプンになるのは嫌と言うほど味わっていたからです。
・今回は思いつきで作りたいものを決めて、思いつきでできることを考えて書いていったから、というのも大きい(そもそもあらかじめ計画する能力もない)とは思いますが、多分今回のコードも数ヶ月経ったら意味が分からなくなりそうな出来栄えでした。
どんな機能を持った関数が必要で、その関数はどんなデータを返してくるのか、というところまであらかじめ意識していないと綺麗には書けないんだな、と痛感した2日間でした。

■最後に

・次こそ仕事や私生活で役に立ちそうなものを作りたいです。笑
・今日もお読みいただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?