Escriba el código que toma una cadena como entrada y genera un valor verdadero o falso dependiendo de si la cadena sigue o no estas reglas:
Si apila cada carácter uno encima del otro, convierte a binario y suma cada columna, entonces todas las sumas deben ser idénticas. Puede suponer que la cadena de entrada contiene solo caracteres ASCII imprimibles (puntos de código 32 - 126).
Como ejemplo:
La entrada O5vy_+~
debe devolver un valor verdadero, ya que su representación binaria es:
1001111 | O
0110101 | 5
1110110 | v
1111001 | y
1011111 | _
0101011 | +
1111110 | ~
-------
5555555 <- Sum of bits in each column. Should give a truthy value.
La entrada PPCG
debe devolver un valor falsey, ya que su representación binaria es:
1010000 | P
1010000 | P
1000011 | C
1000111 | G
-------
4020122 <- Should give a falsey value
El giro es: su código debe devolver un valor verdadero si se usa como entrada para su función / programa. Es decir, el código debe cumplir con las mismas reglas que anteriormente (su código puede contener caracteres que no son ASCII 32-126).
Su programa / función solo necesita manejar ASCII imprimible como entrada. Si su código contiene algo más, 8 bits, codificación de 16 bits, Unicode, un juego de caracteres personalizado (o algo más), entonces la representación binaria del mismo debe cumplir con las mismas reglas, pero su código no necesita manejarlo como entrada
Este es el código golf , por lo que se aplican reglas estándar.
fuente
Respuestas:
JavaScript (ES6),
123122120110 bytesDebajo hay un hexdump con sumas de bits.
Manifestación
Mostrar fragmento de código
fuente
MATL ,
109 bytesLa entrada es una cadena encerrada entre comillas simples (si la entrada contiene qoutes simples, escapéalos duplicando).
La salida es
3
tan verdadera y nada (salida vacía) como falsa.Pruébalo en línea!
El código en binario es el siguiente:
Explicación
fuente
Jalea ,
1110 bytes¡Pruébelo en línea! O vea las pruebas y la entrada automática (el código es ASCII imprimible, que tiene los mismos valores en la página de códigos de Jelly, como se ve a continuación).
¿Cómo?
fuente
Jalea ,
1110 bytesNo utiliza no-ops o comentarios.
Pruébalo en línea!
Desglose binario
Cómo funciona
fuente
OBUSE
porque suena comoABUSE
.Mathematica, 88 bytes
Contiene muchos caracteres no imprimibles entre las comillas. Tiene 49 de cada bit.
Aquí está el hexdump:
fuente
Octava,
5352 bytesHacer una reescritura completa me ayudó a desarrollar el código de 5 bytes, pero tuve que agregar más operaciones no, lo que lo hizo un ahorro neto de solo 1 byte.
No puedo agregar un enlace TIO, ya que ninguno de los intérpretes en línea ha implementado la caja de herramientas de comunicación necesaria para
de2bi
. Cambiarlo a sudec2bin
lugar costaría 4 bytes (2 para el código de trabajo y dos no-ops).No encontré ninguna forma de evitar ninguna de las 27 operaciones no operativas. Todos los nombres de funciones y paréntesis se encuentran entre 64 o menos de 96, lo que significa que todos los caracteres "necesarios" tienen un 1 en la sexta posición (desde la derecha, 2 ^ 5). Tenía una solución con solo 23 no-ops, pero el código en sí era más largo. El código real es de 25 bytes y tiene la siguiente suma de columnas al contar los bits del equivalente binario:
Hay 22 bits en la sexta posición desde la derecha (2 ^ 5), y solo 6 bits en la cuarta posición desde la derecha (2 ^ 3). Eso significa que tenemos que agregar al menos 16 bytes, para obtener el 6 hasta el 22. Ahora, el carácter de comentario
%
agrega un poco a la sexta posición, incrementándolo a 23. Todos los caracteres ASCII imprimibles necesitan al menos uno de los dos pedazos superiores para ser1
. Por lo tanto, agregar 17 bytes nos dará al menos 27 bits en cada uno de los dos "puntos principales" (2 ^ 6 y 2 ^ 5). Ahora, tenemos 27 bits en los dos primeros lugares, y 22 en el resto. Para llegar a un equilibrio, tenemos que agregar 10 bytes, para llegar a 32 bits en cada posición.Una explicación del nuevo código (52 bytes):
Un vector que contiene solo 1s (verdadero) se evalúa como verdadero en Octave, y un vector que contiene al menos un cero se evalúa como falso en Octave.
Una explicación del código anterior (53 bytes):
Un vector que contiene solo 1s (verdadero) se evalúa como verdadero en Octave, y un vector que contiene al menos un cero se evalúa como falso en Octave.
fuente
JavaScript (ES6),
139111107 bytesContiene
816361 de cada bit.fuente
Scala, 149 bytes
Uso:
Hexdump:
Sin golf:
Explicación:
fuente
J , 45 bytes
Pruébalo en línea! Incluye casos de prueba para la mayoría de los envíos enviados, junto con el código fuente.
fuente
Haskell , 118 bytes
Pruébalo en línea! Uso:
_Z "some string"
devuelveTrue
oFalse
.Hay algunos caracteres no imprimibles en el comentario en la última línea, así que aquí hay una cadena del programa que usa caracteres escapados:
Cada bit ocurre 68 veces.
El código más corto que se me ocurrió fue de 82 bytes:
Sin embargo, las sumas de los bits para este código son
[33,28,41,48,20,79,46]
, por79 - 20 = 59
lo que, además, se necesitarían no-operaciones más 2 bytes para comenzar un comentario, totalizando 143 bytes.Al reorganizar el programa, descubrí que usar letras mayúsculas como nombres de variables ayuda a nivelar las sumas porque no tienen el bit en la sexta posición establecida. Debido a que Haskell no permite que los nombres de variables comiencen con una letra mayúscula, deben anteponerse
_
, lo que tampoco establece el sexto bit.Al hacerlo, terminé con la solución anterior que tiene 97 bytes antes de agregar los no-ops y la suma de bist a
[50,47,56,56,48,68,60]
, por(68 - 47) = 21
lo que solo se deben agregar 21 bytes en el comentario.fuente
PHP,
959391 bytes¡Estoy tan feliz de que los nombres de funciones PHP no distingan entre mayúsculas y minúsculas!
donde
*
debe ser reemplazado por ASCII 151 (0x97). (PHP se quejaría de cualquier carácter de control en el código, aparte de\r
y\n
, pero necesito algo con el bit 4 establecido, así que agregué 128).+1 byte para ASCII puro imprimible: utilice en su
_7
lugar.Ejecutar
echo '<input>' | php -nR '<code>'
o probarlo en línea . La salida es1
para la verdad, vacía para la falsedad.fuente
Python 2, 117 bytes
Todos los "espacios" son pestañas para reducir el número de 0x20 bits.
Contiene 66 de cada bit. (No hay
'%07b'
como se explica en este número ).Volcado hexadecimal:
fuente