Antecedentes
La mayoría de las personas aquí deben estar familiarizadas con varios sistemas base: decimal, binario, hexadecimal, octal. Por ejemplo, en el sistema hexadecimal, el número 12345 16 representaría
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Tenga en cuenta que generalmente no esperamos que la base (aquí 16
) cambie de un dígito a otro.
Una generalización de estos sistemas posicionales habituales le permite utilizar una base numérica diferente para cada dígito. Por ejemplo, si estuviéramos alternando entre el sistema decimal y binario (comenzando con la base 10 en el dígito menos significativo), el número 190315 [2,10] representaría
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Denotamos esta base como [2,10]
. La base más a la derecha corresponde al dígito menos significativo. Luego pasas por las bases (a la izquierda) a medida que avanzas por los dígitos (a la izquierda), envolviéndote si hay más dígitos que bases.
Para leer más, ver Wikipedia .
El reto
Escriba un programa o función que, dada una lista de dígitos, D
una base de entrada I
y una base de salida O
, convierta el entero representado por D
de base I
a base O
. Puede recibir información a través de STDIN, ARGV o argumento de función y devolver el resultado o imprimirlo en STDOUT.
Puedes asumir:
- que los números en
I
yO
son todos mayores que1
. - los
I
yO
no están vacíos. - que el número de entrada es válido en la base dada (es decir, ningún dígito mayor que su base).
D
podría estar vacío (que representa 0
) o podría tener ceros a la izquierda. Su salida no debe contener ceros a la izquierda. En particular, un resultado que representa 0
debe ser devuelto como una lista vacía.
No debe utilizar ninguna función de conversión de base integrada o de terceros.
Este es el código de golf, gana la respuesta más corta (en bytes).
Ejemplos
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] []
fuente
[]
si la entrada es[0]
Respuestas:
CJam, 45
Finalmente encontré un buen uso de
j
.Cómo funciona
Long ArrayList Block j
ejecuta el bloque que toma un número entero como parámetro yLong j
llamará a este bloque de forma recursiva en el bloque. También almacenará los valores devueltos por el bloque en una matriz interna, que se inicializa con el parámetro de matriz. No ejecutará el bloque si la entrada ya está en la matriz, y en su lugar se devuelve el valor en la matriz.Entonces, si lo inicializo con una matriz de una matriz vacía, la matriz vacía se devolverá para la entrada 0, y el bloque se ejecutará para cualquier otra entrada.
CJam,
4948La entrada debe ser
O I D
.Ejemplos:
Cómo funciona
fuente
_{}?
truco es realmente bueno.{}e|
es lo mismo.j
? :)CJam,
62615957 bytesLee las matrices de entrada a partir
[O I D]
de STDIN. Pruébalo en línea.Cómo funciona
Casos de prueba
Tenga en cuenta que las cadenas vacías y las matrices vacías son indistinguibles para CJam, por lo que
[]p
imprime""
.fuente
Python 2 - 318
Cambié el orden de los argumentos por accidente, así que tuve que revertirlos. Trabajaré en el slice-fu para que las listas funcionen en la otra dirección más tarde, ya desperdicié toda mi pausa para el almuerzo: pFijo
fuente
APL, 78
Ejemplos:
fuente
{{⍵↓⍨1⍳⍨×⍵}(99⍴⎕)⊤⍵⊥⍨⎕⍴⍨⍴⍵}
toma D como argumento correcto, luego pregunta por I y O.Python 2 - 122
Muy sencillo, no logró encontrar ningún truco especial de golf en este caso.
Sin golf:
Editar: versión del programa de 116 bytes gracias a FryAmTheEggman
Esta versión acepta entradas separadas por comas, p. Ej.
[1,9,0,3,1,5], [2,10], [10]
fuente
k2 -
8374 charFunción tomando un argumento. Esto era mucho más adecuado para K que para J, por eso no estoy usando J. Simplemente sería una carga de basura de boxeo / unboxing, y nadie quiere eso. Esto está en el dialecto k2 (puede requerir alguna adaptación para trabajar en la implementación de código abierto Kona), pero cambiaré esto a k4 si puedo jugar golf más corto allí.
Notaré que tomo una posición de selectividad aquí y digo que las listas de un elemento deben ingresarse como tales.
,2
es una lista de un elemento, ese elemento es el escalar2
. A menudo, los escalares y las listas de 1 ítem son intercambiables, pero hay una lógica en este golf que se basa en la suposición de argumentos de lista.Para explicar el golf, lo dividiré en dos partes.
F
es el golf,L
es el bucle principal que calcula la salida. El mecanismo exacto del bucle es queL
se aplica a sus argumentos repetidamente hasta que el segundo argumento sea cero, luego se devuelve ese resultado. (Esta es la.[L]/
parte)Por explosión:
En acción:
fuente
Perl 6 , 67 bytes
Intentalo
Expandido:
En caso de que no esté seguro de lo que hace la reducción de triángulo:
Si pudiera tomar las entradas invertidas, y dar salida a la inversa, serían 47 bytes.
Intentalo
fuente