集合演算で FizzBuzz問題 [Python]
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
http://www.everes.net/2007/may/09/fizzbuzz/
http://d.hatena.ne.jp/aodag/20070509/1178681462
http://www.liris.org/blog/fuzzbuzzE381AAE38293E3818B/
ハッカーの皆さんのコードは読んでもよくわからないので、自分ならどう書くか?胸に手を当ててよく考えてみた。1行では書かないな(書けないな)。分かり易く書きたいな。
書いた。
Python 2.4 以降で動くと思うけど、手元に 2.3 しかなかったので IronPython で確認した。
fizz = set([i for i in range(1,101) if i % 3 == 0]) buzz = set([i for i in range(1,101) if i % 5 == 0]) fizzbuzz = fizz.intersection(buzz) fizz = fizz - fizzbuzz buzz = buzz - fizzbuzz for i in range(1, 101): if i in fizz: print 'Fizz' elif i in buzz: print 'Buzz' elif i in fizzbuzz: print 'FizzBuzz' else: print i
うーん、分かり易いかなぁ?微妙だ。
「FizzBuzz と出しているところを BuzzFizz にして!」と言われた場合にも「FBにして」と言われても直し易いようにしたつもり。(嘘。集合演算が使ってみたかった)
いずれにせよ、2分ではできなかったので僕はダメプログラマ。
(追記)
どう考えても↓のが分かり易い。俺ってバカだな。脳みそ SQL になってる。
http://python.g.hatena.ne.jp/mhrs/20070509/p1
http://d.hatena.ne.jp/likk/20070509
(さらに追記)
どうせなので、集合演算にこだわってみた。処理速度は遅い。
fizz = set([i for i in range(1,101) if i % 3 == 0]) buzz = set([i for i in range(1,101) if i % 5 == 0]) fizzbuzz = fizz.intersection(buzz) fizz = fizz - fizzbuzz buzz = buzz - fizzbuzz num = set(range(1,101)) - fizz - buzz - fizzbuzz for i in range(1, 101): if i in num: print i if i in fizz: print 'Fizz' if i in buzz: print 'Buzz' if i in fizzbuzz: print 'FizzBuzz'
Buy Amoxicillin 500mg Uk <a href=https://apcialisle.com/#>cheap cialis</a> Hpb Approved Generic Viagra In Canada <a href=https://apcialisle.com/#>Cialis</a> Clomid Liqua Tech Labs
by Stepcer (2020-03-18 12:27)
Top Rated Generic Viagra Pharmacy <a href=https://apcialisle.com/#>Cialis</a> Cheap Viagra 100mg To Buy In Canada <a href=https://apcialisle.com/#>Cialis</a> Over The Counter Metrogel
by JanTrum (2020-03-31 15:28)
Can You Take Amoxicillin With Tylenol https://agenericcialise.com/ - Generic Cialis Antiobiotics And Keflex <a href=https://agenericcialise.com/#>where to buy cialis</a> Kamagra Canada
by hoacits (2020-06-29 23:16)