Explicación:
El año pasado en la clase de matemáticas, en la tarea, ocasionalmente recibíamos estas preguntas extremadamente simples, aunque igualmente molestas, llamadas rompecabezas de diamantes. Estas eran básicamente preguntas en las que se nos daría una suma, y luego se le pedía a un producto que encontrara los dos números que, cuando se multiplicaban, daban el producto, y cuando se sumaban, daban la suma. Esto me volvió loco, ya que la única forma en que sabía cómo resolverlos (en Álgebra I) era simplemente enumerar los factores del producto y luego ver cuáles sumaban para hacer la suma. (Como no sabía cómo usar Quadratics en ese momento) Sin mencionar que no eran exactamente un desafío matemático. Sin embargo, se me ocurrió que debería haber escrito un programa. ¡Ese es tu desafío hoy! Escribe un programa que pueda resolver un rompecabezas de diamantes.
Ejemplos Disculpas por la imagen borrosa, es lo mejor que pude encontrar. Además, ignore los números en burbujas. La parte superior del diamante es el producto, la parte inferior es la suma, la derecha y la izquierda son los dos números. Las respuestas son las siguientes: (Estos también son sus casos de prueba)
- 9, -7
- -2, -1
- 5, 8
- -9, -9
Reglas:
- No puede utilizar ninguna función o clase predefinida que logre esto por usted.
- Su código debe ser un programa completo o una función que devuelva o imprima las respuestas una vez que las encuentre
- La entrada es la suma y el producto, que se ingresan como parámetros de función o entrada del usuario
Presupuesto:
- Suponga que los dos números, la suma y el producto siempre serán un número entero.
- Las dos respuestas estarán entre -127 y 127.
- Su entrada será dos enteros (Suma y Producto).
Recuerde que esto es código golf, por lo que gana el conteo de bytes más corto. Titula tu respuesta con el ## nombre de idioma estándar, recuento de bytes
Editar: Además, Doorknob señaló que esto es esencialmente "factorizar un cuadrático de forma x ^ 2 + bx + c". Esa es otra forma de pensar y abordar este desafío. :RE
x^2 + bx + c
", ¿correcto?(x + n)(x + m)
te dax^2 + (n+m)x + (n*m)
, así que factorizar dicha cuadrática es básicamente equivalente a esta pregunta (si lo entiendo correctamente).Respuestas:
Jalea ,
151110 bytesPruébalo en línea!
El siguiente código binario funciona con esta versión del intérprete Jelly.
Idea
Esto se basa en el hecho de que
Código
fuente
Unicornio ,
4650298218741546¡Ahora con cabras, arcoiris y destellos!
Esperemos que sea más corto que Java.
Utiliza una codificación personalizada que se puede aplicar con
ApplyEncoding
Explicación
¿¿¿Como funciona esto??? Con la magia de los unicornios (y un pequeño código).
Unicornio está compilado en JavaScript
Cada sección está separada por un espacio, y cada sección representa un carácter en el código JavaScript.
Si la sección contiene unicornios, el carácter de la sección es la longitud de la sección, convertida en un código char (por ejemplo, 32 unicornios serían un espacio)
Si la sección contiene cabras, la longitud de la sección se duplica y luego se convierte en un código char.
Si los caracteres especiales del programa no se muestran, aquí hay una imagen:
Esto no compite porque Unicornio se creó después de que se publicó este desafío.
fuente
JavaScript ES6,
453937 * bytes* Gracias a Dennis!
fuente
TeaScript, 22 bytes
30 31No esta tan mal. Sería mucho más corto si pudiera obtener algunas características de golf terminadas antes, como los accesos directos unicode de
unicornioPruébalo en línea
fuente
MATL , 33 bytes
Emite los dos números en dos líneas diferentes. Si no existe una solución, no produce salida. Si existen varias soluciones, produce solo el par de números correspondientes a una solución.
Ejemplo
Lo siguiente se ejecutó en Octave con la confirmación actual de GitHub del compilador.
Explicación
fuente
matl
y presiona "enter"; luego pegue el programa y termine con una línea en blanco. ¿Qué quiere decir que la sintaxis está terriblemente dividida? MATL usa la notación de pulido inverso (postfix), ¿tal vez eso te confunde?Julia,
464432 bytesUna función f que toma la suma y luego el producto.
Mi primera respuesta de Julia. @AlexA., Deberías estar orgulloso de mí.
Gracias @Dennis y @Alex A. por toda la ayuda. Tengo que tachar el 44.: P
fuente
f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
dc, 16
Lee la suma y luego el producto de líneas separadas de STDIN. -ve números deben ingresarse con un guión bajo en lugar de un signo menos. p.ej
Explicación:
La misma solución cuadrática básica para
sum = a + b
yproduct = a * b
. Esto calcula la solucióna
como:Y calcula la solución
b
como:Expandido:
La división por 2 se hace tarde para evitar la pérdida de precisión. Es posible dividir por 2 antes, pero esto requiere una precisión fraccional que necesita más caracteres.
fuente
Pyth,
2118 bytesGuardado 3 bytes gracias a @Dennis
Banco de pruebas
Mi segundo programa de Pyth, por lo que probablemente pueda jugar golf con funciones integradas. ¡Sugerencias son bienvenidas!
Cómo funciona
(Esta explicación puede no ser 100% correcta; no estoy muy familiarizado con Pyth).
Tenga en cuenta que
/
es la división de enteros. Al reemplazarlo porc
, podríamos hacer que esto funcione también con entradas no enteras.fuente
J
es una variable de asignación automática y se establece la primera vez que se usa. La única parte que no parece correcta es La lista es actualmente [J].,
toma exactamente dos argumentos y los combina en una lista.Java, 82 (69 λ) bytes con fórmula cuadrática (fuerza bruta de 127 (114 λ) bytes)
Fuerza bruta: (Vanilla, Java 7)
λ mejorado: (Java 8)
Asignar lambda a
java.util.function.BiFunction<Integer, Integer, int[]>
y llamarapply()
.Enfoque simple de fuerza bruta. Solo la función de trabajo está aquí, y dado que Java no puede devolver múltiples valores, devolvemos un elemento de 2
int
matriz de con los números requeridos.El programa completo basado en el enfoque de fuerza bruta se puede encontrar aquí en ideone.com , con la versión λ aquí.
Jugar al golf implicaba eliminar todos los aparatos innecesarios.
Sin golf:
Enfoque cuadrático: (Vanilla, Java 7)
λ-mejorado: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); devuelve nuevo int [] {x / 2, sx / 2} ;}
(Uso como para fuerza bruta λ arriba).
Los parámetros y los criterios de retorno son los mismos que la solución de fuerza bruta anterior.
Utiliza la buena fórmula cuadrática usada por casi todas las otras respuestas aquí, y no se puede jugar mucho más a menos que alguien me ayude aquí. Está bastante claro, así que no estoy incluyendo una versión sin golf.
El programa basado en el enfoque cuadrático completo está aquí en ideone.com , con la versión λ aquí.
fuente
Japt ,
28222120 bytesLa entrada se realiza en forma de
-63 2
.Explicación:
U
yV
son las dos entradas (-63
y2
en el primer caso)²
cuadra el númeroq
extrae la raíz cuadradafuente
[X=ºV²-4*U ¬+V)/2V-X]
Sin los accesos directos:[X=((V²-4*U q +V)/2V-X]
Realmente debería hacer]
innecesario el seguimiento en la próxima versión ...APL,
2721 bytesEste es un tren de funciones diádicas que acepta enteros a la derecha e izquierda y devuelve una matriz. Para llamarlo, asígnelo a una variable.
Sin golf:
Pruébalo en línea
¡Guardado 6 bytes gracias a Dennis!
fuente
CJam, 18 bytes
Pruébalo en línea!
Cómo funciona
fuente
Pitón 3,
4944 bytesProbablemente hay algunas formas de jugar golf aún más lejos, pero esto se ve bastante bien como está.
fuente
s/2-d
. Además,d=(s*s/4-p)**.5
guarda algunos bytes.MathCAD 15. 38 Bytes
Con una fórmula matemática, programar en MathCAD es fácil. El lenguaje incluso está diseñado para manejar números complejos con facilidad. Sin embargo, hay idiomas más cortos que pueden resolver el problema.
fuente
𝔼𝕊𝕄𝕚𝕟, 21 caracteres / 30 bytes
Try it here (Firefox only).
Meh Esto debería ser lo suficientemente visual para que todos ustedes puedan entender la idea; Sin embargo, si es necesario,
î = input1, í = input2
.fuente
PHP, 62 bytes
Esto podría ser bastante largo pero ser un "programa" web PHP completo. Acepta los argumentos a través de la solicitud "get".
Demostración .
fuente
TI-BASIC, 20 bytes
Toma
Q
deAns
yP
dePrompt
. Llama comoP:prgmNAME
.fuente
Prompt
declaración sea tan larga jajaja. No sé TI-BASIC, pero podría ser más corto si tuviera que poner el código en una función y pasar P como parámetro.Prompt
,P
,/
,2
,+
,√(
,²
,4
,-
,Ans
, y{
son una ficha, y cada una de estas fichas es un byte. Además, TI-BASIC no tiene funciones. Este es probablemente el método más corto.