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
在线尝试!