Октава, 53 52 байта
Полное переписывание помогло мне набрать 5 байт кода, но мне пришлось добавить больше неиспользуемых операций, что позволило сэкономить всего 1 байт.
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
Я не могу добавить TIO-ссылку, так как ни один из онлайн-переводчиков не реализовал необходимый инструмент коммуникации de2bi
. Меняя его наdec2bin
вместо этого будет стоить 4 байта (2 для рабочего кода и два отсутствия операций).
Я не нашел способа избежать любой из 27 операций. Все имена функций и круглые скобки находятся между 64 или более 96, что означает, что все «необходимые» символы имеют 1 в 6-й позиции (справа, 2 ^ 5). У меня было решение только с 23 операциями, но сам код был длиннее. Фактический код составляет 25 байтов и имеет следующую сумму столбца при подсчете битов двоичного эквивалента:
15 22 6 15 10 9 13
В 6-й позиции справа есть 22 бита (2 ^ 5) и только в 6-й позиции справа (2 ^ 3). Это означает, что мы должны добавить по крайней мере 16 байтов, чтобы получить 6 до 22. Теперь, символ комментария %
добавляет немного к 6-й позиции, увеличивая его до 23. Все печатные символы ASCII нуждаются по крайней мере в одном из двух Лучшие биты быть 1
. Следовательно, добавление 17 байтов даст нам по меньшей мере 27 бит в каждой из двух «верхних точек» (2 ^ 6 и 2 ^ 5). Теперь у нас есть 27 бит в первых двух местах и 22 в остальных. Чтобы достичь равновесия, мы должны добавить 10 байтов, чтобы получить четные 32 бита в каждой позиции.
Объяснение нового кода (52 байта):
@(_)~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
Вектор, содержащий только 1 с (истина), оценивается как истинный в Октаве, а вектор, содержащий по крайней мере один ноль, оценивается как ложный в Октаве.
Объяснение старого кода (53 байта):
@(_)!((_=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.
Вектор, содержащий только 1 с (истина), оценивается как истинный в Октаве, а вектор, содержащий по крайней мере один ноль, оценивается как ложный в Октаве.