Zum exponentiellen Ziffernwachstum und darüber hinaus!

18

Herausforderung

Ausgehend von einer Basis und einem Index wird der Ausgabeterm wie folgt definiert:1<b<10t1xt

  • x1=1110
  • xi+1 x i b 10 wird erhalten, indem zur Basis konvertiert und dann seine Ziffern in der Basis neu interpretiert werdenxib10
  • Die Ausgabe sollte in Basis10

Ein Spaziergang durch Basis 5, Term 5, wäre:

  • x1=1110 .
  • 1110=215 × 2 = 21 10 also .x2=2110
  • 2110=415 × 3 = 41 10 also .x3=4110
  • 4110=1315 also .x4=13110
  • 13110=10115 also .x5=101110
  • Wir geben den String "1011"oder die ganze Zahl aus 1011.

Testfälle

Hinweis: Dies sind indizierte

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

Anmerkungen

  • Standardlücken sind nicht erlaubt
  • Jede Standard-E / A-Methode ist zulässig
  • Sie können verschiedene Indizes (z. B. 0-indexiert, 1-indexiert, 2-indexiert usw.) fürt
  • Sie können die ersten Terme ausgeben .t
  • Da dies , gewinnt der kürzeste Code für diese Sprache
MilkyWay90
quelle
1
Müssen wir größere Zahlen unterstützen oder nur Zahlen bis zu 2 ^ 31 - 1?
Verkörperung der Ignoranz
1
@EmbodimentofIgnorance Das Maximum Ihrer Sprache (Beachten Sie jedoch die Standardlücke!)
MilkyWay90
Gibt es eine Herausforderung, die Basen> 10 umfasst? (In diesem Fall würden Sie wiederholt interpretieren, 11als ob es in der Basis wäre, bund es zurück in die Basis 10 usw. konvertieren.)
Neil,
@Neil Ich habe keine höheren Basen als 10 angegeben, da (zum Beispiel) 4akeine gültige Zahl in base-10
MilkyWay90
Das würden Sie nicht bekommen 4a, da Sie die 10er-Stellen der Basis als Basis interpretieren bund jedes Mal in die 10er-Basis konvertieren würden (dh umgekehrt von dieser Frage).
Neil

Antworten:

6

JavaScript (Node.js) , 40 Byte

Vielen Dank an @Neil für das Speichern von 5 Bytes in dieser Version und 2 Bytes in der BigInt-Version

Nimmt die Eingabe als an (t)(base), wobei t 1-indiziert ist.

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

Probieren Sie es online!


JavaScript (Node.js) , 48 Byte (BigInt-Version)

Nimmt die Eingabe als an (t)(base), wobei t 1-indiziert ist. Gibt ein BigInt zurück.

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

Probieren Sie es online!

Arnauld
quelle
Müssen Sie evalin der ersten Version? +würde 5 Bytes sparen ...
Neil
Und BigIntspart in der zweiten Version zwei Bytes, da Sie nden String nicht ergänzen müssen .
Neil
(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xist 1
Zeichen
@Qwertiy Es ist tatsächlich 1 Byte länger, weil wir voranstellen müssten f=(da die Funktion sich selbst referenziert).
Arnauld
@Arnauld, hoppla. Dann dieses n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Wenn Anruf f(t)(b)()erlaubt ist.
Qwertiy
5

05AB1E , 5 Bytes

>IF¹B

Probieren Sie es online!

Erläuterung

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

Beachten Sie, dass die Sequenz nicht explizit bei 11 beginnen muss .
Wenn Sie mit base+1einer zusätzlichen Iteration beginnen, wird die erste Iteration 11 ergeben .

Emigna
quelle
3

Japt , 9 Bytes

ÆB=sV n
B

Versuch es

(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
Verkörperung der Ignoranz
quelle
Dies wird niemals in der Lage sein, den ersten Ausdruck auszugeben, oder?
Shaggy
@ Shaggy Auf Kosten von zwei Bytes
Verkörperung der Ignoranz
Schön gerettet :) Hätte nicht gedacht, das selbst zu tun.
Shaggy
2

Retina , 67 Bytes

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

Probieren Sie es online! Übernimmt kommagetrennte Eingaben t (0-indiziert) und b . Wenn alle Berechnungen unärgerlich sind, ist die Zeit für große Zahlen abgelaufen. Erläuterung:

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

Initialisiere x0=11 und wandle b in unär um.

"$+"{`

Wiederholen Sie t mal.

^\d+
*

Wandle xi in unär um.

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

In Basis konvertieren b .

,_+

Löschen Sie b aus der Ausgabe.

Neil
quelle
2

Python 2 , 71 Bytes

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

Probieren Sie es online!

0-indiziert.

Chas Brown
quelle
2

Clojure , 109 Bytes

Dank an MilkyWay90 für das Entfernen von 10 Bytes durch Auffinden unnötiger Leerzeichen. Dank an Ausführungsform der Ignoranz für ein anderes Byte aus einem anderen unnötigen Leerzeichen

Golf gespielt

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

Ich denke, dass die Hauptplatzbytes gespeichert werden könnten, ist der Ausdruck für ... erneutes Mischen? wie auch immer das heißen würde. Speziell:

(read-string (. (new BigInteger (str value)) (toString base)))
user70585
quelle
Benötigen Sie diese Räume? Können Sie Leerzeichen entfernen?
MilkyWay90
Mir ist nicht einmal der Gedanke gekommen, Räume zu entfernen, in denen syntaktisch unterscheidbare Dinge voneinander getrennt sind. sieht aus wie Clojure ist ein bisschen freizügiger als ich dachte. Vielen Dank!
user70585
Es ist immer noch unnötig Platz in(if (= t 1)
Verkörperung der Ignoranz
Whoop, guter Fang 👍
user70585
93 Bytes
Verkörperung der Ignoranz
1

Perl 6 , 28 Bytes

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

Probieren Sie es online!

Der Index in der Sequenz basiert auf Null.

Sean
quelle
1

Gelee , 8 7 Bytes

‘b³Ḍ$⁴¡

Probieren Sie es online!

btb+1

Erläuterung

‘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
quelle
Erklärung für diejenigen von uns, die auf einen Blick keine Atome erkennen können?
MilkyWay90
1

Brainfuck , 270 Bytes

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

Probieren Sie es online!

0-indiziert. Es wird angenommen, dass die Anzahl der Iterationen höchstens 255 beträgt.

Erläuterung

Das Band ist wie folgt aufgebaut:

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

Jede Ziffer wird tatsächlich als diese Ziffer plus 1 gespeichert, wobei 0 für "keine weiteren Ziffern" reserviert ist. Während der Basiskonvertierung werden die aktuell bearbeiteten Ziffern um eine Zelle nach rechts und die Basis links vom aktuellen Arbeitsbereich verschoben.

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

Holzkohle , 14 Bytes

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

tb

≔11ζ

x0=11

FN

b

≔⍘IζIηζ

xi

ζ

xt

Neil
quelle
0

PHP , 83 75 Bytes

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

Probieren Sie es online!

Dieser funktioniert nur mit "kleinen" Zahlen (zB nicht mit Testfällen 1 und 4)

rollstuhlfahrer
quelle
0

Japt , 10 Bytes

0-indiziert. Nimmt tals erste Eingabe, bals zweite.

_ìV ì}gBìC

Versuch es

Zottelig
quelle
0

Gaia , 8 Bytes

Bd
11@↑ₓ

Probieren Sie es online!

Nimmt 0-basiert iterationsdann 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
quelle
0

Perl 5 -Mbigint -pa , 65 Bytes

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

Probieren Sie es online!

Xcali
quelle