Octave, 53 52 byte
Việc viết lại hoàn chỉnh đã giúp tôi đánh mã 5 byte, nhưng tôi phải thêm nhiều lệnh không hoạt động, làm cho nó chỉ tiết kiệm ròng chỉ 1 byte.
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
Tôi không thể thêm liên kết TIO, vì không có trình thông dịch trực tuyến nào đã triển khai hộp công cụ giao tiếp cần thiết cho de2bi
. Thay đổi nó thành dec2bin
thay thế sẽ tốn 4 byte (2 cho mã làm việc và hai no-op).
Tôi không tìm ra cách nào để tránh bất kỳ ai trong số 27 người không. Tất cả các tên hàm và dấu ngoặc đơn nằm trong khoảng dưới 64 hoặc cao hơn 96, có nghĩa là tất cả các ký tự "cần thiết" có 1 ở vị trí thứ 6 (từ bên phải, 2 ^ 5). Tôi đã có một giải pháp chỉ với 23 no-op, nhưng bản thân mã đã dài hơn. Mã thực tế là 25 byte và có tổng cột sau khi đếm các bit của nhị phân tương đương:
15 22 6 15 10 9 13
Có 22 bit ở vị trí thứ 6 từ bên phải (2 ^ 5) và chỉ có 6 bit ở vị trí thứ 4 từ bên phải (2 ^ 3). Điều đó có nghĩa là, chúng ta phải thêm ít nhất 16 byte, để có được 6 đến 22. Bây giờ, ký tự nhận xét%
thêm một chút vào vị trí thứ 6, tăng nó lên 23. Tất cả các ký tự ASCII có thể in cần ít nhất một trong hai bit đầu để được 1
. Do đó, việc thêm 17 byte sẽ cung cấp cho chúng tôi ít nhất 27 bit trong mỗi hai "vị trí hàng đầu" (2 ^ 6 và 2 ^ 5). Bây giờ, chúng ta có 27 bit ở hai vị trí hàng đầu và 22 bit còn lại. Để đạt đến trạng thái cân bằng, chúng ta phải thêm 10 byte, để có được 32 bit chẵn ở mỗi vị trí.
Giải thích về mã mới (52 byte):
@(_)~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
Một vectơ chỉ chứa 1s (true) được ước tính là true trong Octave và một vectơ chứa ít nhất một số 0 được ước tính là false trong Octave.
Giải thích về mã cũ (53 byte):
@(_)!((_=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.
Một vectơ chỉ chứa 1s (true) được ước tính là true trong Octave và một vectơ chứa ít nhất một số 0 được ước tính là false trong Octave.