2009年5月9日土曜日

簡単らしい

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
超簡単な問題を朝食後にやってみた。13:39。。。遅い!!しかもpythonというよりlisperが好みそうな答えだ。しかしtest caseの書き間違いとn==0のケースで時間を無駄にした。


def deal(n, deck):
'''
>>> deal(3, '123123123')
('111', '222', '333')

>>> deal(4, '123123123')
('12', '23', '31', '12')

>>> deal(6, "012345012345012345")
('000', '111', '222', '333', '444', '555')

>>> deal(4, "111122223333")
('123', '123', '123', '123')

>>> deal(1, "012345012345012345")
('012345012345012345',)

>>> deal(6, "01234")
('', '', '', '', '', '')
>>> deal(2, "")
('', '')
>>> deal(0, "")
()
'''
if n < 1:
return ()
if len(deck) < n:
return ('',) * n
xs = deck[:n]
ys = deal(n, deck[n:])
return tuple((xs[i] + ys[i] for i in range(n)))

if __name__ == '__main__':
import doctest
doctest.testmod()

0 件のコメント: