Help us understand the problem. What are the problem?
class FizzBuzz def self.to_proc ->n{ case 0 when n % 15 then :FizzBuzz when n % 3 then :Fizz when n % 5 then :Buzz else n end } end end puts (1..100).map(&FizzBuzz) # => [1, 2, :Fizz, 4, :Buzz, :Fizz, 7, 8, :Fizz, :Buzz, 11, :Fizz, 13, 14, :FizzBuzz, 16, 17, :Fizz, 19, :Buzz, :Fizz, 22, 23, :Fizz, :Buzz, 26, :Fizz, 28, 29, :FizzBuzz, 31, 32, :Fizz, 34, :Buzz, :Fizz, 37, 38, :Fizz, :Buzz, 41, :Fizz
eval [<<"".chomp.tr(" - ", "0-9a-f")].pack("H*") 1 2 Fizz 4 Buzz Fizz 7 *** しょうりゃく *** 94 Buzz Fizz 97 98 Fizz Buzz ごく普通のFizzBuzzです。 ただし、上のソースをコピペしても絶対に動きません。 コピペじゃ無理なのでGitHubにアップロードしました。 下のリンクから右クリック等で ファイルを直接ダウンロードして 実行してください。 (下のリンクからでも、コピペじゃたぶん無理です) あと環境によっても動かないかもしれません。 以下の環境で動作確認しました。 Mac OS X 10.10.2 Ruby 2.2.0p0 説明 予想付くかもですが、空白の部分にソースを書き込んであります。 見えてる部分はヒアドキュメント<<""で空行までの文字列(空白)を取り出し、元の文字
最近不適切にFizzBuzzをやるのが楽しく、常にFizzBuzzのことばかり考えている気がします。これが"恋"というものなのでしょうか。 というわけなので、最近書いたFizzBuzzをいくつか紹介したいと思います。 basic.rb 基本パターン (1..100).each do |n| puts case 0 when n % 15 then :FizzBuzz when n % 3 then :Fizz when n % 5 then :Buzz else n end end いいですね。ポイントはcaseの使い方です。caseは、caseに渡したオブジェクトと、各when節の評価結果を===メソッドで比較します。例えばFizzBuzzに該当するかの判定部分は0 === n % 15といった処理が走ることになるわけですね。 tap.rb tap with breakの活用
module Kernel define_method '0', -> _, __ { %w`Fizz Buzz FizzBuzz`.[] _ } end def method_missing _, __ = nil, ___ = nil v, i = [3,5,15].map{|__|_.to_s.to_i % __}.each_with_index.sort_by{|_|[_[0],_[1]*-1]}.first return __ ? ___ : send(v.to_s, i, _) end (1..100).map(&:to_s).map(&method(:send)).map(&:to_s).map(&method(:puts)) おわり感じ感じ
FizzBuzz問題は有名だから、少しプログラムをかじったことがあれば名前くらいは知ってるよね。それを会社の10人のプログラマにテストしてみたら、あまりできがよくなかったという話があるよ。 FizzBuzz問題を使って社内プログラミングコンテストを開催してみた - ITは芸術だ 確かにFizzBuzz問題は一見単純だから、誰でも簡単に解けると思われがちだけど、時間制限付きの抜き打ちテストというかたちでだされたら、頭が混乱して僕もどんな結果になるか心配だよ。 だから上司の嫌がらせで恥をかかされないように、いまからしっかりと予習しておくよ:) 問題の分割 通常1つの問題は複数の小さな問題でできているんだ。だから与えられた問題を読んだとき最初にすべきことは、それを複数の小さな問題に切り分けることだよ。 早速FizzBuzz問題を小さな問題に切り分けてみよう。 僕はFizzBuzz問題は次のような
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く