숫자 N이 주어지면 N의 부호 를 출력하십시오 .
- N이 양수이면 출력 1
- N이 음수이면 출력 -1
- N이 0이면 출력 0
N은 선택한 언어에서 표현 가능한 정수 범위 내의 정수입니다.
숫자 N이 주어지면 N의 부호 를 출력하십시오 .
N은 선택한 언어에서 표현 가능한 정수 범위 내의 정수입니다.
답변:
[1-9].*
1
0이 아닌 숫자와 그 뒤의 모든 문자를로 바꿉니다 1
. 이것은 잠재적 인 선행을 -
그대로두고 0
자신을 제외한 모든 숫자 를 절대 값으로 변경합니다 1
.
0.42e2
?
바이트를 저장해 준 @aross와 @Steadybox에게 감사합니다!
f(n){n=!!n|n>>31;}
모든 시스템 또는 컴파일러에서 작동한다고 보장 할 수는 없으며 TIO 에서 작동합니다 .
return n>>16|!!n;
f(n){n=n>>31|!!n;}
작동합니다. 그러나 이것은 언어 기능이 아닌 컴파일러의 단점입니다.
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에서의 골프는 다소 어렵다는 사실에 놀랄 것입니다). 이는 앞으로 몇 바이트 더 떨어질 수 있습니다.
OUT OF MANA!!!
(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이 감소합니다. 출력으로 보냈습니다.
I
소문자처럼 입력이 끝나면 -1을 반환 하는 것이 좋습니다 i
.
Math.sign
똑바로.
내장되지 않은 가장 짧은 것은 13 바이트입니다.
n=>n>0|-(n<0)
@Neil 덕분에 이것은 바이트 단위로 골프를 칠 수 있지만 32 비트 정수로만 작업해야합니다.
n=>n>0|n>>31
아니면 할 수 있습니다
n=>n>0?1:!n-1
더 골프 타는 것 같지만 어떻게 해야할지 모르겠습니다.
n
: n=>n>>31|!!n
.
n>>31
은 정말 똑똑합니다. 감사합니다!
복소수에서도 작동하며 1∠ θ를 반환합니다 .
×
해당 내장 기능이 없으면 정수 (OP 당) :
¯1⌈1⌊⊢
¯1⌈
부정적인 것 중 가장 큰 것
1⌊
하나의 가장 작은
⊢
논쟁 거리
... 그리고 일반적인 것 :
>∘0-<∘0
>∘0
0보다 큰
-
마이너스
<∘0
0보다 작은
바이트 저장을위한 Sp3000에 감사합니다.
'i$-%n/
에 인쇄 할 수없는 항목 0x01
이 /
있습니다.
이것은 내 문자 코드 기반 Labyrinth answer 의 포트입니다 .
' Push the entire program (except ' itself) onto the stack, which ends
with [... 1 47].
i Read the first character of the input.
$- Subtract the 47.
% Take the 1 modulo this value.
n Output the result as an integer.
0x01 Unknown command, terminates the program.
;
인쇄 할 수없는 대신 법적으로 사용할 수 있다고 생각합니다.)0x01
0x01
밀어야 1
합니다.
123
. 교훈 : 더 많은 사례로 테스트합니다.
xVp:s/-/-1^M:s/[1-9]/1^M
@DJMcMayhem 덕분에 1 바이트를 절약했습니다 !
여기에, ^M
리터럴 개행 문자입니다.
따라 @ nmjcman101는 의견에서 지적, 하나의 정규식 (사용할 수있는 :s/\v(-)=[^0].*/\11^M
20 바이트)를 대신하지만, 이것은 망막 대답이 될 것으로 기본적으로 동일하기 때문에, 나는 내 자신의 방법을 고수하고있다.
설명:
xVp Delete everything except the first character. If the number is negative, this leaves a -, a positive leaves any number between 1 and 9, and 0 leaves 0.
:s/-/-1^M Replace a - with a -1
:s/[1-9]/1^M Replace any number between 1 and 9 with 1.
음수 (이전 버전)로 실행되는 gif는 다음과 같습니다.
다음은 0으로 실행됩니다.
긍정적으로 달리기 :
:s/\v(-)=[^0].*/\11
/a/\/1\/\///2a3a4a5a6a7a8a9a10a11/1/
/2/1/
/3/1/
/4/1/
/5/1/
/6/1/
/7/1/
/8/1/
/9/1/
/10/1/
/11/1/
기본적으로 MapReduce 구현입니다. 즉 두 단계가 있습니다.
2
- 9
에 의해 1
, 예를 들면 1230405
->1110101
11
또는 쌍 10
을 1
반복해서 줄입니다 ( 예 : 1110101
->).1
-
처음에 앞에 가 있으면 그대로 유지되고 출력은입니다 -1
. 단일 0
은 교체되지 않으므로 결과적으로 자체가됩니다.
업데이트 : Martin Ender 덕분에로 앨리어싱 //1/
하여 16 바이트를 추가로 절약하십시오 a
.
(0).__rcmp__
...
-(0).__cmp__
.
?:+:)%:(%!
Labyrinth의 제어 흐름 시맨틱은 실제로 숫자의 부호를 결정하는 "자유로운"방법을 제공합니다. 3 방향 포크에서 선택한 경로는 부호가 음수인지 0인지 양수인지에 따라 달라지기 때문입니다. 그러나 지금까지 12 바이트 미만으로 접합이있는 프로그램을 맞출 수 없었습니다 (가능하더라도).
대신, 여기에는 분기가 필요없는 닫힌 양식 솔루션이 있습니다.
Code Comment Example -5 Example 0 Example 5
? Read input. [-5] [0] [5]
:+ Double. [-10] [0] [10]
:) Copy, increment. [-10 -9] [0 1] [10 11]
% Modulo. [-1] [0] [10]
:( Copy, decrement. [-1 -2] [0 -1] [10 9]
% Modulo. [-1] [0] [1]
! Print. [] [] []
그런 다음 명령 포인터가 막 다른 골목에 도달하고 돌아 서서 %
0으로 나누기를 시도하면 종료됩니다 .
입력을 두배로하는 입력이 작업을 할 필요가있다 1
하고 -1
, 그렇지 않으면 두 개의 모듈로 작업 중 하나가 이미 0으로 나누기를 시도 할 것이다.
:D
새로운 우주선 연산자를 사용합니다.
<?=$argv[1]<=>0;
<?=
사용 $_GET[n]
하지 않는를 사용해야 합니다. 를 사용하려면 <?=
웹 서버 (Apache와 같은) 내부에 있어야하며에 액세스 할 수 없습니다 $argv
. <?php var_dump($argv);
Apache를 통해 PHP 파일에서 실행 을 시도 하면이 표시 NULL
됩니다.
<?=
운영자는 명령 줄에서 제대로 작동합니다.
php -r '<?=1'
나는 얻을 PHP Parse error: syntax error, unexpected '<' in Command line code on line 1
. 그러나 파일에서 제대로 작동하는 것 같습니다. 당신 말이 맞아요
-r
플래그는 코드를 실행하는 것입니다. 이것은 완전한 소스입니다. 파일에 저장 한 다음 실행php file.php
-f
매개 변수를 사용하여 파일에서 작동한다는 것을 실제로 알지 못했습니다 .
1000000000 덕분에 2 바이트 절약
{([({}<([()])>)]<>(())){({}())<>}}{}({})
설명:
{ } # if 0 do nothing
( ) # push:
{}< > # the input, after
( ) # pushing:
[ ] # negative:
() # 1
( ) # Then push:
[ ] # the negative of the input
<> # on the other stack with:
() # a 1
( ) # pushed under it
{ } # while 1:
({}()) # increment this stack and...
<> # switch stacks
{} # pop the top (the counter or 0 from input)
( ) # push:
{} # the top (this is a no-op, or pushes a 0)
(())
이 두 가지 C 익스플로잇을 남용하여 골프를 쳤다. 이것은 C (GCC)입니다.
f(a){a=a>0?:-!!a;}
개정 이력 :
1) f(a){return(a>0)-(a<0);}
// 24 바이트
2) f(a){a=(a>0)-(a<0);}
// 20 바이트
3) f(a){a=a>0?:-1+!a;}
// 19 바이트
4) f(a){a=a>0?:-!!a;}
// 18 바이트
개정 1 : 첫 번째 시도. 간단한 논리
개정 2 : GCC에서 메모리 / 스택 버그 를 남용합니다. 내가 알 수있는 한 반환되지 않는 함수는 특정 경우에 마지막으로 설정된 변수를 반환합니다.
개정 3 : 정의되지 않은 결과가 조건부 결과를 반환하는 삼항 동작 남용 ( 제 삼항에 대한 실제 리턴이 0이 아닌 이유 )
개정 4 : 개정 2에서 참조 !!
하기 위해 삼항 조건부 대체에서 부울 캐스트 ( )를 뺍니다 nil
.
->x{x<=>0}
0.<=>
도 작동, 또는 당신은 루비에서 그런 방법을 참조 할 수 없습니다?
.<=>
1 개의 인수를 기대하므로 결국 0.<=> x
더 길어집니다.
0.method:<=>
루비에서 메소드 호출은 괄호를 사용하지 않으며 0.<=>
인수가 너무 적은 메소드 호출로 해석되므로 필요합니다.
-E
추가 비용없이 필요합니다 .
say<><=>0
perl -E 'say<><=>0' <<< -9999
-1
perl -E 'say<><=>0' <<< 9999
1
perl -E 'say<><=>0' <<< -0
0
나는 물고기 연산자에 만족합니다!
-E
파일 대신 CLI에서 호출하는 경우에만 추가 비용이 들지 않는다고 생각합니다.
-e
작동하지 않습니다,하지만 -E
보다 더 이상으로 허용됩니다 -e
. 메타에 대한 합의에 따라. 나는 그것이 조금 도움이되기를 바랍니다!
_[:I!:
-nm
플래그의 경우 +4 바이트 n
숫자 I / O 용이며 Stack Cats는 프로그램이 회 문식이어야 m
하므로 소스 코드를 암시 적으로 미러링하여 원본 소스를 제공합니다.
_[:I!:!I:]_
온라인으로 사용해보십시오! 기본적으로 모든 좋은 스택 캣츠 골프와 마찬가지로, 이것은 무차별적인 힘으로 발견되었으며, 긴 시도로 수동 시도를 이기고 더 큰 프로그램에 쉽게 통합 할 수 없습니다.
D
단계별 프로그램 추적을 보려면 플래그를 추가 하십시오 (예 : -nmD
STDERR / debug로 실행 및 확인).
스택 고양이는 바닥에 0으로 암시 적으로 채워진 스택 테이프를 사용합니다. 프로그램 시작시 모든 입력은 입력 스택에 푸시되며 입력은 -1
암시 적 0에서 입력을 분리하기 위해베이스에 입력됩니다. 프로그램이 끝나면 현재 스택이 출력 -1
됩니다 ( 기본이있는 경우 제외) .
관련 명령은 다음과 같습니다.
_ Perform subtraction [... y x] -> [... y y-x], where x is top of stack
[ Move left one stack, taking top of stack with you
] Move right one stack, taking top of stack with you
: Swap top two of stack
I Perform [ if top is negative, ] if positive or don't move if zero. Then
negate the top of stack.
! Bitwise negate top of stack (n -> -n-1)
이러한 모든 명령은 반전이 가능하며 명령의 미러가됩니다. 이것은 스택 고양이의 전제입니다. 길이가 긴 프로그램도 자체 취소되므로 모든 사소한 종료 프로그램의 길이는 홀수입니다.
우리는 시작합니다
v
n
-1
... 0 0 0 0 0 ...
_
, 감산 상단을 -1-n
한 [
결과 하나의 스택을 왼쪽으로 이동 :
v
-1-n -1
... 0 0 0 0 0 ...
:
I
스택 맨 위가 이제 0이므로 맨 위 2를 바꾸고 아무 것도 수행하지 않습니다. !
그런 다음 비트 단위로 상위 0을 a -1
로 :
무시하고 상위 2를 다시 바꿉니다. !
다음 비트는 회전 상단을 부정 -1-n
으로 다시 n
다시 :
v
n
-1 -1
... 0 0 0 0 0 ...
이제 우리 I
는 원래에 적용 되는를 기반으로 분기합니다 n
.
경우 n
음, 우리는 하나의 스택을 왼쪽로 끝으로 이동 -n
암시 제로에. :
스왑하고 0을 맨 위에 놓고 방금 움직 ]
인 0의 맨 위에 0을 이동시킵니다 -1
. _
그런 다음 빼고 최종 스택을와 같이 남겨두고 밑 이 무시 되므로 [-1 -1]
하나만 -1
출력 -1
됩니다.
경우 n
제로, 우리는 이동하지 않는 :
퍼팅, 스왑을 -1
상단에. ]
그런 다음 이것을 왼쪽 -1
위로 오른쪽 -1
으로 이동하고 _
빼서 최종 스택을 남기고 [-1 0]
0을 출력하고 밑을 무시합니다 -1
.
경우 n
긍정적, 우리는 함께 올바른 스택과 끝을 이동 -n
A의 -1
. :
스왑하고, -1
맨 위에 놓고, 암시 적 0 위로이 오른쪽으로 ]
이동 -1
합니다. _
그런 다음 빼고 0 - (-1) = 1
최종 스택을 주고 남기고 [1]
출력됩니다.
median({1,Ans,~1
대체 솔루션 (자세한 의견 제안) :
max(~1,min(Ans,1 8 bytes
0:If Ans:Ans/abs(Ans 9 bytes
(Ans>0)-(Ans<0 10 bytes
~
?
~
도이 토큰을 나타내는 데 사용한다는 것을 알고 있습니다.
Ans
입력으로 유효한 기본 I / O 방법 인 기준을 충족하지 않는 (이 downvotes 두 배 많은 upvotes가 없습니다 - 현재는 + 19 / -12에서이다).
0>EGg-
입력은 숫자 또는 배열 일 수 있습니다. 결과는 숫자 또는 해당 값을 가진 배열입니다.
온라인으로 사용해보십시오! 또는 배열 입력을 사용하여 여러 경우 를 테스트하십시오 .
내장 부호 기능 ( ZS
)을 사용하지 않아도됩니다 .
0> % Take input implicitly. Push 1 if positive, 0 otherwise
E % Multiply by 2
Gg % Push input converted to logical: 1 if nonzero, 0 otherwise
- % Subtract. Implicitly display
ZS
대답에서 말하는 것처럼 내장 기능을 사용할 수도있었습니다 .
Sign
주석에서 정확히 말한 내용
f=@(x)real(asin(x))/pi*2
이것은 내 첫 번째 코드 골프 옥타브 답변입니다. 골프 팁은 높이 평가됩니다!
를 가져 asin
오는 아이디어 는 다음과 같은 질문에서 나옵니다. output the sign
:)
참고 : 숫자를 나누고 pi
곱하는 것은 2
전체 숫자를 나누는 것과 같습니다.pi/2
사례 0
:
asin(0)
수율 0
. 그것의 실제 부분을 취하고 그것을 나누는 것은 pi/2
출력에 아무런 영향을 미치지 않습니다.
사례 positive
:
asin(1)
수율 pi/2
. + 복잡한 숫자를 제공하는 asin
것보다 큰 숫자 그 실수 부분을 제공 촬영 하고 그 분할에 의해 부여1
pi/2
pi/2
pi/2
1
사례 negative
:
asin(-1)
수율 -pi/2
. + 복소수 를 제공하는 asin
것보다 작은 수의 그 실수 부분을 제공 촬영 하고 그 분할에 의해 부여-1
-pi/2
-pi/2
pi/2
-1
N will be an integer
나는 그것이 운이 좋다 :)
f=
나머지는 유효한 비 재귀 함수 식인 경우 필요하지 않습니다 .
s
주석에서 정확히 말하는 또 다른 경우 s
는 부호 기능입니다.
내장되지 않은 경우 (4 바이트) :
;A\+
;A\
입력의 절대 값을 입력으로 나눕니다. 결과 -1
는 음의 입력과 1
양의 입력입니다. 불행히도, 0
입력 0
이 스택에 2 초 남았 기 때문에 실제로 오류 처리 (일이 잘못되면 명령이 무시 됨) 로 인해. +
그것들을 추가하여 수정합니다 (다른 문제가 발생하여 무시됩니다).
5bpjhbttttfttatraaearfjearoaearbcatsdcclq
이 piet 코드는 기본적 (n>0)-(n<0)
으로 부호 검사가 없으므로 표준을 수행합니다 . 실제로 내장 된 것보다 적지 않으므로이 방법에 대한보다 정확한 설명은 다음과 같습니다 (n>0)-(0>n)
.
위의 텍스트는 이미지를 나타냅니다. 인터프리터 페이지의 텍스트 상자에 이미지를 붙여 넣어 이미지를 생성 할 수 있습니다. 편의상 코덱 크기가 31 픽셀 인 이미지를 아래에 제공했습니다. 그리드는 가독성을 위해 존재하며 프로그램의 일부가 아닙니다. 또한이 프로그램은 흰색 코덱을 교차하지 않습니다. 프로그램 경계를 따르기 위해 이미지 테두리 주위의 컬러 코드를 따르십시오.
Instruction Δ Hue Δ Lightness Stack
------------ ----- ----------- --------------------
In (Number) 4 2 n
Duplicate 4 0 n, n
Push [1] 0 1 1, n, n
Duplicate 4 0 1, 1, in, in
Subtract 1 1 0, in, in
Duplicate 4 0 0, 0, in, in
Push [4] 0 1 4, 0, 0, in, in
Push [1] 0 1 1, 4, 0, 0, in, in
Roll 4 1 0, in, in, 0
Greater 3 0 greater, in, 0
Push [3] 0 1 3, greater, in, 0
Push [1] 0 1 1, 3, greater, in, 0
Roll 4 1 in, 0, greater
Greater 3 0 less, greater
Subtract 1 1 sign
Out (Number) 5 1 [Empty]
[Exit] [N/A] [N/A] [Empty]
파일 크기를 더 줄이려면 실제로 했던 것처럼 파일을 압축하는 대신 실제로 프로그램 (gasp)을 변경해야합니다 . 나는 이것을 36으로 골프화하는 하나의 행을 제거하고 싶습니다. 실제로 코드를 더 작게 만들기 위해 코드를 변경하는 것이 코드 골프가 아니기 때문에 훨씬 작은 입력 형식을 갖는 자체 인터프리터를 개발할 수도 있습니다.
mods는 전체 파일 크기가 Piet 코드에 중요하다고 말했습니다. 인터프리터는 텍스트를 유효한 입력으로 받아들이고 원시 텍스트는 이미지보다 훨씬 적은 바이트 수를 가지므로 텍스트가 확실한 선택입니다. 나는 이것에 대해 건방진 사과를하지만 규칙을 만들지 않습니다. 이것에 대한 메타 토론 은 그 문제에 대한 나의 의견을 분명히합니다.
그것이 Piet의 정신에 위배된다고 생각하거나 어떤 이유로 든 이것을 더 논의하고 싶다면 meta에 관한 토론을 확인하십시오 .
이것은 아마도 내가 작성한 가장 이상한 프로그램 일 것입니다 ...
&?&|/;#
제로 나누기 오류를 피하기 위해 sign(x) = abs(x) / x
명시 적으로 사용 sign(0) = 0
합니다.
\ Take implicit input
&? ; \ If the input is True (not 0):
&| \ Push its absolute value
/ \ Divide
# \ Output TOS (the sign)
때문에 작품 x / abs(x)
이다 일 때 x는 긍정적이고 -1 때 x가 음수입니다. 입력이 0이면 프로그램이 출력 명령으로 이동합니다.
휴일과 시간이 너무 많아서 Pushy 통역사를 완전히 다시 작성했습니다. 위의 프로그램은 여전히 작동하지만 0 / 0
이제 기본값은 0이므로 다음이 더 짧습니다.
&|/#
abs
에 대해 생각하고 있었지만 0
. 잘 했어!
2 바이트에 대해 @DJMcMayhem에게 감사합니다. reg-ex를 사용하여 대체를 수행합니다. 내장되어 있지 않기 때문에 재미 있습니다. 더 재미있는 기능이 있지만 예상 한대로 작동하지 않습니다.
ͨ-©½0]/±1
이것은 :%s/\v(-)=[^0].*/\11
하나 이상의 -
다음에 0이 아닌 다른 숫자 와 일치 하는 횟수로 변환됩니다. 첫 번째 일치 (따라서 -
또는 아무것도 아님) 및 a 로 대체됩니다 1
. 정규식은 0과 일치하지 않으므로 그대로 유지됩니다.
더 재미있는 방법 (21 바이트)
é
Àé12|DkJòhé-òó^$/a
이것은 입력을 버퍼가 아닌 인수로 받아들입니다.
é<CR>
새 줄을 삽입하십시오.
À
인수를 V 코드로 실행하십시오. a -
는 커서를 이전 줄로 옮기고, 어떤 숫자라도 다음 명령의 카운트가됩니다.
é1
삽입 (계산) 1
의
2|
두 번째 열로 이동
D
두 번째 열부터 모든 문자를 삭제하십시오 (한 문자 만 남음).
kJ
두 줄을 합치십시오.
òhé-ò
" hé-
중단까지 실행"으로 번역됩니다 . 1이 두 번째 줄에 있으면 h 직후에 끊어집니다. 첫 번째 줄에 있으면 나누기 -
전에 a 를 삽입합니다 .
ó^$/a
이 사실 수정 -1
, 0
, 1
빈을 떠나을 인수 레지스터와 빈을 대체합니다.
Àé1
. 양수는 1의 문자열을 제공하고 음수는 1 행의 문자열을 제공해야하며 0은 아무 것도 제공하지 않습니다. 음수 비트는 작동 À
하지 않았지만d$@"
é<cr>
하면 두 개의 빈 줄이 생겨 작동 합니다. 당신이 완전한 답을 얻기 위해 그것을 사용할 수 있는지 확실하지 않습니다
--
당신이 추가 한 주장 은 무엇입니까 ?
-6
docopt (명령 행 옵션을위한 파이썬 라이브러리)는 플래그로 시작 하므로 인수가 아니라 명령 행 플래그라고 생각합니다. 옵션을 추가 --
하는 것이 아니라는 신호 만 추가 합니다. 그렇지 않으면 유효하지 않은 명령 행 호출로 인해 전혀 실행되지 않습니다.
Neil 덕분에 개선 된 솔루션
n=>n>0?1:n>>31;
또는 내장 메소드의 길이 가 1 바이트 더 깁니다.
n=>Math.Sign(n);
테스트 케이스가 포함 된 전체 프로그램 :
using System;
public class P
{
public static void Main()
{
Func<int,int> f =
n=>n>0?1:n>>31;
// test cases:
for (int i=-5; i<= 5; i++)
Console.WriteLine(i + " -> " + f(i));
}
}
n>>31
대신 사용해보십시오 n<0?-1:0
.
;
람다는 진술이 아니라 표현이므로 후행이 필요하다고 생각하지 않습니다 . B) Math.Sign
또는 Math::Sign
이와 유사한 것이 유효한 제출물입니까? C #이 특히 메소드를 처리하는 방법을 잘 모르겠습니다. 기본적으로 올바른 유형으로 초기화 된 x = Math.Sign;
경우 유효한 C # 문 x
입니까?