Dados 3 enteros, determine la base más baja posible para que los primeros dos enteros se multipliquen en el tercero. Si piensa en la respuesta a la última pregunta de la vida, el universo y todo, 6 * 9 == 42, es cierto en la Base 13.
Las entradas pueden incluir cualquier número cuyos dígitos usen los caracteres 0-9, az y AZ, donde a
es igual a 10 en Base 10 y Z
es 61 en Base 10.
Las entradas deben ingresarse de la forma que desee (excepto la codificación rígida), y puede escribir una función individual o un programa completo.
La base máxima que debe considerarse es la Base 62, y la base mínima es la Base 2.
Puede suponer que los dos primeros valores son más pequeños que el tercero. También puede concluir que la base mínima es uno mayor que el dígito / carácter más alto de las entradas (por ejemplo, si las entradas son 3 1a 55
, la base mínima sería Base 11, porque a
es el dígito más alto).
Si no existe tal base, devuelva un valor basura de su elección.
Este es el código de golf, por lo que gana el código más corto.
Casos de prueba
6 9 42 --> 13
a a 64 --> 16
aA bB 36jk --> 41
2 3 20 --> <junk value>
10 10 100 --> 2
fuente
b
de una manera general comoa_0 b^0 + a_1 b^1 + a_2 b^2 + ...
(dondea_0
es el dígito menos significativo) que la base 1 definitivamente tiene sentido. Además, la conclusión del OP también incluiría la base 1 en la búsqueda si el dígito actual más grande es 0.Respuestas:
CJam,
525148 bytesPruébalo aquí. El probador en línea no admite entradas a través de ARGV. La alternativa más cercana es poner poner la entrada como
6 9 42
en STDIN y usar:Esto se imprime
-1
si no se puede encontrar una base válida hasta 62.¡Muchas gracias a Peter por el código de análisis de dígitos!
Solucioné muchos problemas que agregaron 14 bytes al recuento. La siguiente explicación sigue siendo para mi presentación original, y la actualizaré mañana.
El índice se imprime automáticamente al final del programa.
fuente
32base~\[-16.35 9]=+
. Sé que CJam tiene una conversión de base más corta.APL (Dyalog Unicode) , SBCS de 30 bytes
Pruébalo en línea!
Gracias a Adám por la ayuda.
Explicación:
Usamos una función auxiliar
In
, para recibir la entrada en un formato más aceptable. De lo contrario, la entrada recibe una matriz de 3 columnas.'3 9 42'
daría, por ejemplo (leer de arriba hacia abajo y luego de izquierda a derecha):Y para
'aA bB 36jk'
(lo mismo aquí.a
Es 10,b
es 11,A
es 36, etc.)fuente
Pitón 2 -
197213Qué monstruo ... (en comparación con CJam)
Desafortunadamente
int
, la conversión de bases solo puede manejar bases de hasta 36. Por lo tanto, necesitaba implementarla yo mismo. (Vea esta maravillosa solución ).fuente
CJam, 53 bytes
Toma las tres entradas de STDIN como
Imprime
0
si el producto en cualquier base no es posibleIntentará jugar más al golf.
Pruébalo aquí
fuente
JavaScript (E6) 129
139Pruebe recursivamente todas las bases desde 2 hasta 62, devolviendo -1 si ningún valor está bien.
La función parseInt de JavaScript funciona con una base de hasta 36, por lo que se necesita un poco de ayuda para bases más grandes.
Cuidado, los parámetros x, y, z son cadenas, no números.
Es más difícil de lo que parece. Gracias a Martin por señalar un error básico en la primera versión.
Menos golf
Prueba en la consola FireFox / FireBug.
La prueba prueba 1000 números con diferentes bases (hasta 36, no 62). Vale la pena señalar que la base encontrada podría ser correcta pero menor que la base que generó el caso de prueba.
fuente
Carbón , 28 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Salidas
None
si no se puede encontrar una base válida. Explicación:fuente
⍘
esAny
por alguna razón ...Erlang (escript) - 200
Agregue dos nuevas líneas principales que deben estar presentes.
En legible:
Invocación:
fuente
if Digit < Base -> … end
parte se encarga de eso. Si unif
bloque no tiene una rama verdadera, se lanza una excepción, que queda atrapadatry … catch _:_ -> … end
.Haskell 216 char (177?)
Intenté jugar al golf lo más posible. Si se cuentan las importaciones, entonces este es mi código más corto (216)
Sin embargo, si las importaciones no se contabilizan, esta es mi mejor versión (177):
Esto trata cada número como un polinomio P (x) donde x es la base, con la condición de que ningún coeficiente sea mayor que x; Luego evalúo los polinomios sobre cada base posible, deteniéndome cuando alcanzo uno que satisface la igualdad P (x) * Q (x) = R (x). La regla 'la base es más grande que el dígito más grande' se aplica con el último guardia en la coincidencia de patrones, a saber
n>(m.map(m.f)$k)
. Sé que los diferentes desafíos de golf y los diferentes creadores de desafíos tienen diferentes políticas con respecto a las importaciones frente al puntaje, así que tome el segundo con un grano de sal.fuente
Prólogo - 195 bytes
Básicamente la misma idea que mi respuesta Erlang:
En legible:
Invocación:
fuente