Para crescimento exponencial de dígitos e além!


18

Desafio

Dada uma base 1<b<10 e um índice t≥1 , termo de saída xt , definido da seguinte forma:

  • x1=1110
  • xi+1 é obtido convertendoem basee reinterpretando seus dígitos na basexib10
  • A saída deve estar na base10

Uma caminhada pela base 5, termo 5, seria:

  • x1=1110 .
  • 1110=215 x 2 = 21 10 então .x2=2110
  • 2110=415 entãox3=4110 .
  • 4110=1315 entãox4=13110 .
  • 13110=10115 entãox5=101110 .
  • Nós produzimos a string "1011"ou o número inteiro 1011.

Casos de teste

Nota: estes são um indexado

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

Notas

  • Não são permitidas brechas padrão
  • Qualquer método de E / S padrão é permitido
  • Você pode usar índices diferentes (como 0, 1, 2, etc) para t
  • Você pode emitir os primeiros termos t .
  • Como se trata de , o código mais curto vence para esse idioma

1
Temos que suportar números maiores ou apenas números de até 2 ^ 31 - 1?
— Modalidade de ignorância

1
@EmbodimentofIgnorance O máximo do seu idioma (Lembre-se da brecha padrão, no entanto!)
— MilkyWay90

Existe um desafio que inclua bases> 10? (Nesse caso, você interpretaria repetidamente 11como se estivesse na base be a converteria novamente na base 10, etc.)
— Neil

@ Neil Eu não incluí bases maiores que 10, já que (por exemplo) 4anão seria um número válido na base 10
— MilkyWay90

Você não entenderia 4a, pois interpretaria os dígitos da base 10 como base be converteria na base 10 a cada vez (isto é, o contrário desta pergunta).
— Neil

Respostas:


6

JavaScript (Node.js) , 40 bytes

Obrigado a @Neil por salvar 5 bytes nesta versão e 2 bytes na versão BigInt

Recebe entrada como (t)(base), onde t é indexado em 1.

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

Experimente online!


JavaScript (Node.js) , 48 bytes (versão BigInt)

Recebe entrada como (t)(base), onde t é indexado em 1. Retorna um BigInt.

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

Experimente online!


Você precisa evalna primeira versão? +economizaria 5 bytes ...
— Neil

E BigIntsalva dois bytes na segunda versão, porque você não precisa adicionar nà string.
— Neil

(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xé 1 char mais curto
— Qwertiy

@ Qwertiy Na verdade, é 1 byte mais longo, porque precisaríamos acrescentar f=(já que a função está se referenciando).
— Arnauld

@ Arnauld, oops. Então este n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Se a chamada f(t)(b)()for permitida.
— Qwertiy

5

05AB1E , 5 bytes

>IF¹B

Experimente online!

Explicação

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

Observe que não há necessidade de iniciar explicitamente a sequência em 11 .
Iniciar base+1e executar uma iteração extra resultará na primeira iteração fornecendo 11 .


3

Japonês , 9 bytes

ÆB=sV n
B

Tente

(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

Isso nunca será capaz de gerar o primeiro termo, será?
— Shaggy

@Shaggy Corrigido ao custo de dois bytes
— Modalidade de Ignorância

Bem guardado :) Não teria pensado nisso.
— Shaggy


2

Retina , 67 bytes

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

Experimente online!Toma entradas separadas por vírgula t (indexado a 0) e b . Como todos os seus cálculos são unários, o tempo limite para números grandes é excedido. Explicação:

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

Inicializar x0=11 e convertab em unário.

"$+"{`

Repita t vezes.

^\d+
*

Converta xi em unário.

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

Converta para a base b .

,_+

Exclua b da saída.



2

Clojure , 109 bytes

Crédito para MilkyWay90 por remover 10 bytes, detectando espaços desnecessários Crédito para incorporação de ignorância por outro byte de outro espaço desnecessário

Golfe

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

Eu acho que o principal local bytes podem ser salvos é a expressão para ... re-mixagem? como quer que isso fosse chamado. Especificamente:

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

Você precisa desses espaços? Você pode eliminar espaços?
— MilkyWay90

Nem me ocorreu remover espaços onde eles estavam separando coisas sintaticamente diferenciáveis; parece que Clojure é um pouco mais permissivo do que eu pensava. Obrigado!
— user70585 20/05

Ainda há um espaço desnecessário(if (= t 1)
— Embodiment of Ignorance

Opa, boa captura 👍
— user70585



1

Geléia , 8 7 bytes

‘b³Ḍ$⁴¡

Experimente online!

btb+1

Explicação

‘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

Explicação para aqueles de nós que não conseguem reconhecer átomos rapidamente?
— MilkyWay90




1

cérebro , 270 bytes

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

Experimente online!

Indexado a 0. Presume-se que o número de iterações seja no máximo 255.

Explicação

A fita é apresentada da seguinte forma:

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

Cada dígito é realmente armazenado como esse dígito mais 1, com 0 reservado para "sem mais dígitos". Durante a conversão da base, os dígitos atualmente sendo trabalhados são movidos uma célula para a direita e a base é movida para a esquerda da área de trabalho atual.

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

Carvão , 14 bytes

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

tb

≔11ζ

x0 0=11

FN

b

≔⍘IζIηζ

xEu

ζ

xt





0

PHP , 83 75 bytes

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

Experimente online!

Este funcionará apenas com números "pequenos" (por exemplo, não nos casos de teste 1 e 4)


0

Japt , 10 bytes

Indexado a 0. Toma tcomo a primeira entrada, bcomo a segunda.

_ìV ì}gBìC

Tente


0

Gaia , 8 bytes

Bd
11@↑ₓ

Experimente online!

Leva 0 com base iterationsentão 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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.