某所でFizz Buzzとやらの話を見かける。
沙耶です。
そもそもFizz Buzzって何ぞや。ということで調べた。
え? 要するに万年カレンダー作れますか、って話よな、これ。
ていうかこんなんがプログラミングの技術保有かどうかの試験として有効になるの? 逆に言えば、こんなもんもかけないレベルのがプログラマです!って言いながら売りにくるってこと? マジで!?
とりあえず沙耶さんはプログラムとか基本嫌いですが。
bashで1分で書いたワンライナー。
for var in `seq 1 100` ; do [[ $(( ${var} % 15 )) -eq 0 ]] && echo “Fizz Buzz($var)” || ( [[ $(( ${var} % 5 )) -eq 0 ]] && echo “Buzz($var)” || ( [[ $(( ${var} % 3 )) -eq 0 ]] && echo “Fizz($var)” || echo $var ));done
こういうことよね。[[ ]] で書いてるけど -eqしか使ってないから[ ] で動くはずだから書き換えればshでも動くはずよ。剰余使わないで、となると除算して結果をかけて${var}から引けばよかろーもん。まあシェルの$(( ))でその計算書くのめんどくいからやらないけどさ。
万年カレンダーだと要するにうるう年をどう処理するか、ですね。
4年に一度うるう年はありますが、100で割り切れる年には存在しません。でも400で割り切れる年にはうるう年があります。
任意の年数の2月の日数を示せ。
という関数が書けるのか。という話。これができるなら、その関数は任意の月の日数を出力できる関数に書き換えられるよね。
まあいきなりphpでsystem (“date”)とか書き始めたらぶん殴っていいと思うけどwwww
if文は可読性自体は高いので、シェル芸だの三項演算子の連結だのやられたらむしろ点数低いのかもしれないwwwwww他人のことを考えない、という側面でwwwwww
#最初にwhile trueで無限ループ作って遊ぼうとしたのもマイナス点
まあ、問題文としてはいいのかもしれないね。適度にややこしくて、ロジカルに考えられるか、そして結果を誰がどう書いてもだいたい同じコードになる、という点では優れているのかもしれない。
ちなみに万年カレンダー用のファンクションをシェル芸ワンライナーでやると
function month_num { [ $2 -eq 2 ] && ( [ $(($1 % 400)) -eq 0 ] && echo “29” || ( [ $(($1 % 100)) -eq 0 ] && echo “28” || ( [ $(( $1 % 4 )) -eq 0 ] && echo “29” || echo “28” ) ) ) || ( [ $2 -eq 4 -o $2 -eq 6 -o $2 -eq 9 -o $2 -e
q 11 ] && echo “30” || echo “31”; ) }
こんなことになる。
$ month_num 1994 2
28
$ month_num 2000 2
29
みたいな。num=`month_num $year $month
`なんてやればあとはカレンダー出すだけだしね。
x年のy日は何曜日でしょうか。もファンクションにできてしまうので、この二つが作れれば万年カレンダーはあとは出力だけの問題になるわけです。
最も単純な解としては、month_numにx年のy月から順番にある年のある日、までの日数を地道に計算するというのは馬鹿の回答なんですが、まあ公式知らないと曜日は出しにくいかもね。
というわけで、曜日の定義をするファンクションにはツェラーの公式なんかを実装するのがスマートです。ユリウス暦のことはめんどくさいから気にしないでグレゴリオ暦の公式を実装すればいいだけです。
ツェラーの公式になってくると、数学関数使えないと不便なので、普通にexprやbcを呼んできて数学関数に突っ込みますが、それでもシェル芸で出せる内容ですね。
プログラム、プログラマ、というのはある言語体系でそれを使いこなす人たちなのですが、我々インフラ屋さんは多くの場合Perlやshellを多用します。Perlはともかく、shellは基本貧弱なので、いかによそのコマンドやスクリプトをうまく組み合わせるかとか、そんなことにばかり長けていきます。
その結果がいわゆるシェル芸とかawk芸とかsed芸になるのですね。
正直sed芸の正規表現に至ってはもはや分解していっても何がなんだかわからないレベルのものも多々ありますし、自分で書いた正規表現なのに三日後に見てまったくわからない。とかザラです。awkだってやり過ぎればもはや何がなんだかの世界でしかありませんが、そういうのを楽しいと思ってるのはある種の馬鹿なのかもしれません。
というかほんとうにPGで応募してきてこのFIZZ BUZZ程度をコード化できないやつとか来るのか…。魔窟やな、アプリエンジニアの世界。
インフラエンジニアはアプリに比べて派手さがないのでとても人気がありません。なおかつおっさんばかりなので女性がいないためさらに若い男が来ません。出会いがないので。
その結果がどうなるかというとおっさんだらけのしかもそいつら基本気持ち悪い会話しかしない。というさらに他人を寄せ付けない素敵空間の出来上がりです。
だれかインフラを救ってください。むさくるしくてキモイです。
たぶんときどき僕ら2400bpsの音響カプラが反応する音出しながら会話しててもおかしくないな、って思ってしまったりするときがあるんですが僕は生きてて大丈夫なんでしょうか。