Octava, 53 52 bytes
Hacer 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.
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
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 su dec2bin
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:
15 22 6 15 10 9 13
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 ser 1
. 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):
@(_)~diff(sum(de2bi(+_)))
@(_) % An anonymous function that take a variable _ as input
% We use underscore, instead of a character, since it has the
% most suitable binary represetation
de2bi(+_) % Convert the input string to a binary matrix
sum(de2bi(+_)) % Take the sum of each column
diff(sum(de2bi(+_))) % And calculate the difference between each sum
~diff(sum(de2bi(+_))) % Negate the result, meaning 0 becomes true,
% and everything else becomes false
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):
@(_)!((_=sum(de2bi(+_)))-_(1))%RRRFVVVVVVVVV_____????
@(_) % An anonymous function that take a variable _ as input
% We use underscore, instead of a character, since it has the
% most suitable binary represetation
! % Negate the result, meaning 0 becomes true, and everything else becomes false
de2bi(+_) % Convert the input string to a binary matrix
sum(de2bi(+_)) % Take the sum of each column
(_=sum(de2bi(+_))) % Assign the result to a new variable, also called _
% It's not a problem that we use the same variable name, due
% to the order of evaluation
((_=sum(de2bi(+_)))-_(1)) % Subtract the first element of the new variable _
% If all elements of the new variable _ are identical, then this
% should give us a vector containing only zeros,
% otherwise, at least one element should be non-zero
!((_=sum(de2bi(+_)))-_(1)) % And finally, we negate this.
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.