Python 3中,80 79个字节- 50 = 30 29评分
-1字节归功于@ ASCII-only的创造性使用,%s
而不是str
测试用例“ 98765”尚未确认,因为测试需要多长时间,几个小时后就确认了测试用例“ 98765”,但是采用类似的方法,利用短路评估来避免某些素数测试,因此可以正常工作快多了。另外,如果我们知道“ 2”不是输入(我们可以避免在偶数中检查素数),则可以通过设置i=3
初始值和i+=2
在循环中进行设置,而速度却快2倍左右,而不会产生额外的字节开销。
def f(x):
i=2
while(x in"%s"%i)*all(i%j for j in range(2,i))-1:i+=1
return i
在线尝试!
while
条件((x in"%s"%i)*all(i%j for j in range(2,i))-1
)的说明:
(x in"%s"%i)
:True
/ 1
如果当前计数器包含在它数的所需序列; False
/ 0
否则。
all(i%j for j in range(2,i))
:True
/ 1
如果当前计数器总是具有当由任何整数2(含)除以剩余部分本身(不包括),即是素数; False
/ 0
否则。
该*
相乘的两个条件一起,并作为一个and
操作员-该产品是True
/ 1
当且仅当两个条件都True
/ 1
。
的-1
充当not
操作员:False
/ 0
- 1次的结果中-1
,这被认为是真实的,而True
/ 1
- 1次的结果中0
,这被认为是错误的。因此,循环继续进行,而数字要么不包含所需的数字序列,要么不是质数。
替换为*
,and
并在除之外的所有内容周围加上括号-1
,以得到更快,等效的解决方案(稍长一些)。
Python 2中一个76字节-50 = 26的分数解决方案,由@ ASCII-only给出(使用``
代替str()
,
def f(x):
i=2
while(x in`i`)*all(i%j for j in range(2,i))-1:i+=1
return i
在线尝试!