指数の成長とそれ以上に!


18

チャレンジ

所与の基地1<b<10、インデックスt1、出力タームxt以下のように定義されます:

  • x1=1110
  • xi+1は、xiを基数b変換してから、その数字を基数 10で再解釈することによって取得されます。10
  • 出力は10を基数にする必要があります10

ベース5、用語5のウォークスルーは次のとおりです。

  • x1=1110
  • 1110=215 sox2=2110
  • 2110=415 sox3=4110
  • 4110=1315 sox4=13110
  • 13110=10115 sox5=101110
  • 文字列"1011"または整数を出力します1011

テストケース

注:これらは1つのインデックス付きです

base 2, term 5 --> 1100100111110011010011100010101000011000101001000100011011011010001111011100010000001000010011100011
base 9, term 70 --> 1202167480887
base 8, term 30 --> 4752456545
base 4, term 13 --> 2123103032103331200023103133211223233322200311320011300320320100312133201303003031113021311200322222332322220300332231220022313031200030333132302313012110123012123010113230200132021023101313232010013102221103203031121232122020233303303303211132313213012222331020133

ノート

  • 標準的な抜け穴は許可されていません
  • デフォルトのI / Oメソッドが許可されます
  • tには異なるインデックス(0インデックス、1インデックス、2インデックスなど)を使用できます。t
  • 最初のt項を出力できます。
  • これはその言語で最短のコードが優先されます

1
大きな数字をサポートする必要がありますか、それとも最大2 ^ 31-1の数字をサポートする必要がありますか?
無知の具現化

1
@EmbodimentofIgnoranceあなたの言語の最大値(ただし、標準の抜け穴を覚えておいてください!)
MilkyWay90

10を超える塩基を含む課題はありますか?(その場合11、ベースにあるかのように繰り返し解釈し、bベース10に変換するなど)
Neil

@Neil私は10を超える基数を含めませんでした。なぜなら、(たとえば)4a10の基数では有効な数値ではないからです
MilkyWay90

4a10進数を10進数として解釈し、b毎回10進数に変換するので(つまり、この質問と逆の場合)、取得できません。
ニール

回答:


6

JavaScript(Node.js)、40バイト

このバージョンで5バイト、BigIntバージョンで2バイトを保存してくれた@Neilに感謝します。

入力をとして取得します。(t)(base)ここで、tは1から始まります。

n=>g=(b,x=11)=>--n?g(b,+x.toString(b)):x

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


JavaScript(Node.js)、48バイト(BigIntバージョン)

入力をとして取得します。(t)(base)ここで、tは1から始まります。BigIntを返します。

n=>g=(b,x=11n)=>--n?g(b,BigInt(x.toString(b))):x

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


eval最初のバージョンで必要ですか?+5バイト節約できます...
ニール

そして、BigIntあなたが追加する必要はありませんので、第二版では2つのバイトを保存しnた文字列に。
ニール

(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xは1文字短くなります
Qwertiy

@Qwertiy f=(関数がそれ自体を参照しているため)追加する必要があるため、実際には1バイト長くなります。
アーナル

@Arnauld、おっと。それからこれn=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:)呼び出しf(t)(b)()が許可されている場合。
Qwertiy

5

05AB1E、5バイト

>IF¹B

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

説明

>       # increment <base>
 IF     # <term> times do:
   ¹B   # convert from base-10 to base-<base>

11でシーケンスを明示的に開始する必要がないことに注意してください。
開始しbase+1て追加の反復を実行すると、最初の反復で11が得られます。


3

Japt、9バイト

ÆB=sV n
B

それを試してみてください

(Two inputs, U and V)
Æ            Range [0..U)
 B=          For each, set B (B is preinitialized to 11) to 
   sV          B's previous value converted to base-V
   n           and back to base-10
B            Print out B's final value

これは最初の用語を出力することはできません。
シャギー

@Shaggy 2バイトのコストで修正
無知の

うまく保存された:)自分でそれを行うことを考えていないだろう。
シャギー


2

網膜、67バイト

.+,(\d+)
11,$1*
"$+"{`^\d+
*
)+`(?=_.*,(_+))(\1)*(_*)
$#2*_$.3
,_+

オンラインでお試しください!コンマ区切りの入力t(0インデックス)とb取ります。すべての計算は単項式で行われるため、多数の場合はタイムアウトになります。説明:

.+,(\d+)
11,$1*

バツ0=11を初期化し、bを単項に変換します。

"$+"{`

t回繰り返します。

^\d+
*

バツを単項に変換します。

)+`(?=_.*,(_+))(\1)*(_*)
$#2*_$.3

ベースb変換します。

,_+

出力からbを削除します。



2

Clojure、109バイト

不要なスペースにスポットすることにより、10のバイトを除去するためMilkyWay90の功績 別の不要なスペースから別のバイトのために無知の実施の形態にクレジットを

ゴルフ

(defn f([b t](f b t 11))([b t v](if(= t 1)v(f b(dec t)(read-string(.(new BigInteger(str v))(toString b)))))))

非ゴルフ

(defn f
  ([base term] (f base term 11))
  ([base term value] (if (= term 1)
                      value
                      (f base (dec term) (read-string (. (new BigInteger (str value)) (toString base)))))))

バイトを節約できる主な場所は、...の表現です。それが何であれ呼ばれます。具体的には:

(read-string (. (new BigInteger (str value)) (toString base)))

これらのスペースが必要ですか?スペースを削除できますか?
MilkyWay90

構文的に区別可能なものを分離しているスペースを削除することさえ私には思いませんでした。Clojureは私が思っていたよりも少し寛容なようです。ありがとうございました!
user70585

まだ不必要なスペースがあります(if (= t 1)
無知の実施

叫び声を上げる、良いキャッチ👍
user70585







1

brainfuck、270バイト

++<<++<,+++<-[----->-<]<,,[<-----[->++++++++++<]++>[-<+>],]<[>>>>>>[<<<[->>+<<]>>>>>]<<[[>+<-]>>[-[<++++++++++>-]>+>]<[<<]>>[-<<+>>>+<]>>[-[<-[>>+>>]>>[+[-<<+>>]>[-<]<[>]>++>>>]<<<<<-]+>[-<+<+>>]<<[->>+<<]>>>]<[-]<[[-<+>]<<]<]<[->>+<<]<-]>>>>[>>]<<[>-[-----<+>]<----.<<]

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

0インデックス。反復回数は最大で255と想定されます。

説明

テープは次のように配置されます。

num_iterations 0 0 base digit0 0 digit1 0 digit2 ...

各数字は、実際にはその数字に1を加えたものとして格納され、0は「これ以上の数字」用に予約されています。ベース変換中、現在作業中の数字は1セル分右に移動し、ベースは現在の作業領域の左に移動します。

++<<++              Initialize initial value 11
<,+++<-[----->-<]   Get single digit as base and subtract 48 to get actual number
<,,[<-----[->++++++++++<]++>[-<+>],]   Read multiple digits as number of iterations
<                   Go to cell containing number of iterations

[                   For each iteration:
  >>>>>>              Go to tens digit cell
  [<<<[->>+<<]>>>>>]  Move base to just before most significant digit
  <<                  Return to most significant digit

  [                   For each digit in number starting at the left (right on tape):
    [>+<-]            Move digit one cell to right (to tell where current digit is later)
    >>[-[<++++++++++>-]>+>]  Multiply each other digit by 10 and move left
    <[<<]>>           Return to base
    [-<<+>>>+<]       Copy base to just before digit (again) and just before next digit to right (left on tape)
    >>[               For each digit at least as significant as this digit:

      -[<-[>>+>>]>>[+[-<<+>>]  Compute "digit" divmod base
      >[-<]<[>]>++    While computing this: add quotient to next digit; initialize digit to "1" (0) first if "0" (null)
      >>>]<<<<<-]     End of divmod routine

      +>[-<+<+>>]     Leave modulo as current digit and restore base
      <<[->>+<<]      Move base to next position
      >>>
    ]

    <[-]<             Delete (now useless) copy of base
    [[-<+>]<<]<       Move digits back to original cells
  ]                   Repeat entire routine for each digit

  <[->>+<<]           Move base to original position
  <-                  Decrement iteration count
]

>>>>[>>]<<[>-[-----<+>]<----.<<]  Output by adding 47 to each cell containing a digit

0

、14バイト

≔11ζFN≔⍘IζIηζζ

tb

≔11ζ

バツ0=11

FN

b

≔⍘IζIηζ

バツ

ζ

バツt









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