Objetivo
Dada una lista de entrada de 6
dígitos distintos, encuentre 3 números a
, b
y c
tal que a × b = c
, con a
tener 2 dígitos, b
tener 1 dígito y c
tener 3 dígitos. De una manera más visual, su programa debe organizar esos 6 dígitos en los cuadros de esta imagen:
Si existe más de una solución, puede generar cualquiera de ellas.
Entrada
6 dígitos distintos. Puede tomarlos de cualquier manera razonable para su idioma.
Salida
Los 3 números a
, b
y c
. El formato de salida es relativamente libre, siempre y cuando los 3 números estén separados y siempre se impriman en el mismo orden (pero no necesariamente en el orden a, b, c
).
Casos de prueba
1, 2, 3, 4, 5, 6 -> 54,3,162
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364
Tanteo
El código más corto en bytes gana.
0,1,2,3,4,5
resultado en13,4,052
; sin solución; ¿o está bien algún comportamiento?Respuestas:
Brachylog (2), 10 bytes
Pruébalo en línea!
Demasiado lento para ejecutarse en un período de tiempo razonable (el intérprete de Brachylog pasa mucho tiempo haciendo multiplicaciones en cadenas vacías, números de 4 dígitos, números negativos, etc., usando un solucionador de restricciones muy lento). El enlace TIO utiliza una entrada con solo 3 dígitos (este programa puede manejar entradas con cualquier número de dígitos). Esta es una función cuya entrada es un número que contiene todos los dígitos requeridos (por ejemplo
234567
, la falta de duplicados en la entrada significa que siempre puede poner cualquiera0
al final para evitar un cero inicial) y cuya salida es una lista en el orden[b, a, c]
(por ejemplo[6, 57, 342]
).Explicación
Entonces, ¿a dónde se fue el requisito de que los grupos tengan 2, 1 y 3 dígitos? Bueno, sabemos que hay 6 dígitos en la entrada, y los grupos están ordenados. Los únicos tamaños posibles que pueden tener, por lo tanto, son [1, 1, 4], [1, 2, 3] o [2, 2, 2]. El primer caso es imposible (no puede multiplicar dos números de 1 dígito para producir un número de 4 dígitos, ya que 9 × 9 es solo 81), como es el último caso (no puede multiplicar dos números de 2 dígitos para producir un número de 2 dígitos, ya que incluso 10 × 10 produce 100). Por lo tanto, los valores de retorno
[b, a, c]
deben tener 1, 2 y 3 dígitos de largo en ese orden, por lo quea
son 2 dígitos,b
1 dígito yc
3 dígitos, según se solicite.fuente
JavaScript (ES6),
9088 bytesToma la entrada como una matriz de 6 dígitos. Devuelve una cadena que describe una posible solución (como
'54*3==162'
) o sale con un error de 'demasiada recursividad' si (y solo si) no hay solución.Cómo funciona
Este es un algoritmo determinista.
Los números primos
P=2
yQ=3779
fueron elegidos de tal manera que la devolución de llamada de clasificación(k = k * P % Q) & 2
garantice generar las 720 permutaciones posibles de la matriz de entrada a lo largo del tiempo. Más precisamente, todas las permutaciones están cubiertas después de 2798 géneros, lo que debería estar dentro del límite de recurrencia de todos los navegadores.Inyectamos cada permutación en la expresión
01*2==345
mapeando los dígitos a las entradas correspondientes en la matriz.Evaluamos esta expresión y hacemos llamadas recursivas hasta que sea verdad.
Prueba
Mostrar fragmento de código
fuente
-
lugar de==
(e invierta el?:
) para guardar un byte.Brachylog , 17 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E ,
1513 bytes¡ Ahorré dos bytes gracias a Emigna !
Utiliza la codificación CP-1252 . Pruébalo en línea!
Explicación:
fuente
213S
con3L
que el orden no tiene que ser2,1,3
de acuerdo con las especificaciones.£
vectoriza acumulativamente ... Si esa es la forma correcta de decir eso.Bash + coreutils, 70
No hay una forma particularmente fácil de generar todas las permutaciones. En cambio, genere permutaciones al azar y calcule hasta que encontremos una buena.
La salida tiene la forma
A*B-C
, es decir, la expresión que se evaluará a cero cuando tengamos la permutación correcta.Pruébalo en línea .
fuente
CJam , 23 bytes
Pruébalo en línea!
fuente
Python 2 , 105 bytes
Pruébalo en línea!
Solución de 88 bytes con una salida más flexible
Pruébalo en línea!
donde la salida sería ['6', '5', '7', '3', '4', '2'] en lugar de '6', '57', '342'
fuente
import
en la parte superior ... sacude la cabezaf=
el encabezado. No es gran cosa.PHP, 110 bytes
Llegará allí ... eventualmente ...
Sin golf:
fuente
PHP, 77 bytes
Toma la entrada como una cadena.
fuente
ES6 (Javascript),
85,8279 bytesAcepta una matriz de dígitos (cadenas), devuelve una matriz de 3 elementos
[A,B,C]
=>C=A*B
Golfed
EDICIONES:
d
ya
deshacerme==
(¡Gracias @Arnauld!)Intentalo !
fuente
Pip , 18 bytes
17 bytes de código, +1 para
-S
bandera.Toma datos como una cadena de dígitos a través del argumento de la línea de comandos. La salida está en el orden c, b, a. Pruébalo en línea!
Este código genera todas las soluciones si existen múltiples. Si es necesario que solo muestre una solución, agregue tres bytes y ajuste el programa en
(...0)
.Explicación
fuente
Rubí, 60 bytes.
Imprime todas las soluciones como "a * b == c"
Ejemplo:
fuente
Lote, 305 bytes.
Toma la entrada en STDIN como una cadena
[1-9]{6}
y emite todas las soluciones endd*d-ddd
formato. Batch no es muy bueno en la manipulación de cadenas, por lo que generar 720 permutaciones es un poco incómodo.fuente