Primenary(binary-prime)字符串是这样的字符串,当以二进制网格形式编写时,每一行和每一列都有一个素数总计。
这是一个模糊的解释,所以让我们用一个可行的例子来分解它。
在此示例中,我们将使用字符串bunny
:
首先,找到每个字符的ASCII码点及其二进制表示形式:
Char | ASCII | Binary
b 98 1100010
u 117 1110101
n 110 1101110
n 110 1101110
y 121 1111001
从上到下取这些二进制值,并将它们排列到网格中(如有必要,添加前导零):
1 1 0 0 0 1 0
1 1 1 0 1 0 1
1 1 0 1 1 1 0
1 1 0 1 1 1 0
1 1 1 1 0 0 1
然后,计算1
每一行和每一列中s 的数量:
1 1 0 0 0 1 0 > 3
1 1 1 0 1 0 1 > 5
1 1 0 1 1 1 0 > 5
1 1 0 1 1 1 0 > 5
1 1 1 1 0 0 1 > 5
v v v v v v v
5 5 2 3 3 3 2
当且仅当每一个总数都是质数(例如此处)时,字符串才是有效的二进制质数。
挑战
您的任务是创建一个函数或程序,当给定一个字符串时,truthy
如果该字符串是素数则返回/输出,falsy
否则返回。
规则/细节
- 您可以假定字符串的字符将始终在ASCII范围内
33-126
(包括ASCII )。 - 该字符串将不会为空。
- 一个primenary串并没有必须有一个最佳长度-例如,
W1n*
是有效的,尽管有4个字符。 - 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜-但欢迎所有提交。
- 禁止出现标准漏洞。
测试用例
'husband' -> True
'HOTJava' -> True
'COmPaTIBILE' -> True
'AuT0HACk' -> True
'PPCW' -> False
'code-golf' -> False
'C++' -> False
'/kD' -> False
'HI' -> False
'A' -> False
False
,对吗?
0
和1
不是素数,所以每个仅包含给定范围内char的1-2 char输入字符串保证至少包含一个0
或1
作为垂直和。您应该添加一些1和2字符串作为测试用例。
false
。2个字符输入可以但不在我们使用的ASCII范围内,因此对于这种情况,您是正确的。
husband
是怎么发现的呢?还是其中任何一个?不过,这是个大问题!