今週のお題「うるう年」
プログラミングの練習問題に「うるう年」
私が学生のころ、プログラミングの課題がでました。
それが「入力された年がうるう年か判断せよ」というものです。
今から考えると、この課題は典型的なプログラミングの課題です。
そしてこの課題で考え方の細分化や切り分け方を実感でき、今でも問題点の解決方法に役立っています。
プログラミングから学んだのは「物事は小さな事の重なり」
うるう年の判定条件は
- 4の倍数の年であること
- 4の倍数の年かつ100の倍数となる年のうち、400で割り切れない年は平年である
この二つの条件で、初めてうるう年となります。
例えば2004年。
2004は4で割り切れます。
2004は100の倍数ではないので、そのままうるう年となります。
2100年は4で割り切れます。
そして100の倍数ですが、400で割り切れません。
そのため2100年は平年です。
入力された年が条件に合うかどうか、それぞれ判断していきます。
どんなプログラミングも、1つ1つの条件判断はとても単純なものです。
それがいくつも重なって結果を出します。
一見どんなに難しそうなものでも、どんどん細分化していくとこんな感じになります。
物事はとても小さな事の積みかさねであると、よく実感します。
「何が問題か」を探り解決するのは単純な考え方
悩み事で解決方法がわからなくなる、という経験をしたことはないでしょうか。
私はそういう時、細分化して考えるようにしています。
例えばダイエットを例にあげてみます。
体重を減らしたいなら、まずカロリーを減らすか運動をするようにします。
でも年末年始は飲み食いする機会が多くなり生活も不規則になりがちです。
それならば、運動量を増やそうと考えます。
では身近にできる運動は?と考えるとストレッチや歩く事が一番簡単です。
では歩くことにしよう。
一駅は時間がないから無理だし現実的ではないので、駅は階段を使うようにしよう。
これで体重をコントロールしよう、と結論を出します。
という風に、連想ゲームのように考えていきます。
物事は意外と単純な事の連続で成り立っているので、解決方法も単純にYES/NOの判断で考えていくと見つけやすくなります。
複雑な事ほど、単純化して客観的にみる癖をつける
勿論世の中にある問題は、そんな単純ですぐに解決できるものばかりではありません。
何通りもの問題パターン、重なる条件分岐、避けたい結果を避けるための条件、最悪な結果になったときの対処法。
これらを同時に考えなければいけない事も、あります。
そんな時程、自体を単純化して客観的に見ることが大切だと思います。
感情的にとらわれず、事実のみ、理想とする結論を抜き出して物事を見ます。
メモ帳やノート、落書き帳などに書き出してみるのも助けになります。
複雑そうに見えても、単純さが重なっただけの事。
時間がかかるかもしれませんが、その方がすっきりと出口が見えますよ。
感情的に物事を進めるのは、どうしてもリスクが大きくなりがちです。
決して悪い事ではないのですが、私は避けて考えます。
「嫌な事」をしなきゃいけない事もあるのですが、その先にあることがゴールなので仕方がないと割り切るのも大切だなと思います。