Una cadena primaria ( binaria-prima ) es aquella que, cuando se escribe como una cuadrícula binaria, cada fila y columna tiene un total primo.
Esa es una explicación bastante vaga, así que analicemos con un ejemplo trabajado ...
Para este ejemplo usaremos la cadena bunny
:
Primero, encuentre el punto de código ASCII de cada carácter y su representación binaria:
Char | ASCII | Binary
b 98 1100010
u 117 1110101
n 110 1101110
n 110 1101110
y 121 1111001
Tome estos valores binarios, de arriba a abajo, y organícelos en cuadrícula (agregando ceros a la izquierda si es necesario):
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
Luego, cuente el número de 1
s en cada fila y columna:
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
Si, y solo si, cada total es primo (como aquí), entonces la cadena es un primo binario válido.
El reto
Su tarea es crear una función o programa que, cuando se le da una cadena, devuelve / emite truthy
si la cadena es primaria, y de lo falsy
contrario.
Reglas / Detalles
- Puede suponer que los caracteres de la cadena siempre estarán en el rango ASCII
33-126
(inclusive). - La cadena no estará vacía.
- Una cadena primaria no tiene que tener una longitud principal; por ejemplo,
W1n*
es válida, a pesar de tener 4 caracteres. - Este es el código de golf , por lo que gana la respuesta más corta (en bytes), pero todas las presentaciones son bienvenidas.
- Las lagunas estándar están prohibidas.
Casos de prueba
'husband' -> True
'HOTJava' -> True
'COmPaTIBILE' -> True
'AuT0HACk' -> True
'PPCW' -> False
'code-golf' -> False
'C++' -> False
'/kD' -> False
'HI' -> False
'A' -> False
También hay un ejemplo de Python que funciona, pero increíblemente detallado en repl.it con el que puede probar su solución.
False
, ¿correcto?
0
y 1
no son primos, y se garantiza que cada cadena de entrada de caracteres 1-2 que contiene solo caracteres en el rango dado contiene al menos uno 0
o 1
como una suma vertical. Debe agregar algunas cadenas de caracteres 1 y 2 como casos de prueba.
false
. 2 entradas de caracteres podrían, pero no en el rango ASCII que estamos usando, por lo que para este escenario está en lo correcto.
husband
era válido? O alguno de ellos? ¡Gran problema, sin embargo!