• 雑な生き方を丁寧に記すブログ

アルゴリズム1

歯、激痛。

歯、激痛(はげいた)!!

歯っていうかむしろ顎?さらに顎からこめかみを上がって頭痛くらいまである。もはや給料が出てからとか悠長なこと言ってられる場合じゃないような気がしてきた。虫歯は若年性アルツハイマーの原因になるとも聞くし、やっぱり脳に近い部分だけあって甘く見るのはいけない。明日もひどかったら取り敢えず歯医者行ってみるか・・・。イブプロフェンの効きも早速鈍くなってきたし・・・。

さて、研修の初期にアルゴリズムのトレーニングがあり、簡単な演習問題に何個か取り組んだんだが、その中で面白いものがあったので紹介したい。

ある年が、うるう年か平年かを判定するプログラムを作る。っていう問題なんだけど、皆様、うるう年の定義って知ってます?数式で表せる?ちなみに俺はこの問題のために調べて初めて知った。

まぁ、天文学的な理屈は置いておくとして、うるう年の条件っていうのは
①  西暦が4で割り切れる
②  ただし100で割り切れないこと
③  ただし100で割り切れても400で割り切れればうるう年

ちょっと説明の仕方が下手で申し訳ないけど、要は単純に4年に1度じゃないってこと。今年2020年は4で割り切れて100で割り切れないからうるう年っす。シドニー五輪の時の2000年はどうだったか?4で割り切れて100でも割り切れるけど、400でも割り切れるからうるう年だった。じゃあ、2100年は?4でも100でも割り切れるが、400で割り切れない。ということで、2100年はうるう年ではない!80年後、玄孫に教えてやってくれ。俺はこの世にいないが。

まぁ、それを元にアルゴリズムのフローチャートを作ってみるとこんな感じ。変数yearに数値xを代入して、それがうるう年なら1を、平年なら0を返す設定。

ちなみに「x%4」っていうのは「xを4で割った時の余り」という意味だす。こう図に書くと比較的分かりやすい?で、コレを元に実際にプログラミングしてみる。会社の研修ではPL/SQLだったけど、残念ながら私用のMacにはオラクル環境がないので、Javaでやります。まぁ、多少文法が違うだけでやることは変わらん。

オレンジの枠で囲ったところが、フローチャートで表した部分。変数yearを引数で受け取って、1か0を返すleepYearTestメソッドを作ってみた。後半は実際にそのメソッドを呼び出して1950年から2100年までのそれぞれをジャッジしてるだけ。

一応結果のコンソールの一部を載せるとこんな感じ

こう考えると、100の倍数でうるう年ってのは、400年に一度しかこないわけだから、俺らって結構貴重な体験してるのね。

こういうのってプログラマとして基礎中の基礎ではあるけど、頭の体操になるし息抜きになって良い。また面白そうなのがあったら書きたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です