Oitava, 53 52 bytes
Fazer uma reescrita completa me ajudou a obter o código de 5 bytes, mas tive que adicionar mais no-ops, tornando-o uma economia de rede de apenas 1 byte.
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
Não consigo adicionar um link TIO, pois nenhum dos intérpretes online implementou a caixa de ferramentas de comunicação necessária de2bi
. Mudá-lo para em dec2bin
vez disso custaria 4 bytes (2 para código ativo e duas não operacionais).
Não encontrei nenhuma maneira de evitar nenhuma das 27 no-ops. Todos os nomes de funções e parênteses estão entre abaixo de 64 ou superior a 96, significando que todos os caracteres "necessários" têm um 1 na 6ª posição (da direita, 2 ^ 5). Eu tinha uma solução com apenas 23 no-ops, mas o código em si era mais longo. O código real é 25 bytes e possui a seguinte soma da coluna ao contar os bits do equivalente binário:
15 22 6 15 10 9 13
Existem 22 bits na 6ª posição da direita (2 ^ 5) e apenas 6 bits na 4ª posição da direita (2 ^ 3). Isso significa que precisamos adicionar pelo menos 16 bytes para obter 6 e 22. Agora, o caractere de comentário %
adiciona um pouco à 6ª posição, aumentando-o para 23. Todos os caracteres ASCII imprimíveis precisam de pelo menos um dos dois top bits para ser 1
. Portanto, adicionar 17 bytes nos dará pelo menos 27 bits em cada um dos dois "pontos principais" (2 ^ 6 e 2 ^ 5). Agora, temos 27 bits nos dois primeiros lugares e 22 no resto. Para obter um equilíbrio, precisamos adicionar 10 bytes, para obter 32 bits em cada posição.
Uma explicação do novo 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
Um vetor contendo apenas 1s (verdadeiro) é avaliado como verdadeiro no Oitava, e um vetor contendo pelo menos um zero é avaliado como falso no Oitava.
Uma explicação do código antigo (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.
Um vetor contendo apenas 1s (verdadeiro) é avaliado como verdadeiro no Oitava, e um vetor contendo pelo menos um zero é avaliado como falso no Oitava.