อ็อกเทฟ53 53ไบต์
การเขียนใหม่อย่างสมบูรณ์ช่วยให้ฉันตีกอล์ฟรหัส 5 ไบท์ได้ แต่ฉันต้องเพิ่ม no-ops มากขึ้นทำให้ประหยัดเพียง 1 ไบต์เท่านั้น
@(_)~diff(sum(de2bi(+_)))%RRPPPVVVW?????????________
de2bi
ฉันไม่สามารถเพิ่มติ้วลิงค์เนื่องจากไม่มีล่ามออนไลน์ได้ดำเนินการกล่องเครื่องมือการสื่อสารที่จำเป็นสำหรับ การเปลี่ยนเป็นdec2bin
แทนจะเสียค่าใช้จ่าย 4 ไบต์ (2 สำหรับรหัสการทำงานและไม่มีสองตัวเลือก)
ฉันไม่พบวิธีหลีกเลี่ยง 27-ops ใด ๆ ชื่อฟังก์ชันและวงเล็บทั้งหมดอยู่ระหว่าง 64 หรือต่ำกว่า 96 หมายถึงอักขระ "จำเป็น" ทั้งหมดมี 1 ในตำแหน่งที่ 6 (จากด้านขวา, 2 ^ 5) ฉันมีวิธีแก้ปัญหาโดยไม่มีเพียง 23-ops แต่รหัสตัวเองอีกต่อไป รหัสจริงคือ 25 ไบต์และมีผลรวมคอลัมน์ต่อไปนี้เมื่อนับจำนวนบิตของไบนารีเทียบเท่า:
15 22 6 15 10 9 13
มี 22 บิตในตำแหน่งที่ 6 จากด้านขวา (2 ^ 5) และมีเพียง 6 บิตในตำแหน่งที่ 4 จากด้านขวา (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
เวกเตอร์ที่มีเพียง 1s (true) จะถูกประเมินเป็นจริงใน Octave และเวกเตอร์ที่มีอย่างน้อยหนึ่งศูนย์จะถูกประเมินค่าเป็นเท็จใน 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 (true) จะถูกประเมินเป็นจริงใน Octave และเวกเตอร์ที่มีอย่างน้อยหนึ่งศูนย์จะถูกประเมินค่าเป็นเท็จใน Octave