Октава, 53 52 байти
Виконання повного перезапису допомогло мені розіграти код 5 байтів, але мені довелося додати більше жодних опісів, зробивши це чистим збереженням лише 1 байт.
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
Я не можу додати TIO-посилання, оскільки жоден з онлайн-перекладачів не реалізував необхідний для цього інструментарій зв'язку de2bi
. Змінення цього на dec2bin
замість цього коштувало б 4 байти (2 для робочого коду та два не потрібні).
Я не знайшов способу уникнути будь-якого з 27-ти опів. Усі назви функцій і круглі дужки знаходяться між або нижче 64, або вище 96, тобто всі "необхідні" символи мають "6" у 6-му положенні (праворуч, 2 ^ 5). У мене було рішення лише з 23 відсутністю, але сам код довший. Фактичний код становить 25 байт і має таку суму стовпців при підрахунку бітів двійкового еквівалента:
15 22 6 15 10 9 13
У 6-й позиції справа (2 ^ 5) є 22 біти в 6-й позиції, а праворуч - 6 бітів (4 ^ 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
Вектор, що містить лише 1s (істинний), оцінюється як істинний в Octave, а вектор, що містить щонайменше один нуль, оцінюється як false в Octave.
Пояснення старого коду (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.
Вектор, що містить лише 1s (істинний), оцінюється як істинний в Octave, а вектор, що містить щонайменше один нуль, оцінюється як false в Octave.