До экспоненциального роста цифр и не только!

18

Вызов

Учитывая основание и индекс , выведите член , определенный следующим образом:1<б<10T1ИксT

  • Икс1знак равно1110
  • Икся+1 х я б 10 получается путем преобразования в базу и последующего переосмысления его цифр в базеИксяб10
  • Выход должен быть в базе10

Прогулка до основания 5, срок 5 будет:

  • Икс1знак равно1110 .
  • 1110знак равно215 поэтому .Икс2знак равно2110
  • 2110знак равно415 поэтому .Икс3знак равно4110
  • 4110знак равно1315 поэтому .Икс4знак равно13110
  • 13110знак равно10115 поэтому .Икс5знак равно101110
  • Мы выводим строку "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-индексированный и т. Д.) ДляT
  • Вы можете вывести первые термины.T
  • Поскольку это , самый короткий код выигрывает для этого языка
MilkyWay90
источник
1
Нужно ли поддерживать большие числа или просто числа до 2 ^ 31 - 1?
Воплощение Неведения
1
@EmbodimentofIgnorance Максимум вашего языка (хотя помните стандартную лазейку!)
MilkyWay90
Есть ли проблема, которая включает в себя базы> 10? (В этом случае вы неоднократно интерпретировали 11бы, как если бы он был в базе, bи преобразовали его обратно в базу 10 и т. Д.)
Нейл
@Neil Я не включил базы выше 10, поскольку (например) 4aне будет действительным числом в base-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

Попробуйте онлайн!

Arnauld
источник
Нужно ли evalв первой версии? +сэкономит 5 байт ...
Нейл
И BigIntсохраняет два байта во второй версии, потому что вам не нужно добавлять nв строку.
Нейл
(b,t,x=11)=>--t?f(b,t,+x.toString(b)):xна 1 символ короче
Qwertiy
@Qwertiy На самом деле это на 1 байт длиннее, потому что нам нужно было бы добавить f=(так как функция ссылается сама на себя).
Арно
@ Арно, ой. Тогда этот 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 .

Emigna
источник
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
,_+

Попробуйте онлайн! Принимает разделенные запятыми вводы T (0-indexed) и б . Делает все свои расчеты в одинарном, так что время ожидания для больших чисел. Объяснение:

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

Инициализируйте Икс0знак равно11 и преобразуйте б в унарный.

"$+"{`

Повторите T раз.

^\d+
*

Перевести Икся в одинарный.

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

Преобразовать в базу б .

,_+

Удалить б из вывода.

Нил
источник
2

Clojure , 109 байт

Благодарим MilkyWay90 за удаление 10 байт, обнаруживая ненужные пробелы. Кредит на Embodiment of Ignorance за другой байт из другого ненужного пробела.

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

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

Я думаю, что главное место байтов можно сохранить - это выражение для ... перераспределения? как бы это ни называлось. В частности:

(read-string (. (new BigInteger (str value)) (toString base)))
user70585
источник
Вам нужны эти места? Вы можете устранить пробелы?
MilkyWay90
Мне даже не пришло в голову удалить пробелы, где они разделяли синтаксически различимые вещи; похоже, что Clojure немного более разрешительный, чем я думал. Спасибо!
user70585
Существует еще ненужное пространство(if (= t 1)
Воплощение Неведении
Ух
ты
93 байта
воплощение невежества
1

Желе , 8 7 байт

‘b³Ḍ$⁴¡

Попробуйте онлайн!

бTб+1

объяснение

‘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
Ник Кеннеди
источник
Объяснение для тех из нас, кто не может распознать атомы одним взглядом?
MilkyWay90
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
Nitrodon
источник
0

Древесный уголь , 14 байтов

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

Tб

≔11ζ

Икс0знак равно11

FN

б

≔⍘IζIηζ

Икся

ζ

ИксT

Нил
источник
0

PHP , 83 75 байт

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

Попробуйте онлайн!

Этот будет работать только с «маленькими» числами (например, не тестовые случаи 1 и 4)

rollstuhlfahrer
источник
0

Japt , 10 байт

0 индексированные. Принимает tкак первый вход, bтак и второй.

_ìV ì}gBìC

Попытайся

мохнатый
источник
0

Gaia , 8 байт

Bd
11@↑ₓ

Попробуйте онлайн!

Принимает 0 на основе iterationsтогда 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
источник