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
当素数索引位置数很大时,使用厄拉多塞筛法算法的效率更高。