Фон
Большинство людей здесь должны быть знакомы с несколькими базовыми системами: десятичной, двоичной, шестнадцатеричной, восьмеричной. Например, в шестнадцатеричной системе число 12345 16 будет представлять
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Обратите внимание, что мы обычно не ожидаем, что база (здесь 16
) изменится с цифры на цифру.
Обобщение этих обычных позиционных систем позволяет использовать различную числовую базу для каждой цифры. Например, если бы мы чередовали десятичную и двоичную системы (начиная с основания 10 в наименее значащей цифре), число 190315 [2,10] будет представлять
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Обозначим эту базу как [2,10]
. Самая правая основа соответствует наименее значащей цифре. Затем вы проходите через базы (слева) и цифры (слева), оборачиваясь, если цифр больше, чем баз.
Для дальнейшего чтения см. Википедию .
Соревнование
Напишите программу или функцию, которая, учитывая список цифр D
входной базы I
и выходной базы O
, преобразует целое число, представленное как D
из базы I
в базу O
. Вы можете получить ввод через STDIN, ARGV или аргумент функции и либо вернуть результат, либо распечатать его в STDOUT.
Вы можете предположить:
- что числа в
I
иO
все больше чем1
. I
иO
не пусты.- что входной номер действителен в данной базе (т. е. ни одна цифра не превышает его базу).
D
может быть пустым (представляющим 0
) или может иметь начальные нули. Ваш вывод не должен содержать лидирующие нули. В частности, представление результата 0
должно быть возвращено как пустой список.
Вы не должны использовать какие-либо встроенные или сторонние функции преобразования базы.
Это код гольф, самый короткий ответ (в байтах) выигрывает.
Примеры
D I O Result
[1,0,0] [10] [2] [1,1,0,0,1,0,0]
[1,0,0] [2] [10] [4]
[1,9,0,3,1,5] [2,10] [10] [7,6,7,5]
[1,9,0,3,1,5] [2,10] [4,3,2] [2,0,1,1,0,1,3,0,1]
[52,0,0,0,0] [100,7,24,60,60] [10] [3,1,4,4,9,6,0,0]
[0,2,10] [2,4,8,16] [42] [1,0]
[] [123,456] [13] []
[0,0] [123,456] [13] []
источник
[]
если вход[0]
Ответы:
CJam, 45
Наконец я нашел хорошее применение
j
.Как это устроено
Long ArrayList Block j
выполняет блок, который принимает целое число в качестве параметра, иLong j
будет рекурсивно вызывать этот блок в блоке. Он также будет хранить значения, возвращаемые блоком, во внутреннем массиве, который инициализируется параметром массива. Он не будет выполнять блок, если вход уже находится в массиве, и вместо него возвращается значение в массиве.Поэтому, если я инициализирую его массивом пустого массива, пустой массив будет возвращен для ввода 0, а блок будет выполнен для любого другого ввода.
CJam,
4948Вход должен быть
O I D
.Примеры:
Как это устроено
источник
_{}?
трюк действительно хорош.{}e|
это то же самое.j
? :)CJam,
62615957 байтЧитает входные массивы как
[O I D]
из STDIN. Попробуйте онлайн.Как это устроено
Контрольные примеры
Обратите внимание, что пустые строки и пустые массивы неотличимы от CJam, поэтому
[]p
печатает""
.источник
Питон 2 - 318
Я случайно перепутал порядок рассуждений, поэтому пришлось их поменять. Я буду работать над слайс-фу, чтобы списки работали в другом направлении позже, я уже потратил впустую весь перерыв на обед: pИсправлена
источник
APL, 78
Примеры:
источник
{{⍵↓⍨1⍳⍨×⍵}(99⍴⎕)⊤⍵⊥⍨⎕⍴⍨⍴⍵}
принимает D в качестве правильного аргумента, а затем просит меня и О.Python 2 - 122
Очень просто, не удалось найти каких-либо специальных уловок гольфа в этом.
Ungolfed:
Редактировать: 116-байтовая версия программы благодаря FryAmTheEggman
Эта версия принимает ввод через запятую, например
[1,9,0,3,1,5], [2,10], [10]
источник
к2 -
8374 чарФункция принимает один аргумент. Это было намного лучше подходит для K, чем для J, поэтому я не использую J. Это было бы просто нагрузкой для упаковки / распаковки мусора, и никто этого не хочет. Это на диалекте k2 (может потребоваться некоторая адаптация для работы в реализации с открытым исходным кодом Kona), но я поменяю это на k4, если смогу там поиграть в гольф.
Отмечу, что здесь я отстаиваю придирчивость и говорю, что списки одного предмета должны быть введены как таковые.
,2
это список одного элемента, который является скаляром2
. Часто скаляры и списки из 1 элемента взаимозаменяемы, но в этом гольфе есть логика, основанная на предположении о списочных аргументах.Чтобы объяснить гольф, я разобью его на две части.
F
это гольф,L
это основной цикл, который рассчитывает выходной. Точный механизм зацикливания заключается в том, чтоL
он применяется к его аргументам несколько раз, пока второй аргумент не станет равным нулю, а затем этот результат будет возвращен. (Это.[L]/
часть.)Взрывом:
В бою:
источник
Perl 6 , 67 байт
Попытайся
Expanded:
Если вы не уверены, что делает уменьшение треугольника:
Если бы я мог взять входные данные в обратном порядке и вывести обратные, это было бы 47 байтов.
Попытайся
источник