逆fizzbuzz問題 by 足軽

NW組2013でお馴染みの @y1r96 のゆーいちろーくんが、
『足軽さん!差し支えなければ、逆FizzBuzz問題のソース書いてください!!』
と突然言われました。

心優しい僕はこう答えました。
『逆FizzBuzzってなんだい?』

しかし、彼は
『ちっ、しらねぇのかよ。』
と一言放ちました。

辛いので、ぐぐってみたらこんなサイトを見つけました。

逆FizzBuzz問題の解説っぽいサイトです。

なるほど。FizzBuzzの逆ってことだね。

理解した僕はすぐさま、ソースを書きました。めでたしめでたし。

jud = lambda x: 3 if x == 'fizz' else 5

def fizz_buzz(st):
    if len(st)==1: return(jud(st[0]))
    st_be = jud(st[0])
    en_be = jud(st[-1])
    
    if len(st)==2:
        if st_be==en_be:
            return (6,9) if st_be==3 else "Oops..." 
        else:
            return (9,10) if st_be==3 else (5,6)
    else:
        mu_be = jud(st[1])
        def ans(x,y,z):
            try:
                while True:
                    ran = range(x,z+1)
                    if True in [i%y ==0 for i in ran]:
                        if len([i for i in range(x+1,z) if i%3==0 or i%5==0]) != 1:
                            return ans(x+jud(st[0]),y,z)
                        else: 
                            return (x,z)
                    else:
                        z += jud(st[-1])
                        return ans(x,y,z)
            except RuntimeError:
                return "Oops..."
    return ans(st_be,mu_be,en_be)

if __name__ == '__main__':
    print "Usage: input fizz or buzz ... and only 3..."
    while True:
        print fizz_buzz(raw_input(":").split())


"""
$python hoge.py
Usage: input fizz or buzz ... and only 3...
:fizz
3
:buzz
5
:fizz buzz
(9, 10)
:buzz fizz
(5, 6)
:fizz buzz fizz
(3, 6)
:fizz fizz
(6, 9)
:fizz fizz buzz
(6, 10)
"""


足軽『ざっとこんなもんよ。』

ゆういちろう『ソース読んでも理解できない…なんて僕は馬鹿なんだ!』

足軽『気にすることはない、さぁ学べ少年!』

ゆういちろう『いや、お前のソースが汚いからじゃ』

足軽『はひっ』


〜終わり〜


本日のおすすめ:
1: jud = lambda x: 3 if x == 'fizz' else 5
19: if True in [i%y ==0 for i in ran]:
20: if len([i for i in range(x+1,z) if i%3==0 or i%5==0]) != 1: