We are built as gene machines and cultured as meme machines,
but we have the power to turn against our creators.
We, alone on earth,
can rebel against the tyranny of the selfish replicators.
- Richard Dawkins "Selfish Gene"
Mar 15(Sat), 2008
RubyでFizzBuzzかけたよ!+いろいろ考えてみた
404 Blog Not Found:やる気ってどこでやる気?
経由で見つけた↓の記事。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
どうしてプログラマに・・・プログラムが書けないのか?
こんなこと書いてて怖かったので、RubyでFizzBuzz書いてみた。Moduloが「%」であることを忘れてて所要時間4分20秒。かかりすぎ…。
for i in 1..100 do if i % 3 == 0 if i % 5 == 0 puts "FizzBuzz" end puts "Fizz" elsif i % 5 == 0 puts "Buzz" else puts i end end
というか適当すぎるな。あまりにアレなのでもう少し考えて、Kiyoyaに倣って(コードを見たことはないけど)三項演算子を使って一行で書いてみた。
for i in 1..100 do i % 15 == 0 ? puts "FizzBuzz" : i % 3 == 0 ? puts "Fizz" : i % 5 == 0 ? puts "Buzz" : puts i ) end
としたら
parse error, unexpected tSTRING_BEG, expecting kDO or '{' or '('
というエラーがでる??そこで
for i in 1..100 do puts( i % 15 == 0 ? "FizzBuzz" : i % 3 == 0 ? "Fizz" : i % 5 == 0 ? "Buzz" : i ) end
このようにしたところ、うまく動作した。あえて一行で書いたけど、
三項演算子を使うときは、条件はどんなに短くても必ずカッコで囲って、先頭に持ってくるようにしている。
条件をカッコで囲うだけでも、かなり読みやすくなる気がする。
最速インターフェース研究会 :: 三項演算子の正しい書き方ってあるのだろうか
このような記述を見つけたので適用してみると
for i in 1..100 do puts((i % 15 == 0) ? "FizzBuzz" : (i % 3 == 0 ) ? "Fizz" : (i % 5 == 0 ) ? "Buzz" : i) end
こうなろうか。うーん…それにしてもputs入れちゃだめなのか。三項演算子は純粋にIF文と等しい意味ではないようだ。不思議だったのでProgramming Ruby: The Pragmatic Programmer's Guideを調べてみた。
... for the C fans out there, Ruby also supports the C-style conditional expression.
cost = song.duration > 180 ? 0.35 : 0.25A conditional expression returns the value of either the expression before or the expression after the colon, depending on whether the boolean expression before the question mark evaluates to true or false. In this state, if the song duration is greater than three minutes, the expression returns 0.35. For shorter songs, it returns 0.25. Whatever the result, it is then assigned to cost.
from Programming Ruby: The Pragmatic Programmer's Guide, p.97
確かに、puts "hogehoge"という文章はcostという変数に代入したりできない。"returns"...「値を返す」ってそういう意味ですか。正式な用語ではこの規定をどう説明すればいいのだろう。
そうだ、一行で書いたFizzBuzzは詰めに詰めて計76文字でした。これ、もっと短くできる人居たら教えてくれませんか?
for i in 1..100 do puts(i%15==0?"FizzBuzz":i%3==0?"Fizz":i%5==0?"Buzz":i)end
Programming Ruby: The Pragmatic Programmer's Guide
- 作者: David Thomas,Chad Fowler,Andrew Hunt
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2004/10/15
- メディア: ペーパーバック
- クリック: 7回
- この商品を含むブログ (15件) を見る
45分以内にソフトバンクBBを解約してイー・モバイルに乗り換える
殆ど迷いなし、でした。
快適モバイルオフィスをゲット - @keitabando のブログ
id:keitabandoさんのエントリを見てからずっとうずうずしていたが、卒研発表が終わったので早速僕もソフトバンクBB→イーモバイルに乗り換えた。
故郷である香川のサービスエリアはいじめとしか思えない状況だが、東京ならほぼどこでもモバイルが使えそうだ。今年は就活で外に出ることが多いと思われるため、移動中もPCオンライン状態を維持できるメリットは大きい。
なるべく時間をかけたくなかったので電話で手続き
イーモバイル契約
電話番号0120-736-157にかけて2番→4番をプッシュ。新規契約。契約の流れを説明されたり、住所氏名、クレカ番号、4ケタの暗証番号*1を伝えて19分。
電話加入なしのタイプで、データカード+ADSLのセット。キャンペーン中で、初期費用・工事費無しのうえ永久1980円引き…つまり
6480 - 1980 = 4500円
今と変わらない料金でモバイル環境が手にはいる。と思ったらモバイル端末が1万かかる…しょうがないか。研究室の他の人々のように始発の電車に乗って極寒の地に飛び堅い雪の上で雨に打たれつつ無駄なスピード感を味わって身体を痛める行為に4万円払うという愚行を犯すよりは賢明な資金の使い方だ*2。
ソフトバンクBB(Yahoo BB)の解約
電話番号0366885120にかけて、7番→6番をプッシュ。
本人確認の後、解約理由など伝える。ソフトバンクはフリーダイアルではないので通話は短くしたいのに、相手は空気を読まず別プランのおすすめなどしてきた。いいってば。17分。
ヤフーBBの時代から3年間使ってきたユーザーとして、今後の改善を期待して不満を述べる。
- 待たされる。
巨大な会社だから仕方ない面もあるが、電話が繋がらないし繋がっても少々お待ちくださいの少々が長い。カスタマーサポートは携帯からの電話が有料で、後述の引越手続きで何度もやりとりするうちに通話料が総計2000円くらいに達した。泣ける。
- 手際悪い。
引越後のごたごたが印象悪かった。大家さんに確認しますと言って1週間くらい連絡無かったり、回線がつながらず「モデムが悪いみたいなので送り返してください。交換します」と最新のモデムを送ってきたかと思えばそれでも繋がらず結局また元のに戻してケーブルがうんたらなどとやっていたら結局引っ越してから2ヶ月弱かかり、その間も回線の料金が発生。なんとも。
ちょっとあんまりなので一ヶ月分サービスしてくれませんかとゴネてみたがダメでした。
まぁこれらの不備がイーモバイルで出てこないという保証はないのだが。
ともかく
契約はまだ完了してないが、後は流れにまかせて手続きを忘れないように進めていくだけ。どうなることやら。
今後やること
ソフトバンクBB(元ヤフーBB)
手続き書がソフトバンクBB側に到着した月が解約月となり、解約月いっぱいまでの料金が発生。
イー・モバイル
購入: 10人 クリック: 1,066回



