고유 한 합계 만들기


10

정수를 입력으로 수신하고 출력하거나 합계가 첫 번째 정수인 두 정수를 리턴하는 프로그램 또는 함수를 작성해야합니다.

하나의 추가 요구 사항 이 있습니다 . 두 개의 다른 입력에 대한 출력의 일부가 될 수 없습니다 .

세부

  • 최소한 범위에 대한 입력을 처리 할 수 ​​있어야합니다 -32768 .. 32767(포함).
  • 데이터 유형이 임의의 정수를 처리 할 수 ​​없다면 괜찮지 만 이론적으로는 임의의 크고 작은 숫자에 대해 알고리즘이 작동해야합니다.

각 블록은의 형식으로 정확하거나 잘못된 솔루션의 일부를 보여줍니다 input => output.

1 => 6 -5
2 => -2 4
15 => 20 -5

Incorrect, as `-5` is used in two outputs.

-5 => -15 10
0 => 0 0
1 => 5 6
2 => -5 7

Incorrect, as `5 + 6` isn't `1`.

-1 => -1 0
0 => 6 -6
2 => 1 1

Can be correct if other outputs doesn't collide.

이것은 코드 골프이므로 가장 짧은 참가작이 승리합니다.


입력 범위를 -32768 .. 32767으로 제한 할 수 있으므로 17 비트 정수를 사용할 필요가 없습니까?
FUZxxl

@FUZxxl 나의 나쁜, 그 의도였다. 결정된.
randomra

두 개의 정수를 포함하는 목록 / 배열 / 튜플 / 세트 / 등이 출력이 될 수 있습니까? (예를 들어, f (1) => [2, -1])
monopole

입력에 큰 양수와 큰 음수를 곱하여 제한된 정수 크기에 의존하는 몇 가지 솔루션이있는 것 같습니다. 그러한 해결책은 "이론적으로 임의의 크고 작은 숫자에 대해 알고리즘이 작동해야"한다는 요구 사항을 충족시키지 못하는 것 같습니다. 질문을 잘못 읽고 있습니까?
mathmandan

답변:


9

Pyth, 8 바이트

_J^Q3+QJ

데모. Python 2 코드와 동일합니다.

Q=input()
J=Q**3
print -J
print Q+J

따라서 출력의 형태는 (-n**3, n+n**3)

일부 출력 :

-5 (125, -130)
-4 (64, -68)
-3 (27, -30)
-2 (8, -10)
-1 (1, -2)
 0 (0, 0)
 1 (-1, 2)
 2 (-8, 10)
 3 (-27, 30)
 4 (-64, 68)
 5 (-125, 130)

큐브는 충분히 추가하는 것을 간격 때문에 이들은 별개 n로하는 n**3: 다음 큐브 격차를 통과하는 것만으로는 충분하지 않습니다 n**3 < n+n**3 < (n+1)**3양성을위한 n, 대칭 부정적인 위해 n.


당신은 ,처음에 필요하지 않습니다 , 두 줄이 허용되는 것으로 나타납니다.
Maltysen

@ Maltysen 나는 그것을 제거하려고 시도했지만 두 번째 숫자 만 인쇄됩니다. 아마 J할당 억압은 인쇄?
xnor

아 맞아, 미안
Maltysen

-pyth 년은 단항 부정 연산자 아니다 _, 그래서 _J^Q3+QJ예상대로 작동합니다.
Maltysen

@ Maltysen 실제로, 그 작동, 난 그냥 J외부에있을 필요 가 없습니다. 이것에 대해 나를 파고 주셔서 감사합니다.
xnor

8

눈사람 0.1.0 , 101 자

}vg0aa@@*45,eQ.:?}0AaG0`NdE`;:?}1;bI%10sB%nM2np`*`%.*#NaBna!*+#@~%@0nG\]:.;:;bI~0-NdEnMtSsP" "sP.tSsP

STDIN에 입력, STDOUT에 공백으로 구분 된 출력.

이것은 isaacg의 답변과 동일한 방법을 사용합니다.

"가독성"을 위해 줄 바꿈이있는 주석 처리 된 버전 :

}vg0aa          // get input, take the first char
@@*45,eQ.       // check if it's a 45 (ASCII for -) (we also discard the 0 here)
// this is an if-else
:               // (if)
  ?}0AaG        // remove first char of input (the negative sign)
  0`NdE`        // store a -1 in variable e, set active vars to beg
;
:               // (else)
  ?}1           // store a 1 in variable e, set active vars to beg
;bI             // active variables are now guaranteed to be beg
%10sB           // parse input as number (from-base with base 10)
%nM             // multiply by either 1 or -1, as stored in var e earlier
2np`*`          // raise to the power of 2 (and discard the 2)
%.              // now we have the original number in b, its square in d, and
                //   active vars are bdg
*#NaBna!*+#     // add abs(input number) to the square (without modifying the
                //   input variable, by juggling around permavars)
@~%@0nG\]       // active vars are now abcfh, and we have (0>n) in c (where n is
                //   the input number)
:.;:;bI         // if n is negative, swap d (n^2) and g (n^2+n)
~0-NdEnM        // multiply d by -1 (d is n^2 if n is positive, n^2+n otherwise)
tSsP            // print d
" "sP           // print a space
.tSsP           // print g

PPCG의 최초 눈사람 솔루션에 대한 해설 : 언어를 가능한 한 혼란스럽게 만드는 디자인 목표를 달성했다고 생각합니다.

이것은 실제로 훨씬 짧았을 수도 있지만 바보입니다. 문자열-> 숫자 구문 분석에 음수를 구현하는 것을 잊었습니다. 따라서 -첫 번째 문자 가 있는지 수동으로 확인 하고 필요한 경우 제거해야했습니다.


1
Brainfuck보다 낫다.
Phase

1
타조는 이것에 대해 어떻게 생각합니까? ;)
Kade

6

Pyth, 15 11 바이트

@Jakube 덕분에 4 바이트

*RQ,hJ.aQ_J

데모.

이것은 다음과 같이 매핑됩니다.

0  -> 0, 0
1  -> 2, -1
-1 -> -2, 1
2  -> 6, -4
-2 -> -6, 4

그래서,에, 항상 포함 n^2하고 n^2 + n플러스 또는 마이너스.


5

APL, 15 바이트

{(-⍵*3)(⍵+⍵*3)}

이렇게하면 -n ^ 3 ( -⍵*3), n + n ^ 3 ( ⍵+⍵*3) 쌍을 반환하는 명명되지 않은 monadic 함수가 생성 됩니다.

당신은 할 수 있습니다 온라인으로보십시오 .



2

O , 17 15 9 바이트

O의 몇 가지 새로운 기능을 사용합니다.

Q3 ^ .Q + p_p

이전 버전

[i # .Z3 ^ * \ Z3 ^) _ *] o

1
인터프리터가 Java로 작성되지 않았다면 더 많은 것을 원하지만이 O 답변을 즐기기 시작했습니다 ...;)
kirbyfan64sos

@ kirbyfan64sos Pyth만큼 작지는 않지만 경우에 따라 CJam & GolfScript를 이길 수 있습니다. 배열이 강력하기 때문에 배열과 관련된 모든 것을 이길 수 있습니다.
Phase

1

파이썬 3, 29 27

편집 : 두 번째 "세부 사항"글 머리 기호의 요구 사항을 충족하지 않습니다

보너스 : -99998에서 99998까지 작동합니다.


lambda n:[99999*n,-99998*n]

이렇게하면 익명 함수 *가 만들어집니다.이 함수는 괄호로 묶은 후 다음과 같이 인수를 괄호 안에 넣습니다.

(lambda n:[99999*n,-99998*n])(arg)

* 제안 해 주신 @ vioz-에게 감사합니다.


입력 / 출력 예 :

>>> (lambda n:[99999*n,-99998*n])(1)
[99999, -99998]
>>> (lambda n:[99999*n,-99998*n])(2)
[199998, -199996]
>>> (lambda n:[99999*n,-99998*n])(0)
[0, 0]
>>> (lambda n:[99999*n,-99998*n])(-1)
[-99999, 99998]
>>> (lambda n:[99999*n,-99998*n])(-2)
[-199998, 199996]
>>> (lambda n:[99999*n,-99998*n])(65536)
[6553534464, -6553468928]

1
좋은 포스트! 아시다시피,를 제거하고 f=익명 함수로 남겨두면 여전히 유효한 답변입니다. 그런 다음 바이트 수를 27로 줄이십시오 :)
Kade

1
"... 이론적으로 알고리즘은 임의의 크고 작은 숫자에 대해 작동해야합니다." 분명히 (lambda n:[99999*n,-99998*n])(99999)(lambda n:[99999*n,-99998*n])(-99998)이론에 충돌합니다 (연습에서).
mathmandan

@mathmandan 네 말이 맞아, 요구 사항을 충족시키지 못하도록 게시물을 편집하겠습니다. 새 코드를 작성하고 테스트하려고하는데 컴퓨터에서 멀리 떨어진 곳에 있습니다.
monopole

0

하스켈, 16 바이트

@xnor의 방법을 뻔뻔스럽게 복사했습니다. 아마도 이것보다 낫지는 않을 것입니다.

f x=(-x^3,x^3+x)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.