Untuk pertumbuhan digit eksponensial dan seterusnya!

18

Tantangan

Diberikan basis dan indeks , istilah output , didefinisikan sebagai berikut:1<b<10t1xt

  • x1=1110
  • xsaya+1 diperoleh dengan mengonversi ke basis dan kemudian menafsirkan kembali digit-digitnya di basisxsayab10
  • Keluaran harus dalam basis10

Berjalan melalui untuk basis 5, istilah 5 adalah:

  • x1=1110 .
  • 1110=215 jadi .x2=2110
  • 2110=415 jadi .x3=4110
  • 4110=1315 jadi .x4=13110
  • 13110=10115 jadi .x5=101110
  • Kami mengeluarkan string "1011"atau integer 1011.

Uji Kasus

Catatan: ini satu diindeks

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

Catatan

  • Tidak ada celah standar
  • Metode I / O standar apa pun diperbolehkan
  • Anda dapat menggunakan indeks yang berbeda (seperti 0-diindeks, 1-diindeks, 2-diindeks, dll) untukt
  • Anda dapat menghasilkan istilah pertama .t
  • Karena ini adalah , kode terpendek menang untuk bahasa itu
MilkyWay90
sumber
1
Apakah kita harus mendukung angka yang lebih besar atau hanya angka hingga 2 ^ 31 - 1?
Perwujudan Ketidaktahuan
1
@EmbodimentofIgnorance Maksimum bahasa Anda (Ingat celah standar, meskipun!)
MilkyWay90
Apakah ada tantangan yang mencakup basis> 10? (Dalam hal ini Anda akan berulang kali mengartikan 11seolah-olah itu di pangkalan bdan mengubahnya kembali ke pangkalan 10, dll.)
Neil
@Nil, saya tidak menyertakan basis lebih tinggi dari 10 karena (misalnya) 4atidak akan menjadi angka yang valid di basis-10
MilkyWay90
Anda tidak akan mendapatkan 4a, karena Anda akan menafsirkan basis 10 digit sebagai basis bdan mengkonversi ke basis 10 setiap kali (yaitu sebaliknya dari pertanyaan ini).
Neil

Jawaban:

6

JavaScript (Node.js) , 40 byte

Terima kasih kepada @Neil untuk menyimpan 5 byte pada versi ini dan 2 byte pada versi BigInt

Mengambil input sebagai (t)(base), di mana adalah 1-diindeks.t

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

Cobalah online!


JavaScript (Node.js) , 48 byte (versi BigInt)

Mengambil input sebagai (t)(base), di mana adalah 1-diindeks. Mengembalikan BigInt.t

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

Cobalah online!

Arnauld
sumber
Apakah Anda perlu evaldi versi pertama? +akan menghemat 5 byte ...
Neil
Dan BigIntmenyimpan dua byte di versi kedua, karena Anda tidak perlu menambahkan nke string.
Neil
(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xlebih pendek 1 char
Qwertiy
@ Qwertiy Ini sebenarnya 1 byte lebih lama, karena kita perlu prepend f=(karena fungsinya merujuk sendiri).
Arnauld
@Arnauld, oops. Maka yang ini n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Jika panggilan f(t)(b)()diizinkan.
Qwertiy
5

05AB1E , 5 byte

>IF¹B

Cobalah online!

Penjelasan

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

Perhatikan bahwa tidak perlu memulai urutan secara eksplisit di 11 .
Mulai dari base+1dan melakukan iterasi tambahan akan menghasilkan pemberian iterasi pertama 11 .

Emigna
sumber
3

Japt , 9 byte

ÆB=sV n
B

Cobalah

(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
Perwujudan Ketidaktahuan
sumber
Ini tidak akan pernah bisa menghasilkan istilah pertama, bukan?
Shaggy
@ Shaggy Diperbaiki dengan biaya dua byte
Perwujudan Ketidaktahuan
Selamat disimpan :) Tidak akan berpikir untuk melakukan itu sendiri.
Shaggy
2

Retina , 67 byte

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

Cobalah online! Mengambil input yang dipisahkan koma t (diindeks 0) dan b . Apakah semua kalkulasinya di unary jadi habis untuk jumlah besar. Penjelasan:

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

x0=11b

"$+"{`

t

^\d+
*

xsaya

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

b

,_+

b

Neil
sumber
2

Python 2 , 71 byte

def f(b,n):h=lambda x:x and x%b+10*h(x/b);return n and h(f(b,n-1))or 11

Cobalah online!

Diindeks 0.

Chas Brown
sumber
2

Clojure , 109 byte

Kredit ke MilkyWay90 untuk menghapus 10 byte dengan melihat spasi yang tidak perlu Kredit ke Perwujudan Ketidaktahuan untuk byte lain dari ruang lain yang tidak perlu

Golf

(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)))))))

Tidak disatukan

(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)))))))

Saya pikir byte tempat utama bisa diselamatkan adalah ekspresi untuk ... reradixing? apa pun namanya. Secara khusus:

(read-string (. (new BigInteger (str value)) (toString base)))
pengguna70585
sumber
Apakah Anda membutuhkan ruang itu? Bisakah Anda menghilangkan spasi?
MilkyWay90
Bahkan tidak terpikir oleh saya untuk menghilangkan spasi di mana mereka memisahkan hal-hal yang secara sintaktis dapat dibedakan; Sepertinya Clojure sedikit lebih permisif daripada yang kupikirkan. Terima kasih!
user70585
Masih ada ruang yang tidak perlu di(if (= t 1)
Perwujudan Ketidaktahuan
Whoop, good catch 👍
user70585
93 byte
Perwujudan Ketidaktahuan
1

Perl 6 , 28 byte

{(11,+*.base($^b)...*)[$^t]}

Cobalah online!

Indeks ke dalam urutan berbasiskan nol.

Sean
sumber
1

Jelly , 8 7 byte

‘b³Ḍ$⁴¡

Cobalah online!

btb+1

Penjelasan

‘b³Ḍ$⁴¡ | Main link: first argument b, second argument t
‘       | b + 1
    $⁴¡ | Repeat the following t times
 b³     | Convert to base b
   Ḍ    | Convert back from decimal to integer
Nick Kennedy
sumber
Penjelasan bagi kita yang tidak bisa mengenali atom dengan cepat?
MilkyWay90
1

C # (Visual C # Interactive Compiler) , 87 byte

n=>m=>{int g=11;for(var s="";m-->0;g=int.Parse(s),s="")for(;g>0;g/=n)s=g%n+s;return g;}

Disimpan 5 byte berkat @KevinCruijssen

Cobalah online!

Perwujudan Ketidaktahuan
sumber
87 byte dengan mengubah do-whilemenjadi loop reguler.
Kevin Cruijssen
1

brainfuck , 270 byte

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

Cobalah online!

Diindeks 0. Jumlah iterasi diasumsikan paling banyak 255.

Penjelasan

Rekaman itu ditata sebagai berikut:

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

Setiap digit sebenarnya disimpan sebagai digit itu ditambah 1, dengan 0 dicadangkan untuk "no more digit". Selama konversi basis, angka yang sedang dikerjakan dipindahkan satu sel ke kanan, dan basis dipindahkan ke kiri area kerja saat ini.

++<<++              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
Nitrodon
sumber
0

Arang , 14 byte

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

tb

≔11ζ

x0=11

FN

b

≔⍘IζIηζ

xsaya

ζ

xt

Neil
sumber
0

C (gcc) , 59 byte

f(t,b){t=t?c(f(t-1,b),b):11;}c(n,b){n=n?c(n/b,b)*10+n%b:0;}

Cobalah online!

attinat
sumber
0

PHP , 83 75 byte

function c($b,$t,$v=11){return $t==1?$v:c($b,$t-1,base_convert($v,10,$b));}

Cobalah online!

Yang ini hanya akan bekerja dengan angka "kecil" (mis. Tidak menguji kasus 1 dan 4)

rollstuhlfahrer
sumber
0

Japt , 10 byte

Diindeks 0. Dibawa tsebagai input pertama, bsebagai input kedua.

_ìV ì}gBìC

Cobalah

Shaggy
sumber
0

Gaia , 8 byte

Bd
11@↑ₓ

Cobalah online!

Membawa berbasis 0 iterationslalu base.

Bd		| helper function: convert to Base b (implicit) then convert to base 10
		| main function:
11		| push 11
  @		| push # of iterations
   ↑ₓ		| do the above function (helper function) that many times as a monad
Giuseppe
sumber
0

Perl 5 -Mbigint -pa , 65 byte

$\=11;map{$p=$\;$\%=0+"@F";$\=($p%"@F").$\while$p/=0+"@F"}2..<>}{

Cobalah online!

Xcali
sumber