Re: [問題] 1-9位數不重複印出來 (Python)

看板Programming作者 (AM2)時間8年前 (2016/12/08 18:49), 8年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
挑戰最快的Python code (跟C比直接投降可以算輸一半嗎?) 在MBPR上輸入1~9都印一趟總共需約5.7秒 ========================================================== import time def benchmark(function, args_set=[None], repeat=1): total_time = 0 clock = time.clock for i in xrange(repeat): ret_set = [] for args in args_set: start = clock() ret = function(*args) total_time += clock() - start ret_set.append(ret) print ret_set print "average time : {t}".format(t=total_time/repeat) def recursive_int(n): free_digits = set(xrange(10)) def recurse_1(): if n == 1: for i in xrange(1, 10): yield i else: for i in xrange(1, 10): free_digits.remove(i) for next_level in recurse(i): yield next_level free_digits.add(i) def recurse(tmp): if n == 11 - len(free_digits): for i in free_digits: yield 10 * tmp + i else: for i in free_digits.copy(): free_digits.remove(i) for next_level in recurse(10 * tmp + i): yield next_level free_digits.add(i) ans = map(None, recurse_1()) print ans return len(ans) if __name__ == "__main__": ALGO_TO_BE_TESTED = [ recursive_int, # add other competitors here ] ARGS_SET = [[n] for n in xrange(1, 10)] REPEAT = 1 for function in ALGO_TO_BE_TESTED: benchmark(function, ARGS_SET, REPEAT) =============================================================== ※ 引述《fourdollars (四元)》之銘言: : 這是我目前找出來 Python 3 上面執行速度最快的方法 : 不過還是比 Perl 的版本要慢一點點,最快的還是 C 大概是 Perl 的十倍快 : #!/usr/bin/env python3 : import sys : power = int(sys.argv[1]) : class Num(object): : def __init__(self, power): : self.upper = 10 ** power : def __iter__(self): : for i in range(1, self.upper): : num = str(i) : if len(set(num)) == len(num): : yield(i) : num = Num(power) : numbers = [str(i) for i in num] : print(', '.join(numbers)) : ※ 引述《mikemagic88 (Mikemagic88)》之銘言: : : 使用者輸入1 印1-9 : : 使用者輸入2 印1-98 (11, 22, 33等重複的不印) : : 使用者輸入3 印1-987 (121, 988, 667等有重複的不印) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.244.24 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1481194180.A.3F4.html ※ 編輯: SocketAM2 (1.164.244.24), 12/08/2016 18:55:51
文章代碼(AID): #1OIJh4Fq (Programming)
文章代碼(AID): #1OIJh4Fq (Programming)