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 x
y de y
modo que x > y > 0
, arroje la respuesta correcta como un entero , donde los dígitos de la respuesta son los dígitos x * y
seguidos por los dígitos x + y
seguidos 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:
sx
ysy
pop un elemento de la pila y guárdelo en los registrosx
yy
, respectivamente.lx
yly
cargar un elemento de registrosx
yy
respectivamente y empujarlo a la pila.d
duplica el último elemento en la pila.^
calcula el poder de dos números.Z
muestra un número y devuelve su número de dígitos. Esto se hace porquedc
no tiene función de logaritmo.[...]sa
almacena una macro en el registroa
.la
lo cargax
ejecuta la macro en la parte superior de la pila.
Ejemplos:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153
fuente