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
fuente

Respuestas:
JavaScript (ES7),
636159 bytesGuardado 4 bytes gracias a Neil .
fuente
10**-~Math.log10(c). (Pero +1 por usarreduce, por supuesto.)async/awaity el operador de exponenciación****es realmente útil, estoy de acuerdo. Eso debería haber estado en ES6.C,
7975 bytes¡Gracias a @GB por guardar 4 bytes!
Pruébalo en línea!
fuente
Bash, 66
Pruébalo en línea .
fuente
$[...]están sujetos a la expansión de parámetros sin el explícito$(por ejemplo, endlugar de$d), guardando dos caracteres.((s=$1+$2,d=$1-$2))para inicializar las dos variables.EXCEL, 61 Bytes
Excel, 18 bytes no válidos
fuente
Apilado , 36 bytes
Pruébalo en línea!
Previamente:
,@A$(-+*){!A...n!}"!:inits$#'"!$summap:[email protected]\^1\,\*sumVoy a tratar de extraer un byte o dos antes de escribir una explicación. (
#'= tamaño de, y"es "hacer en cada uno", sin condiciones adjuntas aquí.)Que no compiten en 26 bytes:
$(*+-)#!!:{%y#'10\^x*y+}#\.fuente
TI-Basic,
3433 bytesfuente
Prompt A,Bque también debería funcionarGNU dc, 36
Define una macro
mque toma los dos miembros superiores de la pila, aplica la macro y deja el resultado en la pila (según el ejemplo en la pregunta):Pruébalo en línea .
fuente
Perl 6 ,
81 6158 bytesIntentalo
Intentalo
Intentalo
fuente
x-yes un identificador válido.Jalea , 27 bytes
Define un enlace / función diádica, invocable con
ç. Toma dos enteros como entrada y devuelve un entero. Tiene la ventaja adicional de poder tomar x<y o x>y usando la diferencia absoluta.Pruébalo en línea!
Explicación:
Detalles:
fuente
PHP,
7975 bytesdos versiones:
toma datos de los argumentos de la línea de comandos; correr con
-r.Supongo que
strlencalifica como "función que devuelve el número de dígitos",aunque usa el número como una cadena. Avísame si no.
fuente
strlensea válido.C (gcc) , 70 bytes
Pruébalo en línea!
basado en la respuesta de Steadybox , poniendo todo en una macro para jugar golf un poco más.
(Nota: asignar el resultado en
dlugar deatrabajos, inesperadamente. Eché un vistazo al código de ensamblaje generado y parece estar bien).fuente
Haskell, 54 bytes
El rompecabezas se implementa mediante una función infija
#, por ejemplo8#2 = 16106. La otra función,%define la concatenación de base 10 (suponiendo que el RHS es mayor que 0).fuente
Dyalog APL, 31 bytes
{a⊥⍨10*1+⌊10⍟a←(⍺×⍵)(⍺+⍵)(⍺-⍵)}basado en el código APL de muestra de la declaración del problema
fuente
PHP, 87 bytes
y una solución no válida para 37 Bytes
fuente
Ruby, 61 bytes
Que sospechosamente se parece mucho a esta respuesta Javascript, pero sin usar un logaritmo.
fuente
Python,
9291 caracteresGracias a la sugerencia de Wizards;)
fuente
)yif.R (3.3.1), 104 bytes
devuelve una función anónima
Este es mi primer intento de golf, por lo que cualquier comentario es apreciado.
fuente
REXX, 70 bytes
Por supuesto, la forma nativa sería mucho más corta:
fuente
PowerShell, 88 bytes
PowerShell no tiene un operador de energía que no ayuda. Tampoco puedo contar la longitud de un entero a menos que lo cuentes como una cadena, lo que no podemos hacer, así que verifico si es
-gt9 para conocer la longitud. Probablemente podría ser más conciso, pero tengo que volver al trabajo.fuente
Python 2.7,
10996 bytesCorregido después de seguir las reglas del concurso. Créditos a mbomb007 por bajar el código de 109 bytes a 96 bytes
fuente
•You're not allowed to use strings or any kind of concatenation anywhere in your code.auna lambda.a=lambda n:10**int(.... También puede hacerlob,c=input(), dando sus dos entradas separadas por una coma.J , 25 bytes
*;+;-Encajona los resultados de cada operación.10#.inv&.>Convierta cada resultado en una matriz de dígitos de base 10. (inves^:_1)[:;Desempaquete y únase a las matrices.10#.Convierta una matriz de dígitos de base 10 en un número entero.X=.define lo anterior como el operadorX.Resultados:
fuente
X=.Mathematica, 67 bytes
Toma
x-y, luego toma el log10 dex-y, lo redondea, calcula 10 a la potencia de eso y luego lo multiplica porx+y. Pero también debemos considerarlog10(x-y)ser 0, por lo que reemplazamos 0 con 1. Luego tomamos el log10 de2x, redondeado, más 1, y encontramos 10 a la potencia de eso. Multiplique eso porxyy agréguelo.fuente
05AB1E ,
232216 bytesPruébalo en línea!
Podríamos haber guardado unos pocos bytes si nos hubieran permitido usar cadenas en el programa (pero no en los cálculos) haciendo un bucle sobre una cadena que contiene las operaciones
"-+*", ya que el código realizado para cada operación es el mismo.Por supuesto, si se nos hubiera permitido usar la concatenación, habríamos ahorrado mucho más.
fuente
R, 64 bytes
Uso:
fuente