Do wykładniczego wzrostu cyfr i nie tylko!

18

Wyzwanie

Biorąc pod uwagę podstawę i indeks , termin wyjściowy , zdefiniowany w następujący sposób:1<b<10t1xt

  • x1=1110
  • xja+1 uzyskuje się przez konwersję do bazy a następnie reinterpretację jej cyfr w baziexjab10
  • Wyjście powinno być w bazie10

Przejście dla podstawy 5, termin 5 to:

  • x1=1110 .
  • 1110=215 więc .x2)=2110
  • 2110=415 więc .x3)=4110
  • 4110=1315 więc .x4=13110
  • 13110=10115 więc .x5=101110
  • Wyprowadzamy ciąg "1011"lub liczbę całkowitą 1011.

Przypadki testowe

Uwaga: są one zindeksowane

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

Uwagi

  • Standardowe luki są niedozwolone
  • Dowolna domyślna metoda we / wy jest dozwolona
  • Możesz użyć różnych indeksów (takich jak 0-indeksowane, 1-indeksowane, 2-indeksowane itp.) Dlat
  • Możesz wypisać pierwsze terminy.t
  • Ponieważ jest to , najkrótszy kod wygrywa dla tego języka
MilkyWay90
źródło
1
Czy musimy obsługiwać większe liczby, czy tylko liczby do 2 ^ 31 - 1?
of Ignorance
1
@EmbodimentofIgnorance Maksimum twojego języka (pamiętaj jednak o standardowej luce!)
MilkyWay90
Czy istnieje wyzwanie, które obejmuje bazy> 10? (W takim przypadku wielokrotnie interpretowałbyś, 11jakby był w bazie bi konwertował go z powrotem do bazy 10, itp.)
Neil
@Neil Nie uwzględniłem zasad wyższych niż 10, ponieważ (na przykład) 4anie byłby prawidłową liczbą w bazie-10
MilkyWay90
Nie dostaniesz 4a, ponieważ interpretujesz cyfry 10 jako bazę bi konwertujesz na bazę 10 za każdym razem (tj. Na odwrót od tego pytania).
Neil

Odpowiedzi:

6

JavaScript (Node.js) , 40 bajtów

Dzięki @Neil za zapisanie 5 bajtów w tej wersji i 2 bajty w wersji BigInt

Pobiera dane wejściowe jako (t)(base), gdzie jest indeksowane 1.t

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

Wypróbuj online!


JavaScript (Node.js) , 48 bajtów (wersja BigInt)

Pobiera dane wejściowe jako (t)(base), gdzie jest indeksowane 1. Zwraca BigInt.t

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

Wypróbuj online!

Arnauld
źródło
Czy potrzebujesz evalw pierwszej wersji? +zaoszczędziłby 5 bajtów ...
Neil
I BigIntzapisuje dwa bajty w drugiej wersji, ponieważ nie trzeba dodawać ndo ciągu.
Neil
(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xjest o 1 char krótszy
Qwertiy
@Qwertiy To właściwie 1 bajt dłużej, ponieważ musielibyśmy dodać f=(ponieważ funkcja sama się odwołuje).
Arnauld
@Arnauld, ups. To ten n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Jeśli połączenie f(t)(b)()jest dozwolone.
Qwertiy
5

05AB1E , 5 bajtów

>IF¹B

Wypróbuj online!

Wyjaśnienie

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

Zauważ, że nie ma potrzeby jawnego rozpoczynania sekwencji o godzinie 11 .
Rozpoczęcie base+1i wykonanie dodatkowej iteracji spowoduje, że pierwsza iteracja da 11 .

Emigna
źródło
3

Japt , 9 bajtów

ÆB=sV n
B

Spróbuj

(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
Wcielenie ignorancji
źródło
To nigdy nie będzie w stanie wygenerować pierwszego terminu, prawda?
Kudłaty
@Shaggy Naprawiono kosztem dwóch bajtów
of Ignorance
Ładnie uratowane :) Nie pomyślałbym o tym, żeby zrobić to sam.
Kudłaty
2

Siatkówka , 67 bajtów

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

Wypróbuj online! Pobiera dane oddzielone przecinkami t (indeksowane 0) b . Wykonuje wszystkie swoje obliczenia jednostajnie, więc przeterminowuje duże liczby. Wyjaśnienie:

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

Zainicjuj x0=11 i przekonwertuj b na unary.

"$+"{`

Powtórz t razy.

^\d+
*

Konwertuj xja na unary.

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

Konwertuj na bazę b .

,_+

Usuń b wyniku.

Neil
źródło
2

Python 2 , 71 bajtów

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

Wypróbuj online!

0-indeksowane.

Chas Brown
źródło
2

Clojure , 109 bajtów

Kredyt dla MilkyWay90 za usunięcie 10 bajtów przez wykrycie niepotrzebnych spacji. Kredyt na Embodiment of Ignorance dla kolejnego bajtu z innej niepotrzebnej przestrzeni

Grał w golfa

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

Nie golfił

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

Myślę, że głównym miejscem, w którym można by zapisać bajty, jest wyrażenie na ... remiksowanie? jakkolwiek to by się nazywało. Konkretnie:

(read-string (. (new BigInteger (str value)) (toString base)))
użytkownik70585
źródło
Potrzebujesz tych miejsc? Czy potrafisz eliminować spacje?
MilkyWay90
Nawet nie przyszło mi do głowy, by usunąć spacje, w których oddzielali rzeczy składniowo zróżnicowane; wygląda na to, że Clojure jest nieco bardziej liberalny niż myślałem. Dziękuję Ci!
user70585
Wciąż jest niepotrzebne miejsce w(if (= t 1)
Embodiment of Ignorance
Whoop, good catch 👍
user70585
93 bajty
Embodiment of Ignorance
1

Perl 6 , 28 bajtów

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

Wypróbuj online!

Indeks do sekwencji jest zerowy.

Sean
źródło
1

Galaretka , 8 7 bajtów

‘b³Ḍ$⁴¡

Wypróbuj online!

btb+1

Wyjaśnienie

‘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
źródło
Wyjaśnienie dla tych z nas, którzy nie potrafią szybko rozpoznać atomów?
MilkyWay90
1

pieprzenie mózgu , 270 bajtów

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

Wypróbuj online!

0-indeksowane. Przyjmuje się, że liczba iteracji wynosi maksymalnie 255.

Wyjaśnienie

Taśma jest ułożona w następujący sposób:

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

Każda cyfra jest faktycznie przechowywana jako ta cyfra plus 1, przy czym 0 jest zarezerwowane na „więcej cyfr”. Podczas konwersji bazy aktualnie przetwarzane cyfry są przenoszone o jedną komórkę w prawo, a baza jest przenoszona na lewo od bieżącego obszaru roboczego.

++<<++              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
źródło
0

Węgiel drzewny , 14 bajtów

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

tb

≔11ζ

x0=11

FN

b

≔⍘IζIηζ

xja

ζ

xt

Neil
źródło
0

C (gcc) , 59 bajtów

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;}

Wypróbuj online!

attinat
źródło
0

PHP , 83 75 bajtów

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

Wypróbuj online!

Ten będzie działał tylko z „małymi” liczbami (np. Nie będzie przypadków testowych 1 i 4)

rollstuhlfahrer
źródło
0

Japt , 10 bajtów

0-indeksowane. Pobiera tjako pierwsze wejście, bjako drugie.

_ìV ì}gBìC

Spróbuj

Kudłaty
źródło
0

Gaia , 8 bajtów

Bd
11@↑ₓ

Wypróbuj online!

iterationsWówczas przyjmuje 0 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
źródło
0

Perl 5 -Mbigint -pa , 65 bajtów

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

Wypróbuj online!

Xcali
źródło