3. 99 shinichiroes of hamaji

269→265→246→244→237→228byte。

o='%s%s on the wall';f=lambda i:(i,' shinichiro%s of hamaji'%(i-1and'es'or''))
for i in range(99)[::-1]:
	print'%s, %s.'%(o,o[:4])%(f(i+1)*2)
	if i:print'Take one down and pass it around, %s.\n'%o%f(i)
	else:print'Go to the store and buy some more, %s.'%o%f(99)

265byte。


でもこれくらいの小手先じゃ10位以内にも入れなさそうだしなぁ・・・


追記

o='%s on the wall';f=lambda i:'%d shinichiro%s of hamaji'%(i,i-1and'es'or'')
for i in range(99,0,-1):print'%s, %s.\n'%(o%f(i),o[:2]%f(i))+(i-1and'Take one down and pass it around, %s.\n'%o%f(i-1)or'Go to the store and buy some more, %s.'%o%f(99))

printやif-elseがどう見ても字数食ってたのでまとめて、あと改行をLFのみにして246byte。


追記追記

- o='%s on the wall';f=lambda i:'%d shinichiro%s of hamaji'%(i,i-1and'es'or'')
+ o='%s on the wall';f=lambda i:'%d shinichiro%s of hamaji'%(i,'es'[:i*2-2])

新たな方向性が見えないので一応削れるとこだけ削る。244byte。


追記追記追記

o=' on the wall';f=lambda i:'%d shinichiro%s of hamaji'%(i,'es'[:i*2-2])
for i in range(99,0,-1):print f(i)+o+', %s.\n'%f(i)+(i-1and'Take on e down and pass it around, %s.\n'%(f(i-1)+o)or'Go to the store and buy some more, %s.'%(f(99)+o))

アホなことをしていたのに気付いて削る。237byte。


追記その4:

f=lambda i:'%d shinichiro%s of hamaji on the wall'%(i,'es'[:i*2-2])
for i in range(99,0,-1):print f(i)+', %s.\n'%f(i)[:-12]+(i-1and'Take one down and pass it around, %s.\n'%f(i-1)or'Go to the store and buy some more, %s.'%f(99))

ついにoも消えた。228byte。
[:-12]が美しくないなあ。