2012年10月11日 星期四

任天堂Code Puzzle

今天發現了一個有趣的網站,是由任天堂公司所製作的Code Puzzle網站。由於我本身對Python這個程式語言就情有獨鍾,所以在網站上看到這樣的問題當然就覺得很興奮想試著做看看摟。


第一題的問題如下
def lets_take_tea_break(m, e, n, c):
    """print(m, e, n, c)"""
    if pow(m, e) % n == c: return str(m)
    return ""

if __name__ == "__main__":
    import sys
    print("http://cp1.nintendo.co.jp/" + lets_take_tea_break(*[int(i) for i in (sys.argv[1], 17, 3569, 915)]))

在這邊的sys.argv[1]很明顯是個有趣的地方。一般都是用於在接命令參數的,但如果把程式直接拿去跑,會出現IndexError: list index out of range的錯誤。

想了很久與Google後才發現,這一題的答案其實就是在問傳入lets_take_tea_break的m value。這樣我們就只要寫個function計算m的value就好,程式如下:
def brute_force_search(m):
    ans = ''
    for i in xrange(1,m):
        ans = lets_take_tea_break(*[int(x) for x in (i, 17, 3569, 915)])
        if ans: print(ans)


參看

  1. 任天堂のCode Puzzle解答。解答方法としてエレガントかはわかりません。


沒有留言:

張貼留言