FizzBuzz問題 ~Pyton2.7系~

最近、HACKERRANKというプログラミングのクイズを提供してくれるものにハマってる。各カテゴリー別に分かれて、Max Socreを叩き出しランキングを上げていく。そのカテゴリーの中にCode Golfというものがあって、いかに短いコードを記述するかを競うものがある。

今回は、誰もが?やったことある"FizzBuzz問題"を解く。

普通に記述すると...
for i in range(1,101):
    if i%15 == 0:
        print 'FizzBuzz'
    elif i%5 == 0:
        print 'Buzz'
    elif i%3 == 0:
        print 'Fizz'
    else:
        print i

スペースやタブを使うとバイト数が増えるので、(若干)見にくいけどワンライナーで行く。

 

1回目のSubmitでScore:12.5 
for i in range(1,101):print (""if(i%3)else"Fizz")+(""if(i%5)else"Buzz")or i

if~elseの文字数が邪魔だ。

ちなみに、Socre=(200 - number of characters)/10で計算される。

 

2回目のSubmitでScore:14
  for i in range(1,101):print"Fizz"*(i%3<1)+"Buzz"*(i%5<1)or i

if~else文を削除してみた。今度はrangeを(100)にして"1,"を削除する。

 

3回目のSubmitでScore14.3
 for i in range(100):print i%3/2*'Fizz'+i%5/4*'Buzz'or i+1

もう無理なんじゃ...でも、リーダーボードでは14.4がPython2.xの最大Scoreになってる。どこを1文字減らせば良いのか...分からん。