Oktaf, 53 52 byte
Membuat penulisan ulang lengkap membantu saya golf kode 5 byte, tapi saya harus menambahkan lebih banyak no-ops, menjadikannya net-save hanya 1 byte.
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
Saya tidak dapat menambahkan tautan TIO, karena tidak ada penerjemah online yang mengimplementasikan kotak alat komunikasi yang diperlukan de2bi
. Mengubahnya sebagai dec2bin
gantinya akan biaya 4 byte (2 untuk kode kerja, dan dua no-ops).
Saya tidak menemukan cara untuk menghindari 27 no-ops. Semua nama fungsi dan tanda kurung berada di antara baik di bawah 64, atau lebih tinggi dari 96, yang berarti semua karakter "perlu" memiliki 1 di posisi ke-6 (dari kanan, 2 ^ 5). Saya punya solusi dengan hanya 23 no-ops, tetapi kode itu sendiri lebih panjang. Kode aktualnya adalah 25 byte, dan memiliki jumlah kolom berikut saat menghitung bit dari persamaan biner:
15 22 6 15 10 9 13
Ada 22 bit di posisi ke-6 dari kanan (2 ^ 5), dan hanya 6 bit di posisi ke-4 dari kanan (2 ^ 3). Itu berarti, kita harus menambahkan setidaknya 16 byte, untuk mendapatkan 6 hingga 22. Sekarang, karakter komentar %
menambahkan sedikit ke posisi ke-6, meningkat menjadi 23. Semua karakter ASCII yang dapat dicetak membutuhkan setidaknya satu dari dua bit atas menjadi 1
. Oleh karena itu, menambahkan 17 byte akan memberi kita setidaknya 27 bit di masing-masing dari dua "tempat teratas" (2 ^ 6 dan 2 ^ 5). Sekarang, kami memiliki 27 bit di dua tempat teratas, dan 22 bit di sisanya. Untuk mencapai kesetimbangan, kita harus menambahkan 10 byte, untuk mencapai 32 bit pada setiap posisi.
Penjelasan kode baru (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
Vektor yang hanya mengandung 1s (true) dievaluasi menjadi true dalam Oktaf, dan vektor yang mengandung setidaknya satu nol dievaluasi menjadi false dalam Oktaf.
Penjelasan kode lama (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.
Vektor yang hanya mengandung 1s (true) dievaluasi menjadi true dalam Oktaf, dan vektor yang mengandung setidaknya satu nol dievaluasi menjadi false dalam Oktaf.