まぁ、結構短くできたかもー?(甘い)
普通に解いたらこんな感じか…しかし条件分岐が多すぎてだめだなぁ。これは。(range関数の引数を訂正しました「range(100)」→「range(1,101)」)
for i in range(1,101): if not(i%15): print "fizzbuzz" elif not(i%5): print "buzz" elif not(i%3): print "fizz" else: print i
短く。(三項演算子使用につきpython2.5以上ですいません)
for i in range(1,101):FizzBuzz = (""if(i%3)else"Fizz")+(""if(i%5)else"Buzz");print FizzBuzz if FizzBuzz else i
あ、一旦代入するなんて必要はないか。
for i in range(1,101):print(""if(i%3)else"Fizz")+(""if(i%5)else"Buzz")or i
似非ワンライナーでした。(74バイト)
すみません。ここギコみてからやる気がでたので、解き方が脳裏に焼き付いていたかもしれません。
で、他の人の回答もみてみた。
for i in range(1,101):print"FizzBuzz"[i*i%3*4:8--i**4%5]or i
なんじゃこの回答はー。
調べてみると、iが自然数かつ奇数の時
例えばi%3==0のときもちろんi*i%3==0だが、i%3!=0のときはi*i%3==1と必ず1になる
例えばi%5==0のときもちろん-i**4%5==0だが、i%5!=0のときは-i**4%5==4と必ず4になる
(割られる数-1)乗すると、元の数の剰余0の時以外は剰余が必ず一定の数値になるのである。
すごい。
まだいけた。
tasukuchanさんのコメント
for i in range(1,101):print"Fizz"*(not i%3)+"Buzz"*(not i%5)or i
64バイト
なんか脳が回転してきましたよw
"not cond"より"cond==0"の方が1バイト稼げる!
for i in range(1,101):print"Fizz"*(i%3==0)+"Buzz"*(i%5==0)or i
62バイト
for i in range(1,101):print"Fizz"*(i%3<1)+"Buzz"*(i%5<1)or i
60バイト。やった、自然数トリックに追いついたw