Uma string Primenary ( binary-prime ) é aquela que, quando escrita como uma grade binária, cada linha e coluna tem um total primo.
Essa é uma explicação bastante vaga, então vamos descrevê-la com um exemplo bem trabalhado ...
Neste exemplo, usaremos a string bunny
:
Primeiro, encontre o ponto de código ASCII de cada caractere e sua representação binária:
Char | ASCII | Binary
b 98 1100010
u 117 1110101
n 110 1101110
n 110 1101110
y 121 1111001
Pegue esses valores binários, de cima para baixo, e organize-os na grade (adicionando zeros à esquerda, se necessário):
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
Em seguida, conte o número de 1
s em cada linha e coluna:
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
Se, e somente se, todo total for primo (como aqui), a sequência será um primo binário válido.
O desafio
Sua tarefa é criar uma função ou programa que, quando recebe uma string, retorna / sai truthy
se a string for primenária ou falsy
não.
Regras / Detalhes
- Você pode assumir que os caracteres da string sempre estarão no intervalo ASCII
33-126
(inclusive). - A cadeia não estará vazia.
- Uma sequência primária não precisa ter um comprimento primo - por exemplo,
W1n*
é válida, apesar de ter 4 caracteres. - Isso é código-golfe , então a resposta mais curta (em bytes) vence - mas todos os envios são bem-vindos.
- As brechas padrão são proibidas.
Casos de teste
'husband' -> True
'HOTJava' -> True
'COmPaTIBILE' -> True
'AuT0HACk' -> True
'PPCW' -> False
'code-golf' -> False
'C++' -> False
'/kD' -> False
'HI' -> False
'A' -> False
Há também um exemplo de Python funcional, mas incrivelmente detalhado, no repl.it, no qual você pode testar sua solução.
False
, correto?
0
e 1
não são primos, e cada string de entrada de 1-2 caracteres contendo apenas caracteres no intervalo especificado tem a garantia de conter pelo menos um 0
ou 1
como uma soma vertical. Você deve adicionar algumas cadeias de caracteres de 1 e 2 como casos de teste.
false
. 2 entradas de char poderiam, mas não no intervalo ASCII que estamos usando, portanto, para este cenário, você está correto.
husband
era válido? Ou algum deles? Grande problema, no entanto!