Los poderes que desean poder convertir rápidamente cualquier número que tengan en su propia base de números usando cualquier formato que deseen.
Entrada
Su programa debe aceptar 3 parámetros.
- Número: el número de cadena que se convertirá
- InputFormat: la cadena base en la que se encuentra actualmente el número
- OutputFormat: la cadena base a la que se convertirá el número.
Salida
Su programa debe convertir la Number
base de números anterior InputFormat
a la nueva base de númerosOutputFormat
Ejemplos
("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"
Adicional
La nueva prueba de base 77 no requiere accesorios si funciona
- si está en un idioma donde primero tiene que convertir a un número y está bloqueado dentro de 32 bits, puede omitirlo.
- ya que es una prueba adicional.
Todos los ejemplos fueron generados por PHP 7.2 con la extensión bcmath usando el siguiente código (vars minutos pero con formato de código). probablemente habrá una forma más corta, esta es la forma en que se me ocurrió el sistema con el que necesitaba hacer esto, sería bueno ver si alguien podría llegar a una versión más corta.
PHP 7.2 (bcmath - extensión) 614 bytes
<?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;
}
Tanteo
Este es el código de golf; el código más corto gana. Se aplican lagunas estándar.
fuente
["zX", "tXdsyqzSDRP02", "brFNC02bc"] => "cb"
. (o lo que sea que debería ser, si eso es incorrecto)Respuestas:
MATL , 2 bytes
Pruébalo en línea!
Todos los casos de prueba.
¡Por el señor Za !
fuente
Za
hizo una conversión de base pero los documentos en matl.suever no estaban claros de que aceptara los caracteres de la base, así que no lo probé ¡Rasgarme!R , 124 bytes
Pruébalo en línea!
Ugh, esto fue un doozy. Utilizo los típicos trucos de conversión de bases para R, ¡pero las manipulaciones de cadenas en R siguen siendo desordenadas!
fuente
log(N+1,T)
pero causando un cerolog(N+!N,T)
por supuesto, podría hacerlo!
con el significado originalAPL (Dyalog Unicode) , 22 bytes
Anónimo infijo lambda. Toma
InputFormat
como argumento izquierdo yOutputFormat
como argumento derecho, y solicitaNumber
desde stdin. Asume⎕IO
( I ndex O rigin) ser0
, que es predeterminado en muchos sistemas.Pruébalo en línea!
{
...}
"dfn";⍺
es argumento izquierdo,⍵
es argumento derecho(mnemónico: extremos izquierdo y derecho del alfabeto griego)
⍵[
...]
indexe el formato de salida con lo siguiente:⎕
solicitud de entrada⍺⍳
ɩ ndices de esos caracteres en el formato de entrada(
...)⊥
evaluar como estar en la siguiente base:≢⍺
la longitud del formato de entrada⊢
rendimiento que (se separa¯1
de(≢⍺)
)(
...)⊥⍣¯1
convertir a la siguiente base:≢⍺
la longitud del formato de salidafuente
Japt, 5 bytes
Volviendo al golf después de un descanso de 2 semanas
Intentalo
Explicación
fuente
C (gcc), 79 + 46 = 125 bytes
Esto debe compilarse con el
bandera. (Sí, esto es increíblemente incompleto, por eso mantengo mi respuesta anterior a continuación). Esto define una macro
f
que genera la respuesta a STDOUT.Pruébalo en línea!
C (gcc),
133131 bytesPruébalo en línea!
Esto define una función
f
que genera la respuesta a STDOUT.fuente
putchar
lugar dewrite
y cambiando ligeramente el ciclo de decodificación: ¡ Pruébelo en línea!index
función también me salvó un byte con mi enfoque, no lo sabía;)05AB1E , 5 bytes
Pruébalo en línea!
Esto no funciona en la versión heredada de 05AB1E. Solo funciona en la nueva versión, la reescritura de Elixir.
Cómo funciona
fuente
MATL , 5 bytes
¡Sundar encontró al verdadero constructor para hacer esto! Vota esa respuesta en lugar de la tonta :-(
Pruébalo en línea!
fuente
Carbón de leña , 5 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
La
BaseString
función convierte automáticamente entre número y cadena dependiendo del tipo del primer parámetro.fuente
Python 2 ,
132129122121 bytesPruébalo en línea!
Una función anónima (¡gracias, Erik the Outgolfer !) Que convierte el número original en un entero base 10, luego pasa el entero y la nueva cadena base a la función g (), que se convierte recursivamente a la nueva base. Ahora pasa la longitud de OutputFormat como parámetro a g ().
Se actualizó g () para un bytecount más bajo. (gracias, Dennis !)
Se reemplazó index () con find (). (¡Gracias, señor Xcoder !)
Explicación no golfista:
fuente
f=
, las funciones anónimas están permitidas de forma predeterminada.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))
.Jalea , 11 bytes
Pruébalo en línea!
Orden de argumento: InputFormat, Number, OutputFormat. ¡Asegúrese de citar los argumentos con el escape adecuado!
fuente
Pyth, 21 bytes
Banco de pruebas
Explicación:fuente
Haskell , 119 bytes
Pruébalo en línea!
fuente
Perl 6 ,
10097 bytesPruébalo en línea!
Bloque de código anónimo que toma 3 cadenas en orden, entrada, formato de entrada y formato de salida, luego devuelve una cadena
Explicación:
fuente
VBA, 182 bytes
Una subrutina declarada que toma datos,
n
en el idiomay
y los proyecta en el idiomaz
.fuente
JavaScript (ES6),
9086 bytesToma entrada como
(input_format)(output_format)(number)
.Pruébalo en línea!
fuente
C (gcc) ,
130129 bytesPruébalo en línea!
-1 byte usando en
index
lugar destrchr
.Este es un enfoque iterativo simple, reutilizando algunas variables (y por lo tanto abusando
sizeof(int) == sizeof(char *)
de TIO) para guardar bytes.Entrada:
i
número de entradas
caracteres base de origent
personajes base objetivoSalida:
r
número de resultado (puntero a un búfer)Explicación:
fuente
bcopy(r,r+1,++i)
lugar dememmove(r+1,r,++i)
Python 2 ,
9795 bytesGracias a Chas Brown por -2 bytes.
Pruébalo en línea!
fuente
Java 10, 131 bytes
Una lambda que toma los parámetros en orden como cadenas y devuelve una cadena.
Pruébalo en línea
Sin golf
fuente