お察しください 。
curl https://raw.github.com/gist/3897882/101.rb | ruby | lv
うさみさんが書きました。楽しんで書きました。 NYSL でどうぞ。
# -*- coding: utf-8 -*- | |
# | |
# author: USAMI Kenta <[email protected]> | |
# license: NYSL 0.9982 | |
# | |
puts %w( | |
字佐美健太 | |
-忠吉さん,_tadsan | |
--Zonu.EXE | |
-平成元年 | |
--ゆとり | |
---素人 | |
----アマチュア | |
-----にわか | |
------意識高い | |
---≠開発者 | |
----プログラミング言語趣味者 | |
----FizzBuzz | |
-SNS | |
--pixiv:105589 | |
---絵心なし | |
--slideshare:tadsan | |
--github:zonuexe | |
--blog:d.hatena.ne.jp/zonu_exe | |
-北海道砂川市 | |
--北海道滝川高校 | |
---学校新聞 | |
---図書館 | |
--北海道工業大学_工学部_情報ネットワーク工学科 | |
---留年 | |
---卒業延期 | |
-献血趣味 | |
-WILLCOM | |
--京ぽなー | |
---070-5601-3604 | |
---AH-K3001V_(京ぽん) | |
---WX310K_(京ぽん2) | |
----Opera | |
-----JavaScript | |
------bookmarklet | |
--Windows_Mobile | |
---Advanced_W-ZERO3 | |
---Hybrid_W-ZERO3 | |
--WILLCOM_D4 | |
---Windows_7 | |
-アニメソング | |
--foobar2000 | |
---TAK | |
----16237_tracks | |
----6wk_2d_9:42:20 | |
---AAC | |
---DAP:_Creative_ZEN_Style | |
---CUE_Sheets | |
----秀丸 | |
-VOCALOID聴き専 | |
--ラマーズP | |
-テト親 | |
-假名遣 | |
-SKKer | |
--AquaSKK | |
--SKK日本語入力FEP | |
--ibus-skk | |
--npiiii(正字正かなづかひ用假名漢字變換辭書)_-_自作 | |
-やる夫スレ読み専 | |
-Browser | |
--Google_Chrome_(dev_channel) | |
--w3m | |
-HTML_Strictor | |
--ISO-HTML,_CSS_2 | |
---デザインセンスなし | |
--HTML_5 | |
-プログラミング | |
--FizzBuzz | |
-PC:MacBook_Pro | |
-OS | |
--Ubuntu_12.04 | |
--OS_X_v10.8_Mountain_Lion | |
---EDITOR=emacs | |
---PAGER='lv_-c' | |
---SHELL=zsh | |
-プログラミング言語 | |
--シェルスクリプト(sh,_bash,_zsh) | |
--Rubyist | |
---{:moe_=>_['method_chain',_'lambda'], | |
---_:nae_=>_['end',_'def']} | |
--Python_user | |
---{'moe':_['List_comprehension',_'lambda',_'conditional_operator'], | |
---_'nae':_['Method',_'Unicode(UCS)']} | |
--勉強中 | |
---Haskell | |
---F#,_OCaml | |
---lambda_calculus | |
---Scheme_(SICP) | |
---Emacs_Lisp | |
-わかること:_言語仕様 | |
-足りないもの:_開発経験,_開発技法(TDDなど),_設計技法(デザインパターン),_アルゴリズム | |
-勉強会/コミュニティ | |
--Ruby札幌 | |
---札幌Ruby会議2012(スタッフ,_レポート班) | |
--Python札幌 | |
---Python初学者向け読書会@札幌(元主宰) | |
--セキュリティ_&_プログラミングキャンプ | |
---2010_プログラミングコース言語組 | |
----`parse.y`-hack_(case-modifier,_hash-literal) | |
---2011_プログラミングコース言語クラス_チュータ | |
).tap{ |a| | |
@debug = ARGV[0] == "--debug" | |
raise "NOT reach 101 words! ><" if a.size != 101 unless @debug | |
}.map{ |s| | |
s.gsub('_', ' ').gsub('\ ', '_') | |
}.map{ |s| | |
l = s.scan(/^(-+)/)[0] | |
!(l.nil?) && s.sub!(/^-*/, " " * l[0].size) || s | |
}.tap{ |obsolete| | |
# 実装したけど、別におもしろくもないので廃止 | |
true or @rand = ->{ | |
@randomizer ||= Random.new; | |
(@randomizer.rand(2) == 0) ? -1 : 1 | |
} | |
false and @shift = ->(i){ | |
@last = case | |
when i < 3 | |
i | |
when a.size - i < @last | |
a.size - i | |
when @last == 1 | |
2 | |
else | |
@last + @rand[] | |
end | |
} | |
}.tap{ |format| | |
@width = "FizzBuzz".size + 2 | |
@adjust = ->(s){ | |
l = s.to_s.size | |
m = (@width - l) / 2 | |
r = "#{' '*m}#{s}#{' '*m}" | |
(l.odd? && " " || "" ) + r | |
} | |
}.tap{ |fizzbuzz| | |
@is_fizz = ->(n){ n % 3 == 0 } | |
@is_buzz = ->(n){ n % 5 == 0 } | |
@is_fizzbuzz = ->(n){ @is_fizz[n] && @is_buzz[n] } | |
@to_fizzbuzz = ->(n){ | |
case | |
when @is_fizzbuzz[n]; :FizzBuzz | |
when @is_fizz[n] ; :Fizz | |
when @is_buzz[n] ; :Buzz | |
else ; n | |
end | |
} | |
@fizzbuzz = ->(n){ @adjust[@to_fizzbuzz[n]] } | |
}.each_with_index.map{|e, i| | |
nil and "#{"%3d" % i} #{'---' * @shift[i]} #{e}" | |
"[#{@fizzbuzz[i+1]}] #{e}" | |
}.join("\n") | |