1.Rock Paper Scissors(剪刀 石頭 布) 說明:在電腦科學中有一種特別重要的游戲,因為它本身很簡單,可以用來創建非常狡猾的人工智慧演算法來對抗人類(或彼此),預測對手的行為。 這個古老的游戲是在兩個參與者之間進行的,他們同時用他們的手勢——石頭,紙或者剪刀。如果兩人都投了相同的手 ...
1.Rock Paper Scissors(剪刀 石頭 布)
說明:在電腦科學中有一種特別重要的游戲,因為它本身很簡單,可以用來創建非常狡猾的人工智慧演算法來對抗人類(或彼此),預測對手的行為。
這個古老的游戲是在兩個參與者之間進行的,他們同時用他們的手勢——石頭,紙或者剪刀。如果兩人都投了相同的手勢,那一輪就被認為是平局。否則,下列規則適用:
Rock beats Scissors (by blunting them)
Scissors beat Paper (by cutting it)
Paper beats Rock (by covering it)
通常比賽是在樓梯上玩的。贏得回合的球員向前一步。先到達樓梯盡頭的人是贏家。
你將會得到幾個游戲的記錄。你要告訴他們誰贏了。
Input data 將包含第一行中播放的匹配數量。然後匹配描述是用單獨的行寫的。
每一行都有幾對字母,比如PR(第一次扔紙,第二次扔石頭),或者是SS(都是剪刀),和空格分開。
Answer 每個匹配的答案應該指定第一個玩家是否獲勝(值1)或秒(值2),沒有平局。
例子:
input data: 3 SS PR PR RS PS PP SP PS RR PS RP answer: 1 1 2
代碼如下:
1 condition = [['SS', 'RS', 'PP', 'PP', 'SP', 'PS', 'RP', 'PP', 'RR', 'PP', 'SR', 'PP', 'PS', 'PS'], 2 ['SP', 'RP', 'SS', 'RP', 'PP', 'RS', 'RR', 'RP'], 3 ['PS', 'PR', 'PP', 'RS', 'SS', 'SR', 'SR', 'SP', 'RP', 'RR', 'PP', 'PR', 'SR'], 4 ['SR', 'SP', 'SS', 'SS', 'RR', 'RR', 'SR', 'SR', 'SS', 'RP'], 5 ['SS', 'RR', 'PS', 'PR', 'RS', 'RP', 'PP', 'RP']] 6 7 for i in range(len(condition)): 8 win1 = 0 9 win2 = 0 10 for n in range(len(condition[i])): 11 if condition[i][n][0] == condition[i][n][1]: 12 continue 13 elif condition[i][n][0] is 'S' and condition[i][n][1] is 'P': 14 win1 += 1 15 elif condition[i][n][0] is 'R' and condition[i][n][1] is 'S': 16 win1 += 1 17 elif condition[i][n][0] is 'P' and condition[i][n][1] is 'R': 18 win1 += 1 19 else: 20 win2 += 1 21 if win1 > win2: 22 print('1', end=' ') 23 else: 24 print('2', end=' ') 25 26 輸出:2 2 2 2 2
自己的解法不是最優解,可以直接定義 draw = ['SS', 'PP', 'RR] win1 = ['SP', 'RS', 'PR'] win2 = ['PS, 'SR', RP'] 比較字元在哪個列表中。
2.Prime Numbers Generation(求素數)
說明:在這個任務中,我們要實現素數生成器。素數是正整數,除1和它本身之外沒有其他因數。你可以在維基的文章中讀到更多。最流行的演算法是Sieve of Eratosthene 和 Trial division。
因此,讓我們以升序來創建質數數組(或列表),即
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...]
素數不被2, 3 , 5,7 整除。
然後輸出與輸入數據中給定的索引相對應的素數。
Input data 將包含在第一行中列印的素數。
下一行將包含用於列印值的素數數組的索引。它們的範圍從1到20萬不等。
Answer 應該包含與數組中指定位置相對應的素數。
註意,對於這個任務,我們開始從1而不是0開始索引一個數組(這可能幫助您檢查您的程式,並有許多可以在網上找到的素數列表)。
input data: 4 7 1 199999 4 answer: 17 2 2750131 7
代碼如下:
1 nums = [182894, 136660, 173358, 132410, 199128, 151979, 102865, 180622, 150340, 163151] 2 3 def eladuosai(n): # 厄拉多塞篩法 4 l = list(range(1, n+1)) 5 l[0] = 0 6 for i in range(2, n+1): 7 if l[i-1] != 0: 8 for j in range(i*2, n+1, i): 9 l[j-1] = 0 10 result = [x for x in l if x != 0] 11 return result 12 13 s = eladuosai(3000000) 14 for n in nums: 15 print(s[n-1], end=' ') 16 17 輸出:2497423 1823051 2357119 1761883 2737129 2043817 1340153 2463763 2020181 2207039
當素數索引位置數很大時,使用厄拉多塞篩法演算法的效率更高。