Diamond Puzzles!


21

Explicação:

No ano passado, na aula de matemática, nos trabalhos de casa, ocasionalmente, recebíamos essas perguntas extremamente simples, embora igualmente irritantes, chamadas quebra-cabeças de diamante. Essas eram basicamente perguntas nas quais receberíamos uma soma, e um produto foi solicitado a encontrar os dois números que, quando multiplicados, dão o produto e, quando adicionados, dão a soma. Isso me deixou louco, já que a única maneira de saber como resolvê-los (em Álgebra I) era apenas listar os fatores do produto e depois ver quais foram adicionados para fazer a soma. (Como eu não sabia usar Quadratics na época). Sem mencionar, eles não eram exatamente um desafio matemático. No entanto, ocorreu-me que eu deveria ter acabado de escrever um programa. Então esse é o seu desafio hoje! Escreva um programa que possa resolver um quebra-cabeça de diamante.

Exemplos insira a descrição da imagem aqui Desculpas pela imagem embaçada, é o melhor que pude encontrar. Além disso, ignore os números em bolhas. A parte superior do diamante é o produto, a parte inferior é a soma, a direita e a esquerda são os dois números. As respostas são as seguintes: (Esses também são seus casos de teste)

  1. 9, -7
  2. -2, -1
  3. 5, 8
  4. -9, -9

Regras:

  • Você não pode usar nenhuma função ou classe predefinida que realize isso para você.
  • Seu código deve ser um programa completo ou função que retorne ou imprima as respostas assim que as encontrar
  • A entrada é a soma e o produto, que são inseridos como parâmetros de função ou como entrada do usuário

Especificações:

  • Suponha que os dois números, a soma e o produto sempre sejam um número inteiro.
  • As duas respostas estarão entre -127 e 127.
  • Sua entrada será dois números inteiros (soma e produto).

Lembre-se de que isso é código-golfe, e a menor contagem de bytes vence. Nomeie sua resposta com o padrão ## Nome do idioma, contagem de bytes

Edit: Além disso, Maçaneta apontou que este é essencialmente "fator a quadrático da forma x ^ 2 + bx + c". Essa é outra maneira de pensar e abordar esse desafio. : D


9
Este é essencialmente "fator um quadrático de forma x^2 + bx + c ", correto?
— Maçaneta

11
b = - (x + y), c = (x * y)
— TheNumberOne

Simplificar (x + n)(x + m)fornece a você x^2 + (n+m)x + (n*m), portanto, fatorar o quadrático é basicamente equivalente a esta pergunta (se eu estiver entendendo corretamente).
— Maçaneta da porta

@ Doorknob 冰 sim, você está correto. Suponho que estou prestes a ser marcado como duplicado. :(
— Ashwin Gupta

Bem, acho que ainda não temos uma pergunta "fator x ^ 2 + bx + c". Apenas salientando que os problemas são muito semelhantes.
— Maçaneta

Respostas:


18

Geléia , 15 11 10 bytes

Hð+,_ðH²_½

Experimente online!

O código binário a seguir funciona com esta versão do interpretador Jelly.

0000000: 48 98 2b 2c 5f 98 48 8a 5f 90  H.+,_.H._.

Idéia

Isso se baseia no fato de que

Fórmula

Código

Hð+,_ðH²_½    Left input: s -- Right input: p

 ð   ð        This is a link fork. We define three links, call the left and right
              link with the input as arguments, then the middle link with the
              results as arguments.

H             Left link, dyadic. Arguments: s p

H             Halve the left input.

     ðH²_½    Right link, dyadic. Arguments: s p

      H       Halve the left input.
       ²      Square the result.
        _     Hook; subtract the right input from the result.
         ½    Apply square root to the difference.

 ð+,_         Middle link, dyadic. Arguments: (results of the previous links)

  +           Compute the sum of the results.
    _         Compute the difference of the results.
   ,          Pair.

11
Esse é um compilador online muito bom. Eu gostaria que eles tivessem um desses para java.
— Ashwin Gupta

2
@AshwinGupta Dennis fez isso sozinho, na verdade;) Para Java, sempre há Ideone .
— Maçaneta

@ Doorknob: sim, eu sei que o compilador on-line dele é muito legal. Eu estive no Ideone, é bom e tudo, mas ele não tem suporte para várias classes, o que é um problema. Não tenho como testar meus programas mais complexos na escola D :. Além disso, ele não funciona em um navegador iPad quer que acredite ou não tem que ser uma exigência, uma vez que é o dispositivo de computação que foram fornecidos com ...
— Ashwin Gupta

A menos que alguém consiga vencer 14, acho que você ganhou.
— Ashwin Gupta

3
OK, Jelly agora é oficialmente insanamente baixa. Preciso aprender esse idioma logo após terminar de pensar em Pyth ...
— ETHproductions

14

Unicórnio , 4650 2982 1874 1546

[ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 2 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 4 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ]

Agora com cabras, arco-íris e brilhos!

Esperançosamente mais curto que Java.


Usa uma codificação personalizada que pode ser aplicada comApplyEncoding

Explicação

Como é que isso funciona??? Com a magia dos unicórnios (e um pouco de código).

Unicorn é compilado em JavaScript

Cada seção é separada por um espaço e cada seção representa um caractere no código JavaScript.

Se a seção contiver unicórnios, o caractere da seção será o comprimento da seção, convertido em um código de char (por exemplo, 32 unicórnios seriam um espaço)

Se a seção contiver cabras, o comprimento da seção será dobrado e depois convertido em um código de char.


Se os caracteres especiais do programa não aparecerem, aqui está uma figura:

insira a descrição da imagem aqui


Isso não é competitivo porque o Unicorn foi criado após o lançamento deste desafio.


11
o que esta acontecendo aqui? Acabei de ver caixas. ; -;
— Lynn

@Mauris aww :( Vou postar uma imagem do programa para que todos possam ver sua glória
— Downgoat

3
LOL ok, este é o meu favorito, mesmo que eu não possa aceitá-lo, pois é tão longo.
— Ashwin Gupta

4
"Esperançosamente menor que Java." Você merece um +10 justamente por isso;)
— ETHproductions

11
@ Doᴡɴɢᴏᴀᴛ, desculpe desapontá-lo. Java é cerca de 18 vezes menor que isso.
— Tamoghna Chowdhury

8

JavaScript ES6, 45 39 37 * bytes

(q,p)=>[x=p/2+Math.sqrt(p*p/4-q),p-x]

* Obrigado ao Dennis!


2
Estou ligando para você porque esta é a primeira resposta que eu posso entender (mais ou menos). LOL
— Ashwin Gupta

4

TeaScript, 22 bytes 30 31

[d=y/2+$s(y*y/4-x),y-d

Não é tão ruim assim. Seria muito menor se eu pudesse obter alguns recursos de golfe terminados anteriormente, como unicórnio atalhos unicode

Experimente online


"atalhos de unicórnio" Eu gosto do som disso! ;)
— ETHproductions

@ETHproductions haha, isso foi autocorreção: apesar de os atalhos de unicórnio poderem ser interessantes ...
— Downgoat

3

MATL , 33 bytes

-100:100t!2$t+i=bb*i=&2#2$1fv101-

Produz os dois números em duas linhas diferentes. Se não houver solução, ela não produzirá saída. Se existirem várias soluções, produz apenas o par de números correspondente a uma solução.

Exemplo

O seguinte foi executado no Octave com o commit atual do GitHub do compilador.

>> matl -r '-100:100t!2$t+i=bb*i=&2#2$1fv101-'
> 2
> -63
 9
-7

Explicação

-100:100           % row vector -100, -99, ..., 100
t!                 % duplicate and transpose into column vector
2$t                % duplicate the two vectors
+                  % sum with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
bb                 % move the two vectors to top
*                  % multiply with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
&                  % logical "and"
2#2$1f             % find row and column of the first "true" value in logical matrix
v101-              % concatenate vertically and subtract 101

Por curiosidade, o programa em forma de "explicação" realmente seria executado em um compilador MATL? A sintaxe é terrivelmente dividida.
— Ashwin Gupta

Sim, você pode colar o programa em linhas separadas, por exemplo, copiando a listagem da explicação. Você digita matle pressiona "enter"; depois cole o programa e termine com uma linha em branco. Como assim, a sintaxe é terrivelmente dividida? MATL usa notação polonês reversa (postfix), talvez isso esteja confundindo você?
— Luis Mendo

3

Julia, 46 44 32 bytes

f(b,c)=(x=b+√(b^2-4c))/2,b-x/2

Uma função f que recebe a soma e depois o produto.

Minha primeira resposta de Julia. @AlexA., Você deve se orgulhar de mim.

Obrigado @Dennis e @Alex A. por toda a ajuda. Eu tenho que atravessar o 44.: P


40 bytes:f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
— Alex A.

@AlexA. - Você fará um meme sugerindo melhorias para este ...
— Darrel Hoffman

34 bytes:f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
— Alex A.

32 bytes:f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
— Dennis

2
É como a fórmula quadrática regular que vem sendo batida em nossas cabeças desde que éramos bebês pequeninos.
— Alex A.

3

dc, 16

?ddd*?4*-v+2/p-p

Lê a soma e o produto de linhas separadas de STDIN. números -ve devem ser inseridos com um sublinhado em vez de um sinal de menos. por exemplo

$ { echo 2; echo _63; } | dc -e'?ddd*?4*-v+2/p-p'
9
-7
$ 

Explicação:

A mesma solução quadrática básica para sum = a + be product = a * b. Isso calcula a solução acomo:

a = [ sum + √( sum² - 4 * product ) ] / 2

E calcula a solução bcomo:

b = sum - a

Expandido:

?                   # push sum to stack
 ddd                # duplicate 3 times (total 4 copies)
    *               # sum squared
     ?              # push product to stack
      4*            # multiply by 4
        -           # subtract (4 * product) from (sum squared)
         v          # take square root of (sum squared) - (4 * product)
          +         # add sum to square root of (sum squared) - (4 * product)
           2/       # divide by 2 to give solution a
             p      # print with newline and without pop
              -     # subtract solution a from sum to give solution b
               p    # print with newline and without pop

A divisão por 2 é feita tarde para evitar a precisão da perda. É possível dividir por 2 anteriormente, mas isso requer precisão fracionada, que precisa de mais caracteres.


2
Espere o que? Isso acabou mais curto que APL, Pyth e CJam ??? Woohoo!
— Digital Trauma

3

Pitão, 21 18 bytes

Guardado 3 bytes graças a @Dennis

,J/+@-^Q2*4E2Q2-QJ

Suíte de teste

Meu segundo programa Pyth de todos os tempos, por isso provavelmente pode ser jogado com built-ins. Sugestões são bem-vindas!

Como funciona

,J/+@-^Q2*4E2Q2-QJ   Implicit: Q = first line of input
,                    Create and output a list of these items:
 J                     Set variable J to the result of these operations:
      ^Q2                Square Q.
     -   *4E             Subtract 4*(next line of input).
    @       2            Take the square root.
   +         Q           Add Q.
  /           2          Divide by 2.
                       The list is currently [J].
               -QJ     Push Q-J; the list is now [J, Q-J].
                     EOF; list is sent to output.

(Essa explicação pode não estar 100% correta; não estou muito familiarizado com Pyth.)

Observe que /é a divisão inteira. Ao substituí-lo c, poderíamos fazer isso funcionar com entradas não inteiras também.


Vencê-lo por um byte: P Você deve considerar trocar; D
— nicael

Esta explicação pode não estar 100% correta ... ???
— Digital Trauma

@DigitalTrauma Não tenho 100% de certeza de que é assim que funciona (especificamente o J), mas foi o que reuni ao ler os documentos.
— ETHproductions

11
Sim, Jé uma variável de atribuição automática e é definida na primeira vez em que é usada. A única parte que não parece correta é A lista atualmente [J]. ,pega exatamente dois argumentos e os combina em uma lista.
— Dennis

3

Java, 82 (69 λ) bytes com fórmula quadrática (127 (114 λ) bytes força bruta)

Força Bruta: (Baunilha, Java 7)

int[] n(int s,int p){for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

Melhorado em λ: (Java 8)

(s,p)->{for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

Atribua lambda java.util.function.BiFunction<Integer, Integer, int[]>e ligue apply().

Abordagem simples de força bruta. Apenas a função de trabalho está aqui e, como o Java não pode retornar vários valores, retornamos uma intmatriz de 2 elementos com os números necessários.

O programa completo de abordagem da força bruta pode ser encontrado aqui em ideone.com , com a versão λ aqui.

Jogar golfe envolvia remover todos os aparelhos desnecessários.

Ungolfed:

int[] n(int s,int p){//sum and product as function parameters,in that order
    for(int a=-100;a<=100;a++){//iterate first no. from -100 to 100
        for(int b=-100;b<=100;b++){//iterate second no. from -100 to 100
            //if the 2 nos. satisfy the diamond-puzzle condition, 
            //pack them in an int array and return them
            if(a+b==s&&a*b==p)return new int[]{a,b};}
     }//if no such pair exists, return null
return null;}

Abordagem quadrática: (Vanilla, Java 7)

int[] n(int s,int p){int x=s+(int)Math.sqrt(s*s-4*p);return new int[]{x/2,s-x/2};}

Aprimorado em λ: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); retorna novo int [] {x / 2, sx / 2} ;}

(Uso como para força bruta λ acima).

Os parâmetros e critérios de retorno são os mesmos da solução de força bruta acima.

Usa a boa e velha fórmula quadrática usada por quase todas as outras respostas aqui, e não pode ser reduzida ainda mais, a menos que alguém me ajude aqui. Está bem claro, então não incluo uma versão não destruída.

O programa baseado em abordagem quadrática completo está aqui em ideone.com , com a versão λ aqui.


AHHA sim, obrigado. Eu estava esperando a resposta do Java. Além disso, eu estava esperando alguém usar loops e força bruta com os fatores. Acho que consegui os dois por um acordo. +1
— Ashwin Gupta

11
Java venceu o unicórnio :( Eu tinha +1, mas usei meu limite de votos diários
— Downgoat 30/12/15

2

Japt , 28 22 21 20 bytes

[X=V/2+(V²/4-U ¬V-X]

A entrada é feita na forma de -63 2.

Explicação:

  • Ue Vsão as duas entradas ( -63e 2no primeiro caso)
  • ² esquadrinha o número
  • q extrai a raiz quadrada

Eu estava apenas escrevendo uma resposta para isso; isto é, até eu ver o seu. Bom trabalho! Reorganizando a primeira parte e usando mais alguns atalhos Unicode, podemos obter 21 bytes: [X=ºV²-4*U ¬+V)/2V-X]Sem os atalhos: [X=((V²-4*U q +V)/2V-X]eu realmente deveria tornar o rastreio ]desnecessário na próxima versão ...
— ETHproductions

@Eth Ok, ¬ é uma grande coisa.
— Nicael

2

APL, 27 21 bytes

h(+,-).5*⍨⊣-⍨h×h←.5×⊢

Este é um trem de funções diádicas que aceita números inteiros à direita e à esquerda e retorna uma matriz. Para chamá-lo, atribua-o a uma variável.

Ungolfed:

                h←.5×⊢       ⍝ Define a train h for halving the input
              h×             ⍝ b^2/4
          ⊣-⍨                ⍝ b^2/4 - c
      .5*⍨                   ⍝ sqrt(b^2/4 - c)
h(+,-)                       ⍝ Return the halved pair

Experimente online

Economizou 6 bytes graças a Dennis!


2

CJam, 18 bytes

q~2d/_2#@-mq_2$+p-

Experimente online!

Como funciona

q~                  e# Read an evaluate all input. STACK: product sum
  2d/               e# Divide the sum by 2.0.
     _              e# Push a copy of the result.
      2#            e# Square the copy.
        @-          e# Rotate the product on top and subtract it from the square.
          mq        e# Apply square root.
            _2$     e# Push copies of the root and the halved sum.
               +p   e# Add and print.
                 -  e# Subtract the originals.

2

Python 3, 49 44 bytes

Provavelmente, existem algumas maneiras de jogar isso ainda mais, mas isso parece muito bom.

def f(s,p):s/=2;d=(s*s-p)**.5;return s+d,s-d

O sinal da diferença está incorreto; deveria ser s/2-d. Além disso, d=(s*s/4-p)**.5salva alguns bytes.
— Dennis

@ Dennis Oops, você está certo. Fixo e golfe.
— Sherlock9

1

MathCAD 15. 38 bytes

insira a descrição da imagem aqui

Com uma fórmula matemática, a programação no MathCAD é fácil. A linguagem foi projetada para lidar com números complexos com facilidade. No entanto, existem idiomas mais curtos que podem resolver o problema.


1

, 21 caracteres / 30 bytes

[x=í/2+√ í²/4-î⦆,í-x]

Try it here (Firefox only).

Meh. Isso deve ser visual o suficiente para vocês entenderem a idéia; no entanto, se você precisar î = input1, í = input2,.


0

PHP, 62 bytes

<?=($x=($p=$_GET[p])/2+sqrt($p*$p/4-$q=$_GET[q]))." ".($p-$x);

Isso pode ser bastante longo, mas ter um programa PHP completo para a web. Aceita os argumentos por meio da solicitação "get".

Demo .


0

TI-BASIC, 20 bytes

Toma Qde Anse Pde Prompt. Ligue como P:prgmNAME.

Prompt P
P/2+√(P²/4-Ans
{Ans,P-Ans

Muito agradável. Pena que essa Promptafirmação seja tão longa, lol. Não conheço o TI-BASIC, mas poderia ser mais curto se você colocasse o código em uma função e passasse P como parâmetro.
— Ashwin Gupta

Na verdade, o TI-BASIC é dividido em "tokens"; Cada uma das Prompt , P, /, 2, +, √(, ², 4, -, Ans, e {são uma forma, e cada um desses símbolos representa um byte. Além disso, o TI-BASIC não possui funções. Este é provavelmente o método mais curto.
— Conor O'Brien

Oh, bem, isso é interessante, eu não percebi isso. Mas cada char não é um byte ainda no sentido técnico? Como se eu fosse copiar e colar isso em um documento de texto, obtenho 36 bytes. Ou isso usa caracteres Unicode especiais?
— Ashwin Gupta

TI-BASIC é uma linguagem de calculadora, então é isso que se vê. Ele está digitado na calculadora, não em um documento de texto ou similar. Aqui estão os tokens de um byte.
— Conor O'Brien

Ah, ok, eu peguei você. Legal. Eu só estava curioso.
— Ashwin Gupta
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.