Для експоненціального розростання цифр і далі!


18

Виклик

Враховуючи базу 1<b<10 та індекс , вихідний термін , визначений так:t1xt

  • x1=1110
  • xi+1 отримують шляхом перетворенняxi в базуb та реінтерпретації її цифр у базі10
  • Вихід повинен бути в базі 10

Прохід до базової частини 5, термін 5 буде такою:

  • x1=1110 .
  • 1110=215 такx2=2110 .
  • 2110=415 такx3=4110 .
  • 4110=1315 такх4=13110 .
  • 13110=1011 рік5 такх5=1011 рік10 .
  • Виводимо рядок "1011"або ціле число 1011.

Випробування

Примітка: це один індексований

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

Примітки

  • Стандартні лазівки заборонені
  • Дозволений будь-який метод вводу / виводу за замовчуванням
  • Ви можете використовувати різні індекси (наприклад, 0-індексований, 1-індексований, 2-індексований тощо) для т
  • Ви можете виводити перший т терміни.
  • Оскільки це , найкоротший код виграє для цієї мови

1
Чи потрібно підтримувати більші числа чи просто числа до 2 ^ 31 - 1?
Втілення

1
@EmbodimentofIgnorance Максимум вашої мови (пам’ятайте, однак, стандартну лазівку!)
MilkyWay90

Чи є виклик, який включає бази> 10? (У такому випадку ви неодноразово інтерпретували 11так, ніби він знаходиться в базі bі перетворюєте його назад на базу 10 тощо)
Ніл

@Neil Я не включав бази, що перевищують 10, оскільки (наприклад) 4aне було б дійсним числом у базовій частині 10
MilkyWay90

Ви цього не отримаєте 4a, оскільки ви будете інтерпретувати базові 10 цифр як базові bта перетворюватись на базові 10 кожен раз (тобто навпаки цього питання).
Ніл

Відповіді:


6

JavaScript (Node.js) , 40 байт

Завдяки @Neil за збереження 5 байт на цій версії та 2 байти на версії BigInt

Приймає введення як (t)(base), де t - 1-індексований.

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

Спробуйте в Інтернеті!


JavaScript (Node.js) , 48 байт (версія BigInt)

Приймає введення як (t)(base), де t - 1-індексований. Повертає BigInt.

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

Спробуйте в Інтернеті!


Вам потрібно evalв першій версії? +врятувало б 5 байт ...
Ніл

І BigIntзберігає два байти у другій версії, тому що вам не потрібно додавати nв рядок.
Ніл

(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xна 1 чар коротший
Квертій

@Qwertiy Насправді на 1 байт довше, тому що нам потрібно буде зробити попередній час f=(оскільки функція посилається на себе).
Арнольд

@Arnauld, ой. Тоді цей n=>b=>g=(x=11n)=>--n?g(BigInt(x.toString(b))):x:) Якщо дзвінок f(t)(b)()дозволений.
Qwertiy

5

05AB1E , 5 байт

>IF¹B

Спробуйте в Інтернеті!

Пояснення

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

Зауважте, що немає необхідності явно починати послідовність у 11 .
Починаючи з base+1та виконуючи додаткову ітерацію, це призведе до першої ітерації 11 .


3

Japt , 9 байт

ÆB=sV n
B

Спробуй це

(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

Це ніколи не зможе вивести перший термін, чи не так?
Кошлатий

@Shaggy Виправлено ціною двох байтів
Втілення Незнання

Чудово врятований :) Не подумав би це зробити сам.
Кошлатий


2

Сітківка , 67 байт

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

tb

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

x0=11б

"$+"{`

т

^\d+
*

xi

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

б

,_+

б



2

Clojure , 109 байт

Кредит MilkyWay90 для видалення 10 байт шляху виявлення зайвих прогалин кредиту варіанту Невідання для іншого байта з іншого непотрібного простору

Гольф

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

Безумовно

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

Я думаю, що основне місце байтів могло бути збережено - це вираз для ... передіаксації? як би це не називалося. Конкретно:

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

Вам потрібні ці простори? Чи можете ви усунути пробіли?
MilkyWay90

Мені навіть не спало на думку видалити пробіли, де вони розділяли синтаксично диференційовані речі; схоже, Clojure трохи дозвольніший, ніж я думав. Дякую!
користувач70585

Все ще є зайвий простір у(if (= t 1)
Втілення

Уп, хороший улов 👍
користувач70585







1

мозковий ебать , 270 байт

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

Спробуйте в Інтернеті!

0-індексований. Припускається, що кількість повторень становить не більше 255.

Пояснення

Стрічка викладається так:

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

Кожна цифра фактично зберігається як ця цифра плюс 1, при цьому 0 зарезервовано для "не більше цифр". Під час базової конверсії цифри, над якими зараз працює, переміщуються на одну клітинку праворуч, а базу переміщують ліворуч від поточної робочої області.

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









Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.