Силы, которые хотят иметь возможность быстро конвертировать любое число, которое у них есть, в свою собственную базу номеров, используя любой формат, который они хотят.
вход
Ваша программа должна принимать 3 параметра.
- Номер: номер строки для преобразования
- InputFormat: базовая строка, в которой находится номер
- OutputFormat: базовая строка, в которую нужно преобразовать число.
Выход
Ваша программа должна преобразовать Number
из старой базы InputFormat
в новую.OutputFormat
Примеры
("1","0123456789","9876543210") = "8"
("985724","9876543210","0123456789ABCDEF") = "37C3"
("FF","0123456789ABCDEF","0123456789") = "255"
("FF","0123456789ABCDEF","01234567") = "377"
("18457184548971248772157", "0123456789","Aa0Bb1Cc2Dd3Ee4Ff5Gg6Hh7Ii8Jj9Kk,Ll.Mm[Nn]Oo@Pp#Qq}Rr{Ss-Tt+Uu=Vv_Ww!Xx%Yy*Zz") = ",sekYFg_fdXb"
дополнительный
Новый тест Base 77 не требуется реквизит, если он работает, хотя
- если вы говорите на языке, где вы должны сначала преобразовать число в число и заблокированы в пределах 32 бит, вы можете пропустить его.
- как это дополнительный тест.
Все примеры были сгенерированы PHP 7.2 с расширением bcmath с использованием следующего кода (vars mins, но отформатированный код). вероятно, будет более короткий путь, и именно так я и придумал для системы, с которой мне нужно было это сделать, было бы неплохо, если бы кто-нибудь смог придумать более короткую версию.
PHP 7.2 (bcmath - расширение) 614 байт
<?php
function f($a, $b, $c)
{
$d= str_split($b,1);
$e= str_split($c,1);
$f= str_split($a,1);
$g=strlen($b);
$h=strlen($c);
$k=strlen($a);
$r='';
if ($c== '0123456789')
{
$r=0;
for ($i = 1;$i <= $k; $i++)
$retval = bcadd($retval, bcmul(array_search($f[$i-1], $d),bcpow($g,$k-$i)));
return $r;
}
if ($b!= '0123456789')
$l=f($a, $b, '0123456789');
else
$l= $a;
if ($l<strlen($c))
return $e[$l];
while($l!= '0')
{
$r= $e[bcmod($l,$h)].$r;
$l= bcdiv($l,$h,0);
}
return $r;
}
счет
Это код гольф; самый короткий код выигрывает. Применяются стандартные лазейки.
источник
["zX", "tXdsyqzSDRP02", "brFNC02bc"] => "cb"
. (или что бы это ни было на самом деле, если это неверно)Ответы:
MATL , 2 байта
Попробуйте онлайн!
Все тестовые случаи.
За За господин !
источник
Za
сделал базовое преобразование, но документы на matl.suever не было ясно, что он принимает символы базы, поэтому я не пробовал это. Разорви меня!R , 124 байта
Попробуйте онлайн!
Тьфу, это было глупо. Я использую типичные базовые приемы преобразования для R, но манипуляции со строками в R все еще грязные!
источник
log(N+1,T)
но иногда приводите кlog(N+!N,T)
конечно, использовать!
с оригинальным значениемAPL (Dyalog Unicode) , 22 байта
Анонимный инфикс лямбда. Принимает в
InputFormat
качестве левого аргумента и вOutputFormat
качестве правого аргумента и запрашиваетNumber
от стандартного ввода. Предполагается⎕IO
( я ndex O rigin)0
, что по умолчанию во многих системах.Попробуйте онлайн!
{
…}
"Дфн";⍺
левый аргумент,⍵
правый аргумент(мнемоника: левый и правый концы греческого алфавита)
⍵[
…]
Индексировать выходной формат следующим образом:⎕
запрос на ввод⍺⍳
указатели этих символов в формате ввода(
…)⊥
Оценивать как находящуюся в следующей базе:≢⍺
длина формата ввода⊢
дать это (отделяется¯1
от(≢⍺)
)(
…)⊥⍣¯1
Преобразовать в следующую базу:≢⍺
длина выходного форматаисточник
Japt, 5 байт
Возвращение в гольф после двухнедельного перерыва
Попытайся
объяснение
источник
C (gcc), 79 + 46 = 125 байт
Это должно быть скомпилировано с
флаг. (Да, это невероятно схематично, поэтому я держу свой старый ответ ниже.) Это определяет макрос,
f
который выводит ответ на STDOUT.Попробуйте онлайн!
C (gcc),
133131 байтПопробуйте онлайн!
Это определяет функцию,
f
которая выводит ответ на STDOUT.источник
putchar
вместоwrite
и слегка меняя цикл декодирования: попробуйте онлайн!index
функция спасла мне и один байт благодаря моему подходу, я не знал об этом;)05AB1E , 5 байтов
Попробуйте онлайн!
Это не работает в устаревшей версии 05AB1E. Это работает только на новой версии, переписать Elixir.
Как это работает
источник
MATL , 5 байтов
sundar нашел настоящий встроенный для этого! Пойди, проголосуй за этот ответ вместо моего тупого :-(
Попробуйте онлайн!
источник
Древесный уголь , 5 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
BaseString
Функция автоматически преобразует числа и строки в зависимости от типа первого параметра.источник
Python 2 ,
132129122121 байтПопробуйте онлайн!
Анонимная функция (спасибо, Эрик, Outgolfer !), Которая преобразует исходное число в целое число 10, а затем передает целое число и новую базовую строку в функцию g (), которая рекурсивно преобразуется в новую базу. Теперь передается длина OutputFormat в качестве параметра для g ().
Обновлен g () для более низкого количества пользователей. (спасибо, Деннис !)
Заменил index () на find (). (спасибо, мистер Xcoder !)
Ungolfed Объяснение:
источник
f=
, анонимные функции разрешены по умолчанию.g=lambda n,c:c[n:n+1]or g(n/len(c),c)+c[n%len(c)]
.lambda n,a,b:g(sum(len(a)**i*a.find(j)for i,j in enumerate(n[::-1])),b,len(b))
.Желе , 11 байт
Попробуйте онлайн!
Порядок аргументов: InputFormat, Number, OutputFormat. Обязательно процитируйте аргументы с правильным побегом!
источник
Pyth, 21 байт
Тестирование
Объяснение:источник
Haskell , 119 байт
Попробуйте онлайн!
источник
Perl 6 ,
10097 байтПопробуйте онлайн!
Блок анонимного кода, который принимает 3 строки в порядке ввода, ввода, ввода и вывода, а затем возвращает строку
Объяснение:
источник
VBA, 182 байта
Объявленная подпрограмма, которая принимает данные
n
на языкеy
и проецирует их на языкz
.источник
JavaScript (ES6),
9086 байтПринимает вход как
(input_format)(output_format)(number)
.Попробуйте онлайн!
источник
C (gcc) ,
130129 байтовПопробуйте онлайн!
-1 байт, используя
index
вместоstrchr
.Это простой итеративный подход, повторное использование некоторых переменных (и, следовательно, злоупотребление
sizeof(int) == sizeof(char *)
TIO) для сохранения байтов.Входные данные:
i
входной номерs
исходные базовые символыt
целевые базовые символыВыход:
r
номер результата (указатель на буфер)Объяснение:
источник
bcopy(r,r+1,++i)
вместоmemmove(r+1,r,++i)
Python 2 ,
9795 байтСпасибо Часу Брауну за -2 байта.
Попробуйте онлайн!
источник
Java 10, 131 байт
Лямбда, принимающая параметры по порядку в виде строк и возвращающая строку.
Попробуйте онлайн
Ungolfed
источник