Pour une croissance exponentielle des chiffres et au-delà!

18

Défi

Étant donné une base 1<b<10 et un indice t1 , le terme de sortie xt , défini comme suit:

  • x1=1110
  • xi+1 est obtenu en convertissantxi en baseb puis en réinterprétant ses chiffres en base10
  • La sortie doit être en base 10

Une marche à suivre pour la base 5, terme 5 serait:

  • x1=1110 .
  • 1110=215 doncx2=2110 .
  • 2110=415 doncx3=4110 .
  • 4110=1315 doncx4=13110 .
  • 13110=10115 doncx5=101110 .
  • Nous sortons la chaîne "1011"ou l'entier 1011.

Cas de test

Remarque: ce sont un indexé

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

Remarques

  • Les échappatoires standard ne sont pas autorisées
  • Toute méthode d'E / S par défaut est autorisée
  • Vous pouvez utiliser différents index (tels que 0, 1, 2, etc.) pour t
  • Vous pouvez sortir le premier ttermes.
  • Comme c'est , code le plus court gagne pour cette langue
MilkyWay90
la source
1
Devons-nous prendre en charge de plus grands nombres ou simplement des nombres jusqu'à 2 ^ 31 - 1?
Incarnation de l'ignorance
1
@EmbodimentofIgnorance Le maximum de votre langue (rappelez-vous la faille standard, cependant!)
MilkyWay90
Y a-t-il un défi qui inclut des bases> 10? (Dans ce cas, vous interpréteriez à plusieurs reprises 11comme s'il était dans la base bet le reconvertissez en base 10, etc.)
Neil
@Neil Je n'ai pas inclus de bases supérieures à 10 car (par exemple) 4ane serait pas un nombre valide en base 10
MilkyWay90
Vous n'obtiendrez pas 4a, car vous interpréteriez les chiffres de base 10 comme base bet les convertiriez en base 10 à chaque fois (c'est-à-dire l'inverse de cette question).
Neil

Réponses:

6

JavaScript (Node.js) , 40 octets

Merci à @Neil d'avoir économisé 5 octets sur cette version et 2 octets sur la version BigInt

Prend l'entrée comme (t)(base), où t est indexé sur 1.

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

Essayez-le en ligne!


JavaScript (Node.js) , 48 octets (version BigInt)

Prend l'entrée comme (t)(base), où t est indexé sur 1. Renvoie un BigInt.

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

Essayez-le en ligne!

Arnauld
la source
En avez-vous besoin evaldans la première version? +sauverait 5 octets ...
Neil
Et BigIntenregistre deux octets dans la deuxième version, car vous n'avez pas besoin d'ajouter nà la chaîne.
Neil
(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xa 1 caractère de moins
Qwertiy
@Qwertiy C'est en fait 1 octet de plus, car il faudrait ajouter un préfixe f=(car la fonction se référence elle-même).
Arnauld
@Arnauld, oups. Alors celui-ci n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Si l'appel f(t)(b)()est autorisé.
Qwertiy
5

05AB1E , 5 octets

>IF¹B

Essayez-le en ligne!

Explication

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

Notez qu'il n'est pas nécessaire de démarrer explicitement la séquence à 11 .
Commencer base+1et faire une itération supplémentaire entraînera la première itération donnant 11 .

Emigna
la source
3

Japt , 9 octets

ÆB=sV n
B

Essayez-le

(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
Incarnation de l'ignorance
la source
Cela ne pourra jamais produire le premier terme, n'est-ce pas?
Shaggy
@Shaggy Fixé au prix de deux octets
Embodiment of Ignorance
Joliment sauvé :) N'aurais pas pensé faire ça moi-même.
Shaggy
2

Rétine , 67 octets

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

Essayez-le en ligne! Prend les entrées séparées par des virgules t (indexées 0) et b . Effectue tous ses calculs en unaire, donc expire pour les grands nombres. Explication:

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

Initialisez x0=11 et convertissez b en unaire.

"$+"{`

Répétez t fois.

^\d+
*

Convertissez xje en unaire.

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

Convertir en base b .

,_+

Supprimez b de la sortie.

Neil
la source
2

Python 2 , 71 octets

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

Essayez-le en ligne!

0 indexé.

Chas Brown
la source
2

Clojure , 109 octets

Crédit à MilkyWay90 pour avoir supprimé 10 octets en repérant des espaces inutiles. Crédit à Incarnation of Ignorance pour un autre octet d'un autre espace inutile.

Golfé

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

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

Je pense que les octets principaux peuvent être enregistrés est l'expression de ... retradixing? quel que soit le nom. Plus précisément:

(read-string (. (new BigInteger (str value)) (toString base)))
user70585
la source
Avez-vous besoin de ces espaces? Pouvez-vous éliminer les espaces?
MilkyWay90
Il ne m'est même pas venu à l'esprit de supprimer les espaces où ils séparaient des choses syntaxiquement différenciables; on dirait que Clojure est un peu plus permissif que je ne le pensais. Je vous remercie!
user70585
Il y a encore un espace inutile dans(if (= t 1)
Embodiment of Ignorance
Whoop, good catch 👍
user70585
93 octets
Incarnation de l'ignorance
1

Perl 6 , 28 octets

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

Essayez-le en ligne!

L'index dans la séquence est basé sur zéro.

Sean
la source
1

Gelée , 8 7 octets

‘b³Ḍ$⁴¡

Essayez-le en ligne!

Un programme complet qui prend b comme premier argument et indexé 1 tcomme deuxième argument. Renvoie l'entier du terme pertinent (et imprime implicitement). Utilise l'observation de @Emigna concernant le début deb+1.

Explication

‘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
la source
Une explication pour ceux d'entre nous qui ne peuvent pas reconnaître les atomes en un coup d'œil?
MilkyWay90
1

C # (Visual C # Interactive Compiler) , 87 octets

n=>m=>{int g=11;for(var s="";m-->0;g=int.Parse(s),s="")for(;g>0;g/=n)s=g%n+s;return g;}

5 octets enregistrés grâce à @KevinCruijssen

Essayez-le en ligne!

Incarnation de l'ignorance
la source
87 octets en changeant le do-whileen une boucle for régulière.
Kevin Cruijssen
1

brainfuck , 270 octets

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

Essayez-le en ligne!

0 indexé. Le nombre d'itérations est supposé être au maximum de 255.

Explication

La bande est présentée comme suit:

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

Chaque chiffre est en fait stocké en tant que chiffre plus 1, 0 étant réservé pour "plus de chiffres". Pendant la conversion de la base, les chiffres en cours de travail sont déplacés d'une cellule vers la droite et la base est déplacée vers la gauche de la zone de travail actuelle.

++<<++              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
la source
0

Fusain , 14 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend les entrées commet (Indexé 0) et b. Explication:

≔11ζ

X0=11.

FN

Boucle b fois.

≔⍘IζIηζ

Calculer Xje.

ζ

Production Xt.

Neil
la source
0

PHP , 83 75 octets

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

Essayez-le en ligne!

Celui-ci ne fonctionnera qu'avec des "petits" nombres (par exemple pas les cas de test 1 et 4)

rollstuhlfahrer
la source
0

Japt , 10 octets

0 indexé. Prend tcomme première entrée, bcomme seconde.

_ìV ì}gBìC

Essayez-le

Hirsute
la source
0

Gaia , 8 octets

Bd
11@↑ₓ

Essayez-le en ligne!

Prend iterationsalors sur la base de 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
la source
0

Perl 5 -Mbigint -pa , 65 octets

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

Essayez-le en ligne!

Xcali
la source