¡Al crecimiento exponencial de los dígitos y más allá!

18

Desafío

Dada una base y un índice , término de salida , definido de la siguiente manera:1<b<10t1xt

  • x1=1110
  • xi+1 se obtiene convirtiendo en la base y luego reinterpretando sus dígitos en la basexib10
  • La salida debe estar en la base10

Un recorrido por la base 5, término 5 sería:

  • x1=1110 .
  • 1110=215 entonces .x2=2110
  • 2110=415 entonces .x3=4110
  • 4110=1315 entonces .x4=13110
  • 13110=10115 entonces .x5=101110
  • Sacamos la cadena "1011"o el entero 1011.

Casos de prueba

Nota: estos son uno indexado

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

Notas

  • Las lagunas estándar no están permitidas
  • Se permite cualquier método de E / S predeterminado
  • Puede usar diferentes índices (como 0 indexado, 1 indexado, 2 indexado, etc.) parat
  • Puede generar los primeros términos.t
  • Como esto es , el código más corto gana para ese idioma
MilkyWay90
fuente
1
¿Tenemos que admitir números más grandes o solo números hasta 2 ^ 31 - 1?
Encarnación de la ignorancia
1
@EmbodimentofIgnorance El máximo de su idioma (¡recuerde la laguna estándar, sin embargo!)
MilkyWay90
¿Hay algún desafío que incluya bases> 10? (En ese caso, interpretaría repetidamente 11como si estuviera en la base by la convertiría de nuevo a la base 10, etc.)
Neil
@Neil No incluí bases superiores a 10 ya que (por ejemplo) 4ano sería un número válido en base-10
MilkyWay90
No obtendría 4a, ya que estaría interpretando los dígitos de base 10 como base by convirtiendo a base 10 cada vez (es decir, al revés de esta pregunta).
Neil

Respuestas:

6

JavaScript (Node.js) , 40 bytes

Gracias a @Neil por guardar 5 bytes en esta versión y 2 bytes en la versión BigInt

Toma la entrada como (t)(base), donde está indexado en 1.t

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

Pruébalo en línea!


JavaScript (Node.js) , 48 bytes (versión BigInt)

Toma la entrada como (t)(base), donde está indexado en 1. Devuelve un BigInt.t

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

Pruébalo en línea!

Arnauld
fuente
¿Necesitas evalen la primera versión? +ahorraría 5 bytes ...
Neil
Y BigIntguarda dos bytes en la segunda versión, porque no necesita agregar na la cadena.
Neil
(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xes 1 char más corto
Qwertiy
@Qwertiy En realidad es 1 byte más largo, porque necesitaríamos anteponer f=(ya que la función hace referencia a sí misma).
Arnauld
@Arnauld, vaya. Entonces este n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Si f(t)(b)()se permite la llamada .
Qwertiy
5

05AB1E , 5 bytes

>IF¹B

Pruébalo en línea!

Explicación

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

Tenga en cuenta que no hay necesidad de iniciar explícitamente la secuencia en 11 .
Comenzar base+1y realizar una iteración adicional dará como resultado que la primera iteración dé 11 .

Emigna
fuente
3

Japt , 9 bytes

ÆB=sV n
B

Intentalo

(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
Encarnación de la ignorancia
fuente
Esto nunca será capaz de generar el primer término, ¿verdad?
Shaggy
@Shaggy Corregido a costa de dos bytes
Encarnación de la ignorancia
Bien guardado :) No habría pensado en hacerlo yo mismo.
Shaggy
2

Retina , 67 bytes

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

Pruébalo en línea! Toma entradas separadas por comas t (indexadas en 0) y b . Hace todos sus cálculos en unario, por lo que se agota el tiempo para grandes números. Explicación:

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

x0=11b

"$+"{`

t

^\d+
*

xi

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

b

,_+

b

Neil
fuente
2

Clojure , 109 bytes

Crédito a MilkyWay90 por eliminar 10 bytes al detectar espacios innecesarios Crédito a la Realización de la ignorancia por otro byte de otro espacio innecesario

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

Sin golf

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

Creo que el lugar principal donde se pueden guardar los bytes es la expresión para ... ¿volver a mezclar? como se llame eso. Específicamente:

(read-string (. (new BigInteger (str value)) (toString base)))
usuario70585
fuente
¿Necesitas esos espacios? ¿Puedes eliminar espacios?
MilkyWay90
Ni siquiera se me ocurrió eliminar espacios donde separaban cosas sintácticamente diferenciables; Parece que Clojure es un poco más permisivo de lo que pensaba. ¡Gracias!
user70585
Todavía hay un espacio innecesario en(if (= t 1)
Encarnación de la ignorancia
Whoop, buena captura 👍
user70585
93 bytes
Encarnación de la ignorancia
1

Jalea , 8 7 bytes

‘b³Ḍ$⁴¡

Pruébalo en línea!

btb+1

Explicación

‘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
fuente
¿Explicación para aquellos de nosotros que no podemos reconocer átomos de un vistazo rápido?
MilkyWay90
1

brainfuck , 270 bytes

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

Pruébalo en línea!

0 indexado. Se supone que el número de iteraciones es como máximo 255.

Explicación

La cinta se presenta de la siguiente manera:

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

Cada dígito se almacena realmente como ese dígito más 1, con 0 reservado para "no más dígitos". Durante la conversión de la base, los dígitos que se están trabajando actualmente se mueven una celda a la derecha, y la base se mueve a la izquierda del área de trabajo actual.

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

Carbón , 14 bytes

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

tb

≔11ζ

x0=11

FN

b

≔⍘IζIηζ

xi

ζ

xt

Neil
fuente
0

PHP , 83 75 bytes

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

Pruébalo en línea!

Este solo funcionará con números "pequeños" (por ejemplo, no los casos de prueba 1 y 4)

rollstuhlfahrer
fuente
0

Japt , 10 bytes

0 indexado. Toma tcomo la primera entrada, bcomo la segunda.

_ìV ì}gBìC

Intentalo

Lanudo
fuente
0

Gaia , 8 bytes

Bd
11@↑ₓ

Pruébalo en línea!

Toma basado en 0 iterationsentonces 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
fuente