หนังสือของ Randall Munroe "xkcd, volume 0" ใช้ระบบตัวเลขที่ค่อนข้างแปลกสำหรับหมายเลขหน้า หมายเลขหน้าสองสามครั้งแรกคือ
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
นี้มีลักษณะบิตเช่น ternary แต่สังเกตเห็นว่าเขาข้ามจาก20ตรงไปยัง100จาก120ไป200และกลับจากไป200 1000วิธีหนึ่งในการกำหนดลำดับนี้คือการบอกว่ามันระบุหมายเลข ternary ทั้งหมดที่มีมากที่สุดคนหนึ่ง2และไม่มีการหลังจากนั้น1 2คุณสามารถค้นหานี้ใน OEIS ในรายการA169683 ระบบตัวเลขนี้เป็นที่รู้จักกันไบนารีลาด
งานของคุณคือการหาการแสดงจำนวนเต็มบวกที่กำหนดNในระบบจำนวนนี้
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและส่งผลลัพธ์ผ่าน STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์
เอาท์พุทอาจจะเป็นสตริงจำนวนที่มีการแทนทศนิยมเท่ากับการเป็นตัวแทนไบนารีเอียงหรือรายการของตัวเลข (เป็นจำนวนเต็มหรือตัวอักษร / สตริง) คุณต้องไม่ส่งคืนเลขศูนย์นำหน้า
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
สนุกจริง:มีบุญบางอย่างในระบบตัวเลขนี้ เมื่อเพิ่มตัวเลขคุณจะเปลี่ยนตัวเลขที่อยู่ติดกันสูงสุดสองหลักเสมอ - คุณจะไม่ต้องเปลี่ยนตัวเลขทั้งหมด ด้วยการเป็นตัวแทนที่ถูกต้องที่ช่วยให้การเพิ่มขึ้นใน O (1)
กรณีทดสอบ
1 => 1
2 => 2
3 => 10
6 => 20
7 => 100
50 => 11011
100 => 110020
200 => 1100110
1000 => 111110120
10000 => 1001110001012
100000 => 1100001101010020
1000000 => 1111010000100100100
1048576 => 10000000000000000001
1000000000000000000 => 11011110000010110110101100111010011101100100000000000001102
ฉันจะให้คำตอบที่สั้นที่สุดซึ่งสามารถแก้ปัญหากรณีทดสอบครั้งสุดท้าย (และข้อมูลอื่น ๆ ที่มีขนาดใกล้เคียงกันดังนั้นอย่าคิดถึง hardcoding) ในเวลาน้อยกว่าหนึ่งวินาที
ลีดเดอร์
นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา
เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:
# Language Name, N bytes
ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น
# Ruby, <s>104</s> <s>101</s> 96 bytes
<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 51517</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>59->60และ109->110ด้วยส่วนเสริมพิเศษ 0