べき乗シーケンス


13

ボフニア * にあるポーランド最古の塩鉱山は 1248年に開始されました。これは魔法の数字と考えることができます。べき乗のシーケンスから4桁に等しいことがわかります2 ^ 0、2 ^ 1、2 ^ 2、2 ^ 3

日付は実際にはシーケンスから4桁なので、もっと長くすることができます。無限に達するまでこのプロセスを繰り返すことができます。数に制限すると、シーケンスは次のようになります2048

124816326412825651210242048

見た目を少し良くするために、数字を分けることができます。

1|2|4|8|16|32|64|128|256|512|1024|2048

日付よりも長いカスタムのシーケンスを試してみましょう。たとえば、5桁にする必要があります。複数の可能性があります。

  • 24816
  • 81632
  • 64128

または3桁のもの:

  • 124
  • 248
  • 816

これに3桁の数字を追加することもできますが、シーケンスには少なくとも2つの数字が必要であるとしましょう。

*英語版ウィキペディアにはこれに関する情報はありません。ポーランド語版を入力すると-があります。あなたが鉱山を訪れると、労働者はあなたに、それが1248年に始まったと伝えます。

チャレンジ

上記の例のように、2を基数とする累乗シーケンスを作成します。

2〜27の範囲の数値を指定して、入力と等しい桁数でシーケンスのすべての可能な部分(必要に応じて1つ以上の2048)を出力します。48116は半分にカットされるため、数値を切り取ることができないため、次のような出力は無効です。

ルール:

  • 標準的な抜け穴は禁止されています。
  • 入力は範囲内の数値であると想定できます。
  • プログラムは、範囲(28+)よりも大きい入力を受け入れることができますが、スコアは増減しません。
  • 出力のスペースは無視されます。like 124またはlike を出力できます4 8 16
  • 異なる可能性は、リストの任意の文字,./|または改行で区切る必要があります。
  • 配列として出力できます。
  • すべての可能性は少なくとも2つの異なる数字を含むべきです。
  • シーケンスの一部を出力する必要があります14。次のように、隣り合っていない数字を混在させることはできません。
  • ハードコーディングされた出力は許可されませんが、完全なシーケンスを含む文字列/数値/配列をハードコーディングできます。
  • 入力27は、2048シーケンス全体を返す必要があります。
  • 既に述べたように、数字をカットしないください。例 16滞在する16必要があります481- 使用できません-を使用する必要があります4816
  • 編集:私はそこに間違ったことを言ったかもしれません。2048はプログラムがサポートする最後の番号です。より大きな整数のサポートを追加できます。

テストケース

入力: 2

12, 24, 48

入力: 3

124, 248, 816

入力: 4

1248, 4816, 1632, 3264

入力: 5

24816, 81632, 64128

入力: 27

124816326412825651210242048

そして後の数字...

テストケースのいずれかを間違えた場合は、教えていただくか、質問を編集してください。


これはなので、バイト単位の最短コードが勝ちです!


1
だから、これはベースとして2だけで正しいですか?質問でそれを明確にできますか?「指数列」によって暗示されているかどうかはわかりませんが、たとえそうであっても、それを知らない私のような人々がいることは確かです。
コール

@cole実際には、はい、2だけです。言及してくれてありがとう!
RedClover

1
出力を改行で区切ることはできますか?
H.PWiz

1
心配ない; 私が言ったように、私はそれを押していました。いくつかのチャレンジの著者は、することができ非常に柔軟なので、出力形式にバイトまたは2のために、それの価値が尋ねる;)(注:提案として解釈すべきではない)!
シャギー

1
イントロでは、ポーランド語を大文字にする必要があります。 「ポリッシュ」は別の英語の単語です。
ピーターコーデス

回答:


7

05AB1E12 11 10バイト

までのシーケンスをサポート 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

オンラインでお試しください!

説明

₃Ý            # push range [0 ... 95]
  o           # raise 2 to the power of each
   Œ          # get a list of all sublists
    ʒ         # filter, keep elements that satisfy:
     g        # length
      ≠       # false (not equal to 1)
       }      # end filter
        J     # join each
         ù    # keep numbers of length matching the input

保存された1バイトのおかげエリックOutgolfer
保存に1つのバイトのおかげライリー


X›することができます
エリックアウトゴルファー

@EriktheOutgolfer:そうそう。私はいつもそれが今存在することを忘れます。ありがとう:)
エミグナ

することY₃Ýmができます₃Ýoか?
ライリー

@Riley:はい。私はそれを以前に持っていましたが、何らかの理由でそれを変更したに違いありません。ありがとう:)
エミグナ

今すぐコードを試してみて(チャレンジ終了後かなり遅い)...そして、あなたの解決策は私のために大量の空の配列を返すようです...私は何か間違ったことをしていますか?
RedClover


4

ゼリー 19 18  16 バイト

カットオフ(2048だけでなく)を使用できるようになったため、より短いソリューションが存在する可能性がありますが、この仕様の変更により、32768のカットオフに移行することでこの実装から1バイト節約
できます。 ..

-2バイトはErik the OutgolferのおかげですVフィルターの暗黙の正しい引数と引き締めを使用するために使用)-
はい、現在彼の非効率的なものと非常に似ています。彼に賛成票を投じてください!

⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf

数字を受け取り、数字のリストを返すモナドリンク。

オンラインでお試しください!

どうやって?

⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf - Link: number, n        e.g. 3
⁴                - literal sixteen             16
 Ḷ               - lowered range               [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
  2              - literal two                 2
   *             - exponentiate                [1,2,4,8,16,32,...,32768]
    Ẇ            - all sublists                [[1],[2],...,[1,2],[2,4],...,[1,2,4],...]
      17         - literal seventeen           17
     ṫ           - tail from index             [[1,2],[2,4],...,[1,2,4],...]]
        V        - evaluate as Jelly code      [12,24,...,124,...]
              Ðf - filter keep:
             ¥   -   last two links as a dyad
           $     -     last two links as a monad:
         D       -       decimal list (of entry) (i.e. 816 -> [8,1,6] or 24 -> [2,4])
          L      -       length                  (i.e. 816 -> 3, or 24 -> 2)
            ⁼    -   equals (n)                  (i.e. 816 -> 1, or 24 -> 0)
                 - ...resulting in             [816, 124, 248]

1
これはあなたのものに似すぎていますか?(正直に言ってください:p)
エリックアウトゴルファー

面白いことに、私は使用しようとしていたVので、1000ではなく16で動作します:⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf
ジョナサンアラン

私は最も行きます:p
エリックアウトゴルファー

@EriktheOutgolferは今では似ているかもしれませんが、私は両方を維持する必要があることを心に留めています、チェーンを正しくするために必要なだけです)。
ジョナサンアラン

@EriktheOutgolfer私はあなたが男性であると仮定し、そのように呼ばれることを好むが、実際にはどちらも事実として知らない。別の代名詞を好む場合はお知らせください!
ジョナサンアラン


4

Japt22 20 19 16バイト

入力までサポートします639が、その後のシーケンスにギャップが表示され始めます234(サポートされる入力範囲の完全なリストはこちらを参照してください)。文字列の配列を出力します。

IÆIo!²ãX m¬lUäc

試して

I(64)はL(100)に置き換えることができますが、科学的表記法と精度の不正確性に陥っています。それらを除外すると、明らかに、バイトカウントが増加し、最大入力のみが増加します736

                     :Implicit input of integer U
I                    :64
 Æ                   :Map each X in [0,64)
  Io                 :  Range [0,64)
    !²               :  Raise 2 to the power of each
      ãX             :  Subsections of length X
         m           :  Map
          ¬          :    Join
           lU        :  Filter elements of length U
             Ã       :End map
              ¤      :Slice off the first 2 elements
               c     :Flatten


3

ハスク18 17バイト

出力は改行で区切られます

fo=⁰LmṁsftQ↑12¡D1

オンラインでお試しください!

どうやって?

           ↑12¡D1    The sequence [1,2,4...2048]
              ¡      Repeatedly apply function, collecting results in a list
               D     double
                1    initially applying to 1
           ↑12       Take the first 12 elements
          Q          Get all sublists
        ft           With a length greater than 1
     mṁs             Convert each list into a string, e.g [4,8,16] -> "4816"
fo=⁰L                Keep only those whose length is equal to the input

3

ゼリー、16バイト

ȷḶ2*ẆṫȷḊVDL$⁼¥Ðf

オンラインでお試しください!

注:非常に非効率的です。数値のリストを返します。


ティオは...それは常に60秒を超えています...このコードを解析することができていないようだ
RedClover


1
@Soakuは理論的には動作します-非常に非効率的であるため、タイムアウトします。
ジョナサンアラン

1
@Soaku私は自分のコメントのつもりでした。私はすでにそれらを置き換えており、出力があります[12, 24, 48]
エリックアウトゴルファー

1
@Soaku余分な費用なしでできるなら、最大限に出かけませんか?;)
エリックアウトゴルファー

3

JavaScriptの(ES7)、102の 100バイト

一致するすべてのサブシーケンスをで出力しalert()ます。

l=>[...1e11+''].map((_,k,a)=>a.map((_,x)=>(s=(g=n=>x<=k|n<k?'':g(n-1)+2**n)(x)).length-l||alert(s)))

デモ

NB:このスニペットは結果をバッファリングし、使いやすいようにコンソールに出力します。


3

ハスケル72 67バイト

f n=[s|i<-[0..99],j<-[i+1..99],s<-[show.(2^)=<<[i..j]],length s==n]

オンラインでお試しください!

Laikoniのおかげで5バイト節約

の長さに制限がある99ので使用しました。2^99> 27


ただし、27の入力に対して余分なケースを返します。
ジョナサンアラン

99を11に置き換えることができるため、より有効になります。ただし、2048より大きい数字は無効であるとは述べませんでした。2048が最小範囲であることだけを述べました。
RedClover

@JonathanAllan私はそれがまだ正しいと思います:「あなたが望むなら2048の1つ以上」私は633825300114114700748351602688シーケンスを取りました。実際には、45の制限で十分だと思いますlength$(show$2^44)++(show$2^45)==28
jferard

あなたの答えのに実際に編集され @jferard (以前は「2048に制限」と実際に述べられていました)。この場合も私のものを短くできます。
ジョナサンアラン

1
@JonathanAllanはい、この回答を投稿した直後に、質問のルールの一部が間違っていて誤解を招くことに気付きました。
RedClover

2

Mathematica、122バイト

(s=#;FromDigits@F[f/@#]&/@Select[Subsequences[Array[2^#&,99,0]],l@#>1&&(l=Length)@(F=Flatten)[(f=IntegerDigits)/@#]==s&])&  


入力

[27]

出力

{879609302220817592186044416、134217728268435456536870912、524288104857620971524194304、163843276865536131072262144、204840968192163843276865536、256512102420484096819216384、641282565121024204840968192、163264128256512102420484096、124816326412825651210242048}

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344

2

C、170バイト

i,j;f(n){char t[99],s[12][5]={"1"};for(i=j=1;i<12;)sprintf(s+i++,"%d",j*=2);for(i=0;i<12;++i,strlen(t)-n||j>1&&puts(t))for(j=*t=0;strlen(t)<n&&j+i<12;)strcat(t,s+i+j++);}

オンラインでお試しください!

展開済み:

i,j;
f(n)
{
    char t[99], s[12][5] = {"1"};
    for (i=j=1; i<12;)
        sprintf(s+i++, "%d", j*=2);
    for (i=0; i<12; ++i, strlen(t)-n || j>1 && puts(t))
        for (j=*t=0; strlen(t)<n && j+i<12;)
            strcat(t, s+i+j++);
}



1

Japt、24バイト

賛成しないでください

今では、これは@Shaggyがやったのと同じ方法で、ゴルフが少ないことに気付きました。(答えを削除する必要がありますか?)

この質問を投稿してからしばらく経って、私は最初のゴルフ言語を学びました。このため、私はここで自分の運を試すことにしました。

2oI,@IÆ2pYÃãX ®q
c f_Ê¥N

オンラインでお試しください!

スコアは最高ではありませんが、それでも良くはありませんが、これを行うには多くの時間がかかりました.-。

いくつかの理由で、xの長さの配列しか返せないため、多くのスコアを失います。

説明:

2oI,@IÆ2pYÃãX ®q # All 2^ combinations:
2oI              # Range 2-64
   ,@            # Map (X as index)
     IÆ          #   Range 0-64, map (Y as index)
       2pY       #   2^Y
          Ã      #   End function (map)
                 #   this = array of powers.
           ãX    #   All combinations with X length
              ®q # Join then (arrays to numbers)

c f_Ê¥N          # Filter length to input:
c                # Flatten
  f_             # Filter
    Ê            #  Length
     ¥           #  ==
      N          #  Parsed input

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.