다이아몬드 퍼즐!


21

설명:

작년 수학 수업에서 숙제를 할 때 다이아몬드 퍼즐이라는 똑같은 성가신 질문이 있지만 때로는 매우 간단합니다. 이것들은 기본적으로 우리에게 합계가 주어질 질문이며, 곱하면 곱할 때와 더할 때 합계를주는 두 숫자를 찾아야했습니다. (대수 I에서) 그것들을 해결하는 방법을 알고있는 유일한 방법은 제품의 요인을 나열한 다음 합계를 만들기 위해 추가 한 요인을 확인하는 것이기 때문에 이들은 나를 미치게했습니다. (당시에는 Quadratics를 사용하는 방법을 몰랐기 때문에) 정확하게 수학에 도전하는 것은 아닙니다. 그러나 방금 프로그램을 작성해야한다는 것이 나에게 일어났습니다. 이것이 오늘의 도전입니다! 다이아몬드 퍼즐을 풀 수있는 프로그램을 작성하십시오.

여기에 이미지 설명을 입력하십시오 흐릿한 이미지에 대한 사과, 내가 찾은 최고의 것. 또한 거품의 숫자는 무시하십시오. 다이아몬드의 상단은 제품이고, 하단은 합계이며, 오른쪽과 왼쪽은 두 숫자입니다. 답변은 다음과 같습니다. (이것은 테스트 사례이기도합니다)

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

규칙 :

  • 이를 위해 사전 정의 된 함수 나 클래스를 사용할 수 없습니다.
  • 코드는 완전한 프로그램이거나 답을 찾으면 답을 반환하거나 인쇄하는 함수 여야합니다.
  • 입력 값은 함수 매개 변수 또는 사용자 입력으로 입력되는 합계 및 곱입니다.

명세서:

  • 두 숫자, 합계 및 곱은 항상 정수라고 가정하십시오.
  • 두 답변은 모두 -127에서 127 사이입니다.
  • 입력은 두 개의 정수 (Sum 및 Product)입니다.

이것이 코드 골프임을 기억하십시오. 그래서 가장 짧은 바이트 수가 이깁니다. 표준 ## 언어 이름, 바이트 수로 답변 제목을 지정하십시오.

편집 : 또한 Doorknob은 이것이 본질적으로 "x ^ 2 + bx + c 형식의 2 차 요소를 고려합니다"라고 지적했습니다. 이것이이 도전에 대해 생각하고 접근하는 또 다른 방법입니다. :디


9
이것은 본질적으로 "2 차 형태의 요소 x^2 + bx + c"입니다. 맞습니까?
Doorknob

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

단순화 (x + n)(x + m)는 당신을 제공 x^2 + (n+m)x + (n*m)하므로 이차를 고려 하면 기본적 으로이 질문과 동일합니다 (내가 올바르게 이해하고 있다면).
Doorknob

@Doorknob 冰 그래 맞아. 중복으로 표시 될 것으로 추측됩니다. :(
Ashwin Gupta

글쎄, 나는 우리가 아직 "요소 x ^ 2 + bx + c"질문을 가지고 있다고 생각하지 않는다. 문제가 매우 비슷하다는 것을 지적했습니다.
Doorknob

답변:


18

젤리 , 15 11 10 바이트

Hð+,_ðH²_½

온라인으로 사용해보십시오!

다음 바이너리 코드는 이 버전 의 Jelly 인터프리터에서 작동합니다.

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

생각

이것은 사실에 근거

공식

암호

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.

1
아주 좋은 온라인 컴파일러입니다. 나는 그들이 자바와 같은 것을 가지고 있기를 바랍니다.
Ashwin Gupta

2
@AshwinGupta Dennis는 실제로 그 자체를 만들었습니다.) Java의 경우 항상 Ideone이 있습니다.
Doorknob

@Doorknob 冰 예, 그의 온라인 컴파일러가 너무 멋지다는 것을 알고 있습니다. 나는 Ideone에 왔으며 그 장점과 전부이지만 문제가되는 멀티 클래스 지원은 없습니다. 학교 D :에서 더 복잡한 프로그램을 테스트 할 방법이 없습니다. 또한, 그것은 그것이 우리가 제공 한 컴퓨팅 장치이기 때문에 그것이 필요하다고 믿거 나 말거나 iPad 브라우저에서 작동하지 않습니다 ...
Ashwin Gupta

누군가 14을 이길 수 없다면, 당신이 이겼다고 생각합니다.
Ashwin Gupta

3
좋아, 젤리는 공식적으로 미친 듯이 짧다. Pyth에 머리를 감은 직후이 언어를 배워야합니다 ...
ETHproductions

14

유니콘 , 4650 2982 1874 1546

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

염소, 무지개, 반짝임으로!

Java보다 짧길 바랍니다.


적용 할 수 있는 사용자 지정 인코딩 을 사용합니다.ApplyEncoding

설명

어떻게 작동합니까 ??? 유니콘의 마법 (그리고 작은 코드).

유니콘은 JavaScript로 컴파일됩니다

각 섹션은 공백으로 구분되며 각 섹션은 JavaScript 코드의 문자를 나타냅니다.

섹션에 유니콘이 포함 된 경우 섹션의 문자는 섹션의 길이이며 문자 코드로 변환됩니다 (예 : 32 개의 유니콘은 공백이 됨)

섹션에 염소가 포함 된 경우 섹션의 길이가 두 배가 된 다음 문자 코드로 변환됩니다.


프로그램의 특수 문자가 표시되지 않으면 다음 그림이 있습니다.

여기에 이미지 설명을 입력하십시오


이 도전이 게시 된 후 유니콘이 만들어 졌기 때문에 이것은 경쟁이 아닙니다.


1
지구상에서 무슨 일이 일어나고 있습니까? 난 그냥 상자를 참조하십시오. ;-;
Lynn

@Mauris aww :( 프로그램 이미지를 게시하여 모두가 영광을 볼 수 있도록
하겠습니다

3
LOL 좋아, 너무 오래되어서 받아 들일 수는 없지만 좋아하는 것입니다.
Ashwin Gupta

4
"자바보다 짧다." 당신은 단지 그것을 위해 +10의 가치가 있습니다;)
ETHproductions

1
@ Doᴡɴɢᴏᴀᴛ, 실망 시켜서 죄송합니다. Java는 그보다 약 18 배 짧습니다.
Tamoghna Chowdhury

8

JavaScript ES6, 45 39 37 * 바이트

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

* Dennis에게 감사합니다!


2
이것이 내가 실제로 이해할 수있는 첫 번째 답변이기 때문에 나는 +1하고 있습니다. LOL
Ashwin Gupta

4

티 스크립트, 22 바이트 30 31

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

아니 나쁜. 유니콘 유니 코드 바로 가기 와 같이 이전에 완료 된 일부 골프 기능을 얻을 수 있다면 훨씬 짧을 것입니다

온라인으로 사용해보십시오


"유니콘 바로 가기"나는 그 소리를 좋아한다! ;)
ETHproductions

@ETHproductions haha, 자동 고침 : p 유니콘 단축키는 흥미로울 수 있지만 ...
Downgoat

3

MATL , 33 바이트

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

두 숫자를 서로 다른 두 줄로 출력합니다. 솔루션이 없으면 출력이 생성되지 않습니다. 여러 솔루션이 존재하면 하나의 솔루션에 해당하는 숫자 쌍만 생성합니다.

다음은 컴파일러 의 현재 GitHub 커밋 으로 옥타브에서 실행되었습니다 .

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

설명

-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

호기심에서 "설명"형식의 프로그램이 실제로 MATL 컴파일러에서 실행됩니까? 구문이 끔찍하게 나뉩니다.
Ashwin Gupta

예, 설명에서 목록을 복사하는 것과 같이 프로그램을 별도의 줄에 붙여 넣을 수 있습니다. matl"enter"를 입력 하고 누르십시오. 그런 다음 프로그램을 붙여 넣고 빈 줄로 끝내십시오. 구문이 끔찍하게 분리되었다는 것은 무엇을 의미합니까? MATL은 리버스 폴리쉬 (접미사) 표기법을 사용합니다.
Luis Mendo

3

줄리아, 46 44 32 바이트

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

합과 곱을 취하는 함수 f

내 첫 줄리아 대답. @AlexA., 당신은 나를 자랑스러워해야합니다.

모든 도움을 주신 @Dennis와 @Alex A.에게 감사드립니다. 나는 44를 넘어야한다. : P


40 바이트 :f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
Alex A.

@AlexA. -당신은 이것에 개선을 제안함으로써 밈을 일어날거야 ...
대럴 호프만

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

32 바이트 :f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
Dennis

2
그것은 우리가 바비 인형이었던 이후로 우리 머리에 맞은 정규 2 차 공식과 같습니다.
Alex A.

3

dc, 16

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

STDIN의 개별 라인에서 합계를 곱한 다음 제품을 읽습니다. -ve 숫자는 빼기 기호 대신 밑줄로 입력해야합니다. 예 :

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

설명:

sum = a + b및에 대한 동일한 기본 2 차 솔루션입니다 product = a * b. 이것은 솔루션 a을 다음과 같이 계산합니다 .

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

그리고 솔루션 b을 다음과 같이 계산합니다 .

b = sum - a

넓히는:

?                   # 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

손실 정밀도를 방지하기 위해 2로 나누면 늦게 수행됩니다. 더 일찍 2로 나눌 수 있지만 더 많은 문자가 필요한 분수 정밀도가 필요합니다.


2
무엇을 기다립니다? 이것은 APL, Pyth CJam 보다 짧았습니다. ?? 우후!
Digital Trauma

3

Pyth, 21 18 바이트

@Dennis 덕분에 3 바이트 절약

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

테스트 스위트

내 두 번째 Pyth 프로그램은 아마도 내장 기능으로 골프를 칠 수 있습니다. 제안은 환영합니다!

작동 원리

,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.

(이 설명은 100 % 정확하지 않을 수 있습니다. Pyth에 익숙하지 않습니다.)

참고 /부문의 정수입니다. 로 바꾸면 c정수가 아닌 입력으로도이 작업을 수행 할 수 있습니다.


1 바이트를 구타 : 당신은 전환을 고려해야합니다 P, D
nicael

이 설명은 100 % 정확하지 않을 수 있습니다 ... ???
Digital Trauma

@DigitalTrauma 100 % 확실하지는 않지만 그것이 작동하는 방식 (특히 J)이지만 문서를 읽음으로써 수집 한 것입니다.
ETHproductions

1
예, J자동 할당 변수이며 처음 사용할 때 설정됩니다. 옳지 않은 것으로 보이는 유일한 부분은 목록이 현재 [J]입니다. ,정확히 두 개의 인수를 취하여 목록에 결합합니다.
Dennis

3

2 차 공식을 갖는 Java, 82 (69λ) 바이트 (127 (114λ) 바이트 무차별 대입)

Brute-Force : (바닐라, 자바 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;}

λ 향상 : (자바 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;}

에 lambda를 할당 java.util.function.BiFunction<Integer, Integer, int[]>하고에 전화하십시오 apply().

평범한 오래된 무차별 접근 방식. 작동 함수 만 있고 Java는 여러 값을 반환 할 수 없으므로 int필요한 숫자가 있는 2 요소 배열을 반환 합니다.

전체 무차별 접근 기반 프로그램은 ideone.com 에서 찾을 수 있으며 여기 에는 λ 버전이 있습니다.

이것을 골퍼하는 것은 불필요한 모든 버팀대를 제거하는 것과 관련이있었습니다.

언 골프 드 :

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;}

이차 접근법 : (바닐라, 자바 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};}

λ- 향상 : (자바 8) (s, p)-> {int x = s + (int) Math.sqrt (s * s-4 * p); 새로운 int 반환 [] {x / 2, sx / 2} ;}

(위의 무차별 λ의 사용법).

매개 변수 및 반환 기준은 위의 무차별 솔루션과 동일합니다.

거의 모든 다른 답변에서 사용되는 오래된 2 차 공식을 사용하며 누군가 나를 도와주지 않으면 더 이상 골프를 칠 수 없습니다. 명확하지 않으므로 ungolfed 버전을 포함하지 않습니다.

전체 2 차 접근 기반 프로그램은 ideone.com 에 있으며 여기에는 λ 버전이 있습니다.


아하 네, 감사합니다. Java 답변을 기다리고있었습니다. 또한, 나는 누군가가 그 요인으로 루프와 무차별 대항을 사용하기를 기다리고있었습니다. 하나의 거래에 대해 두 가지를 얻은 것 같습니다. +1
Ashwin Gupta

1
Java beat unicorn : (+ 1했지만 일일 투표 한도를 사용했습니다
Downgoat

2

Japt , 28 22 21 20 바이트

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

입력은 형식으로 이루어집니다 -63 2.

설명:

  • U그리고 V두 입력되어 ( -63그리고 2제 경우)
  • ² 숫자를 제곱
  • q 제곱근을 추출합니다

나는 이것에 대한 답을 쓰고 있었다. 즉, 내가 당신을 볼 때까지. 잘 하셨어요! 첫 번째 부분을 재정렬하고 몇 가지 유니 코드 바로 가기를 사용하면 21 바이트를 달성 할 수 있습니다 [X=ºV²-4*U ¬+V)/2V-X]. 바로 가기없이 : 다음 버전 [X=((V²-4*U q +V)/2V-X]에서는 후행을 ]불필요하게 만들어야합니다 ...
ETHproductions

@Eth Ok, ¬는 대단합니다.
nicael

2

APL, 27 21 바이트

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

이것은 좌우 함수를 받아들이고 배열을 반환하는 2 차원 함수 트레인입니다. 호출하려면 변수에 지정하십시오.

언 골프 드 :

                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

온라인으로 사용해보십시오

Dennis 덕분에 6 바이트를 절약했습니다!


2

CJam, 18 바이트

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

온라인으로 사용해보십시오!

작동 원리

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

파이썬 3, 49 44 바이트

이것을 더 아래로 골프하는 방법이 있을지 모르지만, 이것은 꽤 좋아 보입니다.

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

차이의 부호가 잘못되었습니다. 이어야합니다 s/2-d. 또한 d=(s*s/4-p)**.5몇 바이트를 절약합니다.
Dennis

@Dennis Oops, 맞습니다. 고정 및 골프.
Sherlock9

1

MathCAD 15. 38 바이트

여기에 이미지 설명을 입력하십시오

수학 공식을 사용하면 MathCAD 프로그래밍이 쉽습니다. 이 언어는 복잡한 숫자를 쉽게 처리하도록 설계되었습니다. 그러나 문제를 해결할 수있는 짧은 언어가 있습니다.


1

𝔼𝕊𝕄𝕚𝕟, 21 자 / 30 바이트

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

Try it here (Firefox only).

Meh. 이것은 아이디어를 얻을 수있을 정도로 시각적이어야합니다. 그러나 필요한 경우 î = input1, í = input2.


0

PHP, 62 바이트

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

꽤 길지만 완전한 기능을 갖춘 PHP 웹- "프로그램"일 수 있습니다. "get"요청을 통해 인수를 승인합니다.

데모 .


0

TI-BASIC, 20 바이트

소요 Q에서 Ans, 그리고 P에서 Prompt. 처럼 전화하십시오 P:prgmNAME.

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

아주 좋아요 그 Prompt말이 너무 길어서 너무 나쁘다 . TI-BASIC을 모르지만 코드를 함수에 넣고 P를 매개 변수로 전달하면 더 짧을 수 있습니다.
Ashwin Gupta

실제로, TI-BASIC은 "토큰"으로 나뉩니다. 각각 Prompt , P, /, 2, +, √(, ², 4, -, Ans, 및 {하나의 토큰이며, 토큰이 각각 1 바이트이다. 또한 TI-BASIC에는 기능이 없습니다. 아마도 가장 짧은 방법 일 것입니다.
Conor O'Brien

글쎄요, 나는 그것을 몰랐습니다. 그러나 각 문자는 여전히 기술적 인 의미에서 바이트가 아닌가? 이것을 복사하여 텍스트 문서에 붙여 넣는 것처럼 36 바이트를 얻습니다. 아니면 특수 유니 코드 문자를 사용합니까?
Ashwin Gupta

TI-BASIC은 계산기 언어이므로이 언어를 볼 수 있습니다. 텍스트 문서 등이 아닌 계산기에 입력됩니다. 1 바이트 토큰은 다음과 같습니다.
Conor O'Brien

아 알았어. 시원한. 방금 궁금 했어요
Ashwin Gupta
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.