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


18

Виклик

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

  • 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.