Reto:
Hay un rompecabezas tonto que circula en las redes sociales que dice:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Implemente una función u operador que, cuando se le dan dos números enteros positivos xy de ymodo que x > y > 0, arroje la respuesta correcta como un entero , donde los dígitos de la respuesta son los dígitos x * yseguidos por los dígitos x + yseguidos por los dígitos de x - y. Muy simple.
Reglas:
- Las lagunas estándar no están permitidas.
- Este es el código de golf, por lo que el código más corto en bytes gana.
- No se requiere validación de datos de entrada . Este programa puede bloquearse o devolver basura cuando se le da una entrada no válida.
- Puede utilizar funciones y operadores numéricos (incluidos números enteros y coma flotante, funciones de biblioteca matemática y otras funciones que aceptan y devuelven números).
- Puede usar una función que devuelve el número de dígitos de un número, si corresponde.
- Estas no permitido el uso de cadenas o cualquier tipo de concatenación en cualquier lugar en el código.
- El resultado puede devolverse o enviarse a la pila, lo que corresponda en el idioma. El resultado debe ser un número entero, no una cadena.
Código de muestra:
El siguiente código crea un operador diádico llamado X.
X ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
Explicación:
En APL, evalúa de derecha a izquierda.
⍺ and ⍵son el operando izquierdo y derecho, respectivamente⌊10⍟⍺-⍵dice lo siguiente:floor of log10(⍺-⍵). Primero realiza la resta, luego el logaritmo y luego el piso. De derecha a izquierda. log10 se realiza para contar los dígitos de⍺-⍵(debe sumar 1 después).⍺×⍵×10*(...)lee:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺Por lo tanto,
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵es el producto, desplazado hacia la izquierda por la suma del número de dígitos de la suma y la diferencia. Multiplicar por una potencia de 10 desplazará un número entero a la izquierda.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)es la suma, desplazada a la izquierda por el número de dígitos de la diferencia.(⍺-⍵)es la diferencia No se necesitan cambios aquí.X←{...}es cómo define un operador en APL.
Ejemplos:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
El siguiente código crea una macro llamada a:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Explicación:
sxysypop un elemento de la pila y guárdelo en los registrosxyy, respectivamente.lxylycargar un elemento de registrosxyyrespectivamente y empujarlo a la pila.dduplica el último elemento en la pila.^calcula el poder de dos números.Zmuestra un número y devuelve su número de dígitos. Esto se hace porquedcno tiene función de logaritmo.[...]saalmacena una macro en el registroa.lalo cargaxejecuta la macro en la parte superior de la pila.
Ejemplos:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153