Randall Munroeの本「xkcd、volume 0」では、ページ番号にやや奇数のシステムを使用しています。最初のいくつかのページ番号は
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
これは、3進法に少し似ていますが、彼が20
まっすぐに100
、から120
、200
そしてにスキップすることに注意し200
てください1000
。このシーケンスを定義する1つの方法は、それがせいぜい1を含むすべての3進数を列挙して2
、1
その後でないと言うこと2
です。これはOEISのエントリA169683にあります。この番号体系は、スキューバイナリと呼ばれます。
あなたの仕事はN
、この番号体系で与えられた正の整数の表現を見つけることです。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。
出力は、文字列、スキューバイナリ表現に等しい10進表現の数値、または(整数または文字/文字列としての)数字のリストです。先行ゼロを返してはなりません。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
おもしろい事実:この番号体系には、実際にはいくつかのメリットがあります。数字をインクリメントするとき、常に最大で2つの隣接する数字を変更します-数字全体に変更を伝える必要はありません。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
最後のテストケース(および同様の大きさの他の入力なので、ハードコーディングについては考えないでください)を1秒未満で解決できる最短回答に報奨金を与えます。
リーダーボード
これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。
回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。
# 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で、