Hatena::ブログ(Diary)

ミームの死骸を待ちながら このページをアンテナに追加 RSSフィード

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"

Add to Google Subscribe with livedoor Reader はてなRSSに追加

Mar 15(Sat), 2008

RubyでFizzBuzzかけたよ!+いろいろ考えてみた

404 Blog Not Found:やる気ってどこでやる気?

経由で見つけた↓の記事。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

どうしてプログラマに・・・プログラムが書けないのか?

こんなこと書いてて怖かったので、RubyFizzBuzz書いてみた。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.25

A 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

Programming Ruby: The Pragmatic Programmer's Guide

45分以内にソフトバンクBBを解約してイー・モバイルに乗り換える


殆ど迷いなし、でした。

イーモバイル契約ヤフーBB解約。

よろしく、イーモバイルありがとうソフトバンク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側に到着した月が解約月となり、解約月いっぱいまでの料金が発生。



イー・モバイル

*1:口頭で伝えるのはどうよと思ったが、後でWebから変更できるらしい

*2:べ、別にうらやましくないんだからね!><

*3:手続き書とは別の宛先らしい

*4:今回は2年契約プランだが、1年契約だと端末が3万くらいするらしい