Üstel basamak büyümesi ve ötesine!


18

Meydan okuma

Bir baz 1<b<10 ve bir indeks t1 verildiğinde , çıkış terimi xt , aşağıdaki gibi tanımlanır:

  • x1=1110
  • xi+1 ,xib tabanınadönüştürülmesive daha sonra baz 10'daki basamaklarının yeniden yorumlanmasıylaelde edilir.10
  • Çıktı 10 bazında olmalıdır10

5. temel, 5. terim için bir yürüyüş şöyle olacaktır:

  • x1=1110 .
  • 1110=215 yanix2=2110 .
  • 2110=415 yanix3=4110 .
  • 4110=1315 yanix4=13110 .
  • 13110=10115 yanix5=101110 .
  • Dizeyi "1011"veya tamsayıyı çıkarırız 1011.

Test Durumları

Not: bunlar bir dizine eklenmiştir

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

notlar

  • Standart boşluklara izin verilmez
  • Herhangi bir varsayılan G / Ç yöntemine izin verilir
  • Farklı dizinler kullanabilir (0 endeksli gibi, 1-endeksli vb 2 endeksli) için t
  • İlk t terimlerini çıktı alabilirsiniz .
  • Bu , o dil için en kısa kod kazanır

1
Daha büyük sayıları mı yoksa sadece 2 ^ 31 - 1'e kadar olan sayıları mı desteklememiz gerekiyor?
Cehaletin Somutlaşması

1
@EmbodimentofIgnorance Dilinizin maksimum değeri (Yine de standart boşlukları hatırlayın!)
MilkyWay90

10'un üzerinde baz içeren bir zorluk var mı? (Bu durumda tekrar tekrar 11temelde gibi yorumlayıp , tekrar btemel 10'a dönüştürürsünüz.)
Neil

@Neil 10'dan yüksek bazlar dahil etmedim (örneğin) 4a10 tabanındaki geçerli bir sayı olmayacaktı
MilkyWay90

Tabii ki 4a10 basamağı temel olarak yorumlayıp bher seferinde 10 basamağını çevireceğinizden (yani bu sorudan farklı bir şekilde) yararlanamazsınız.
Neil

Yanıtlar:


6

JavaScript (Node.js) , 40 bayt

Bu sürümde 5 bayt ve BigInt sürümünde 2 bayt kaydettiği için @Neil'e teşekkürler

Olarak girişi alır (t)(base)burada, t 1-endekslenir.

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

Çevrimiçi deneyin!


JavaScript (Node.js) , 48 bayt (BigInt sürümü)

Olarak girişi alır (t)(base)burada, t 1-endekslenir. Bir BigInt döndürür.

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

Çevrimiçi deneyin!


evalİlk versiyonda ihtiyacınız var mı? +5 bayt kurtaracaktı ...
Neil

Ve BigIntikinci sürümde iki bayt kaydeder, çünkü ndizeye eklemenize gerek yoktur .
Neil

(b,t,x=11)=>--t?f(b,t,+x.toString(b)):x1 char daha kısa
Qwertiy

@Qwertiy Aslında 1 bayt daha uzun, çünkü başa gelmemiz gerekecek f=(çünkü fonksiyon kendini referans alıyor).
Arnauld

@ Arnauld, ayy. O zaman bu n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Çağrıya f(t)(b)()izin verilirse.
Qwertiy

5

05AB1E , 5 bayt

>IF¹B

Çevrimiçi deneyin!

açıklama

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

Sekansı 11'de açıkça başlatmaya gerek olmadığını unutmayın .
Başlamak base+1ve fazladan bir yineleme yapmak ilk yinelemenin 11 ile sonuçlanmasına neden olur .


3

Japt , 9 bayt

ÆB=sV n
B

Dene

(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

Bu asla ilk terimi çıkaramayacak, değil mi?
Shaggy

@Shaggy İki bayt pahasına düzeltildi
Bilgisizlik

Güzel kurtardı :) Kendini yapmayı düşünemezdim.
Shaggy


2

Retina , 67 bayt

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

Çevrimiçi deneyin! Virgülle ayrılmış girdileri t (0 indeksli) ve b . Tüm hesaplamalarını tek başına yapar, bu yüzden büyük sayılar için zaman aşımına uğrar. Açıklama:

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

x0=11 başlatın ve b tekli'ye dönüştürün .

"$+"{`

t kez tekrarlayın .

^\d+
*

xi unary'ye dönüştürün .

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

Tabana dönüştürme b .

,_+

Çıktıdan b silin .



2

Clojure , 109 bayt

Gereksiz alanları tespit ederek 10 baytın kaldırılması nedeniyle MilkyWay90'a teşekkür ederiz . Başka bir gereksiz alandan başka bir bayt için Cehaleti Yapılandırma Kredisi

golfed

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

Ungolfed

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

Sanýrým ana yer baytlarýn kurtarýlabileceđi ... yeniden yayým için? buna ne denirdi. özellikle:

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

Bu alanlara ihtiyacınız var mı? Boşlukları ortadan kaldırabilir misiniz?
MilkyWay90

Sözdizimsel olarak ayırt edilebilir şeyleri ayırdıkları boşlukları kaldırmak için bile bana hiç rastlamadım; Clojure düşündüğümden biraz daha izin verici görünüyor. Teşekkür ederim!
user70585

İçinde hala gereksiz bir alan var(if (= t 1)
Bilgisizlik

Whoop, iyi yakalama user
user70585 21:19



1

Jöle , 8 7 bayt

‘b³Ḍ$⁴¡

Çevrimiçi deneyin!

btb+1

açıklama

‘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

Atomları hızlı bir bakışta tanıyamayanlarımız için açıklama?
MilkyWay90




1

beyinli , 270 bayt

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

Çevrimiçi deneyin!

0 endeksli. Yineleme sayısının en fazla 255 olduğu varsayılır.

açıklama

Bant aşağıdaki gibi yerleştirilir:

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

Her basamak aslında bu basamak artı 1 olarak saklanır ve 0 "artık basamak yok" için ayrılır. Temel dönüşüm sırasında, üzerinde çalışılmakta olan rakamlar bir hücre sağa taşınır ve temel geçerli çalışma alanının soluna taşınır.

++<<++              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

Kömür , 14 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Girdileri şu şekilde alırt (0 dizinli) ve b. Açıklama:

≔11ζ

x0=11.

FN

döngü b zamanlar.

≔⍘IζIηζ

Hesaplamak xben.

ζ

Çıktı xt.





0

PHP , 83 75 bayt

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

Çevrimiçi deneyin!

Bu sadece "küçük" sayılarla çalışacaktır (örn. Test durumları 1 ve 4 değil)



0

Gaia , 8 bayt

Bd
11@↑ₓ

Çevrimiçi deneyin!

O iterationszaman 0 tabanlı alır 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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.