숫자 N이 주어지면 N의 부호 를 출력하십시오 .
- N이 양수이면 출력 1
- N이 음수이면 출력 -1
- N이 0이면 출력 0
N은 선택한 언어에서 표현 가능한 정수 범위 내의 정수입니다.
답변
레티 나 , 9 바이트
[1-9].*
1
0이 아닌 숫자와 그 뒤의 모든 문자를로 바꿉니다 1
. 이것은 잠재적 인 선행을 -
그대로두고 0
자신을 제외한 모든 숫자 를 절대 값으로 변경합니다 1
.
답변
C (GCC), 24 23 22 18 바이트
바이트를 저장해 준 @aross와 @Steadybox에게 감사합니다!
f(n){n=!!n|n>>31;}
모든 시스템 또는 컴파일러에서 작동한다고 보장 할 수는 없으며 TIO 에서 작동합니다 .
답변
Mathematica, 4 바이트
Clip
내장을 사용하지 않고 Sign
여전히 4 바이트를 스코어링하는 것은 어떻습니까? 😉
Clip
하나의 인자 클립 (또는 클램프)의 입력 값으로 -1
하고 1
. 입력은 정수일 뿐이므로를 사용하는 것과 같습니다 Sign
.
답변
암소 225 213 201 바이트
oomMOOmoOmoOmoOmoOMoOMoOmOomOomOoMoOMMMmoOMMMMOOMOomOo
mOoMOomoOmoOmoomOomOoMMMmoOmoOmoOMMMMOOOOOmoOMOoMOomOo
mOomOoMoOMMMmoOMMMMOOMOomOomOoMoOmoOmoOmoomoOmoomOomOo
mOomoomoOMOOmoOmoOmoOMOoMMMOOOmooMMMOOM
이 코드가 작동하는 방식은 더 큰 숫자를 더하거나 빼고 마지막으로 작동 한 숫자를 확인하여 부호를 결정하는 것입니다. 0이 아닌 정수가 주어지면 먼저 1을 빼고 2를 더한 다음 3을 빼면 결국 0에 도달합니다. 0에서 시작하는 값으로 2를 더하고 빼서 상태를 추적하십시오. 예:
-5 - 1 = -6 (current state: 0 + 2 = 2)
-6 + 2 = -4 (current state: 2 - 2 = 0)
-4 - 3 = -7 (current state: 0 + 2 = 2)
-7 + 4 = -3 (current state: 2 - 2 = 0)
-3 - 5 = -8 (current state: 0 + 2 = 2)
-8 + 6 = -2 (current state: 2 - 2 = 0)
-2 - 7 = -9 (current state: 0 + 2 = 2)
-9 + 8 = -1 (current state: 2 - 2 = 0)
-1 - 9 = -10 (current state: 0 + 2 = 2)
-10 + 10 = 0 (current state: 2 - 2 = 0)
value is now at 0. state - 1 = 0 - 1 = -1
sign of original number is -1
완료되면 주에서 1을 빼고 양수 또는 음수 부호를 얻습니다. 원래 숫자가 0이면이 작업을 방해하지 않고 0 만 인쇄하십시오.
상해:
oom ;Read an integer into [0]
MOO ;Loop while [0] is non-empty
moOmoOmoOmoOMoOMoOmOomOomOo ; Decrement [4] twice
MoOMMMmoOMMM ; Increment [1], then copy [1] to [2]
MOO ; Loop while [2] is non-empty
MOomOomOoMOomoOmoO ; Decrement [0] and [2]
moo ; End loop now that [2] is empty
mOomOoMMMmoOmoOmoOMMM ; Navigate to [0], and copy to [3]
MOO ; Perform the next steps only if [3] is non-zero
OOOmoOMOoMOomOomOomOoMoOMMMmoOMMM ; Clear [3], increment [4] twice, increment [1], and copy it to [2]
MOO ; Loop while [2] is non-empty
MOomOomOoMoOmoOmoO ; Decrement [2] and increment [0]
moo ; End loop now that [2] is empty
moO ; Navigate back to [3]
moo ; End the condition
mOomOomOo ; Navigate back to [0]
moo ;End loop once [0] is empty.
moO ;Navigate to [1]. If [1] is 0, then input was 0. Otherwise, [4] contains (sign of [0] + 1)
MOO ;Perform the next steps only if [1] is non-zero
moOmoOmoOMOoMMMOOO ; Navigate to [4], copy it to the register, and clear [4].
moo ;End condition
MMMOOM ;If the register contains something (which is true iff the condition ran), paste it and print it. Otherwise, no-op and print 0.
나는 아직도 골프를 실험하고 있습니다 (COW에서의 골프는 다소 어렵다는 사실에 놀랄 것입니다). 이는 앞으로 몇 바이트 더 떨어질 수 있습니다.
답변
Cubix , 10 바이트
(W0^I?>O2@
이 코드는 다음 큐브 네트에 래핑됩니다.
( W
0 ^
I ? > O 2 @ . .
. . . . . . . .
. .
. .
그런 다음을 시작으로 I
동쪽을 향한 IP (명령 포인터)로 코드를 실행합니다 . I
STDIN에서 부호있는 정수를 입력하여 스택으로 푸시합니다.
다음 명령은입니다 ?
.이 명령은 최상위 항목의 부호에 따라 IP 방향을 변경합니다. 입력이 0이면 다음 코드를 통해 계속 같은 방향으로 이동합니다.
>
-IP가 동쪽을 가리 키도록합니다. (우리가 이미 동쪽으로 가고 있기 때문에 No-op.)O
-상단 항목을 정수로 출력합니다.2
-2를 스택으로 밉니다. 이것은 실질적으로 아무런 문제가 없습니다. 왜냐하면 …@
-프로그램을 종료합니다.
입력이 음수이면 IP가 왼쪽에서 왼쪽으로 바뀝니다 ?
. 이것은 큐브이므로 IP는 0
두 번째 행에서 동쪽으로 이동합니다. 0
리터럴 0을 푸시하면이 코드가 실행됩니다.
^
-IP 북쪽을 가리 킵니다.W
-왼쪽의 한 지점에서 IP를 “측면”합니다.(
-최상위 항목을 줄입니다.
TOS는 이제 -1
이고 IP는 큐브에 .
닿을 때까지 큐브를 감싸지 않습니다 >
. 위에서 언급 한 것과 동일한 출력 코드를 실행하여 outputting -1
합니다.
입력이 양수인 경우 하나의 예외를 제외하고 음수 입력과 동일한 상황이 발생합니다. IP가에서 왼쪽 대신에 오른쪽으로 바뀌고 ?
큐브를로 감싸서 2
리터럴 2를 푸시합니다. 그러면 1이 감소합니다. 출력으로 보냈습니다.
답변
자바 스크립트 (ES6), 9 바이트
Math.sign
똑바로.
내장되지 않은 가장 짧은 것은 13 바이트입니다.
n=>n>0|-(n<0)
@Neil 덕분에 이것은 바이트 단위로 골프를 칠 수 있지만 32 비트 정수로만 작업해야합니다.
n=>n>0|n>>31
아니면 할 수 있습니다
n=>n>0?1:!n-1
더 골프 타는 것 같지만 어떻게 해야할지 모르겠습니다.
답변
APL (Dyalog APL) , 1 바이트
복소수에서도 작동하며 1∠ θ를 반환합니다 .
×
해당 내장 기능이 없으면 정수 (OP 당) :
¯1⌈1⌊⊢
¯1⌈
부정적인 것 중 가장 큰 것
1⌊
하나의 가장 작은
⊢
논쟁 거리
… 그리고 일반적인 것 :
>∘0-<∘0
>∘0
0보다 큰
-
마이너스
<∘0
0보다 작은