제로에서 멀리 떨어져


41

태스크

음이 아닌 정수 주어 n출력 1하는 경우 n이고 0, 출력의 값을 n달리한다.

입력

음이 아닌 정수

  • 문자열을 입력으로 받아들이려면 문자열은 다음 정규식과 일치합니다. /^(0|[1-9][0-9]*)$/0.
  • 실제 정수를 입력으로 받아들이면 정수가 언어의 처리 능력 내에 있다고 가정 할 수 있습니다.

산출

위에서 지정한 양의 정수입니다. 선행 0은 허용되지 않습니다. 출력은 정규식과 일치해야합니다 /^[1-9][0-9]*$/.

테스트 케이스

input output
    0      1
    1      1
    2      2
    3      3
    4      4
    5      5
    6      6
    7      7

채점

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.

표준 허점이 적용됩니다.


1
TNB CMC 와의 연결은 아마도이 도전이 시작된 곳이기 때문일 것입니다 .
mbomb007

답이 완전한 기능이어야합니까, 아니면 몸일 수 있습니까?
Caleb Kleveter

1
@CalebKleveter PPCG의 기본 규칙은 함수 나 전체 프로그램이지만 스 니펫은 아닙니다.
Leaky Nun

선행 0으로 출력을 인쇄 할 수 있습니까?
MD XF

@MDXF 예, 가능합니다.
Leaky Nun

답변:


18

C (gcc), 14 13 바이트

f(n){n=n?:1;}

n?:1다른 C 답변의 의견에 대한 트릭 을 상기시켜 준 @betseg에게 감사드립니다 !

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

C, 17 바이트

f(n){return!n+n;}

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

C, 16 바이트

#define f(n)!n+n

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



1
@betseg 매크로이기 때문입니다. 컴파일러는 3*!n+n어느 것이 같다고 본다 3*0+5.
Steadybox

1
알고 있지만, "반환"값에 산술 연산자를 직접 적용 할 수 있어야한다고 생각하기 때문에 매크로를 괄호로 묶는 것이 일반적입니다. 매크로가 유효하다고 생각하지 않습니다.
betseg

4
@betseg 나는 그것이 코드 골프의 요구 사항이라고 생각하지 않습니다. 나는 C 매크로로 코드 골프 답변을 본 적이 없다.
Steadybox

1
@hucancode TIO 링크를 참조하십시오. main함수 / 매크로 f가 호출 되는를 추가해야합니다 . 솔루션은 기본적으로 전체 프로그램 일 필요는 없습니다. gcc 특정 버전은 다른 컴파일러에서 컴파일되거나 컴파일되지 않을 수 있으며 다른 컴파일러에서 컴파일 될 때 올바르게 실행되거나 실행되지 않을 수 있습니다.
Steadybox

17

Japt , 2 바이트

ª1

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

설명

ªJS ||연산자 의 바로 가기입니다 . Japt에는 암시 적 입력이 있으므로이 프로그램은를 계산 input||1하고 결과는 암시 적으로 STDOUT으로 전송됩니다.

w1입력의 최대 값을 취하여 작동 1합니다.


16

Alice , 7 바이트

1/s
o@i

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

설명

1   Push 1. Irrelevant.
/   Reflect to SE. Switch to Ordinal.
i   Read all input as a string.
    Reflect off bottom right corner. Move back NW.
/   Reflect to W. Switch to Cardinal.
1   Push 1.
    IP wraps around to last column.
s   Sort swap: implicitly convert the input to an integer. Then, if the top stack 
    element is less than the one below, the two are swapped. It basically computes
    min and max of two values at the same time, with max on top.
/   Reflect to NW. Switch to Ordinal.
    Immediately reflect off the top boundary. Move SW.
o   Implicitly convert the result to a string and print it.
    Reflect off bottom left corner. Move back NE.
/   Reflect to S. Switch to Cardinal.
@   Terminate the program.

15

자바 스크립트 (ES6), 7 바이트

n=>n||1

5
대안 : n=>n+!n(적어도 나는 생각한다)
Matthew Roh

@SIGSEGV 예, 실제로 작동합니다. (이것은 n|!n31 비트 수량으로 제한되어 있지만, 또한 가능할 수 있습니다 .)
Arnauld

이것은 n || 1로 단순화 될 수있다. 거짓으로 평가되는 것은 0입니다.
ansiart

1
@ansiart 당신의 요점이 그것을 n=>n||1단순화 할 수 있다면 n||1, 아니오. 허용되는 답변은 전체 프로그램 또는 기능입니다. ES6 구문 n=>do_something_with(n)화살표 함수 입니다.
Arnauld

1
@StanStrum n0이 아닌 경우 의 원래 값을 반환해야 합니다. 비트 OR은 n최하위 비트가 설정되지 않을 때마다 수정 됩니다 (예 :) (4|1) === 5.
Arnauld



12

V , 4 바이트

é0À

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

바람직하지 않지만 예상되는 동작을 남용 하므로 실제로 버그라고 부를 수는 없습니다. 설명:

Vim에서 명령은 개수를 받아들입니다. 예를 들어 <C-a>숫자 7<C-a>는 증가 하지만 숫자는 7 씩 증가합니다. 그러나 0카운트로 사용할 수는 없습니다.

  • 0 이미 명령입니다 (첫 번째 열로 이동).

  • 텍스트 편집기와 관련하여 명령을 0 번 실행하도록 요청하는 것은 거의 의미가 없습니다.

이것은 텍스트 편집기에는 적합하지만 일반적으로 골프 언어에는 눈에 띄지 않으므로 V는 일부 명령을 덮어 쓰므 0로 유효한 수입니다. 예를 들어, é, ñ, Ä, 일부 다른 사람. 그러나 <C-a>내장 vim 명령이므로 덮어 쓰지 않으므로 양의 입력으로이 명령을 실행하면 다음이 제공됩니다.

N       " N times:
 <C-a>  "   Increment

그러나 입력으로 0으로 실행하면 다음이 제공됩니다.

0       " Go to column one
 <C-a>  " Increment

전체 설명 :

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment

1
0카운트가 아닌 한 번 유용합니다. 내가 그렇게 많은 시간을 피해야했기 때문에 난 처음에 그것을 고려하지 않았다
nmjcman101


12

하스켈, 5 바이트

max 1

사용 예 : (max 1) 0-> 1.

설명 할 것이 많지 않습니다.



10

R, 13 바이트

max(1,scan())

nstdin에서 읽습니다 . 을 사용하면 pmax목록을 읽고 +1 바이트에 대한 목록의 각 요소에 적절한 값을 반환 할 수 있습니다.

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

Sven Hohenstein의 13 바이트에는 또 다른 13 바이트 솔루션 을 허용하는 또 다른 훌륭한 R 솔루션 이 있습니다.

(n=scan())+!n

이것이 R의 하한값인지 궁금합니다.


를 사용하는 또 다른 13 바이트 솔루션 pryr: pryr::f(n+!n). 더 작은 것을 찾을 수 없습니다 ...
JayCe

9

Cubix , 6 바이트

OI!1L@

어떻게 든 단위 큐브 ...에 맞게 관리 온라인 테스트를!

설명

실행하기 전에 코드는 큐브 그물로 배열됩니다.

  O
I ! 1 L
  @

그런 다음 IP (명령 포인터)가 맨 왼쪽을 I향하고 오른쪽을 향하게합니다. 거기에서 실행되는 지침은 다음과 같습니다.

I  Input a number from STDIN and push it to the stack.
!  If the top number is non-zero, skip the next instruction.
1  Push a 1 (only if the input was zero).
L  Turn left. The IP is now on the top face facing the !.
O  Output the top item as a number.

그런 다음 IP가 !다시 쳐서 @밑면을 건너 뜁니다 . @프로그램을 끝내 려면를 눌러야하므로 도움이되지 않습니다 . 한 번 더 끝나기 전에 IP가 L다시 충돌하고 중간 라인을 거꾸로지나 가면서 ( L1!I) L결국 IP가 켜집니다 @.






6

R 20 16 바이트

pryr::f(n+(n<1))

PPCG에 오신 것을 환영합니다!
Martin Ender

@MartinEnder에게 감사합니다. 나는 이미 무역의 몇 가지 트릭을 배우고 있습니다.
Shayne03


5

MarioLANG , 12 바이트

;
=[
:<+
 =:

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

작동 원리

Mario는 왼쪽 상단에서 시작하여 처음에는 오른쪽으로 걷습니다. 입력 ( ;) 에서 int를 읽고 현재 메모리 셀에 저장합니다. 그런 다음 그는 땅에서 떨어지고 ( =) 때리고 [현재 셀이 0이면 다음 명령을 무시합니다.

셀이 0이 아닌 경우, 왼쪽 ( <)을 걷기 시작 하고 현재 셀을 int ( :) 로 출력 한 다음 그의 사망 (프로그램 종료)에 해당합니다.

셀이 0이면 왼쪽으로 돌리라는 명령을 무시하고 계속 오른쪽으로갑니다. 그는 현재 셀을 증가시키고 ( +) 출력하여 사망에 이른다.


5

Brain-Flak , 22 , 10 바이트

({{}}[]{})

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

설명:

입력이 0이 아닌 경우 {{}}스택에서 모든 항목을 팝하고 입력으로 평가합니다. 0이면 아무것도 터지지 않으며 0으로 평가됩니다. 실행 그래서 ({{}})제공

0이 아닌 경우 :

n

제로:

0
0

이 시점에서 스택 높이 (0이 아닌 경우 0, 0 인 경우 1)를 추가하고 스택에서 하나 이상의 값을 팝합니다. (스택이 무한대의 0으로 채워지기 때문에, 이것은 최상위 0 또는 여분의 0을 나타냅니다)


좋은 일이지만 가장 짧은 해결책은 아닙니다 : codegolf.stackexchange.com/a/118520/31203
MegaTom

4

TI-BASIC, 7 바이트

:Prompt X
:X+not(X

또는

TI-BASIC, 7 바이트

:Prompt X
:max(X,1



4

파이썬, 15 바이트

lambda n:n or 1

n or 16 바이트가 아닌가?
DReispt

2
우리는 일반적으로 완전한 프로그램이나 기능으로 답변하는 동안 단지 스 니펫이므로 이것이 어떤 규칙에 명시 적으로 명시되어 있는지 확실하지 않지만 적어도 그것이 사실상의 표준입니다.
daniero

trichoplax 인용 : The rules are not terribly clear. I think we have a consensus on meta that REPLs count, but as a separate language, which would allow snippets in many cases, but snippets are not permitted according to this meta post-> codegolf.meta.stackexchange.com/questions/2419/…
daniero

@trichoplax 1or n는 항상 반환 1하지 않습니까?
daniero may

1
동일한 15 바이트 바이트 수를 가진 대안 :lambda n:n|1>>n
Kevin Cruijssen

4

dc, 11 바이트

[1]sf?d0=fp

[1]sf레지스터 f에 매크로를 저장하여 스택 상단으로 1을 푸시하고, ?입력을 읽고, d0=f입력이 0 인 경우 매크로 f를 실행 p하고 스택의 상단을 인쇄합니다.

테스트:

$ dc -e "[1]sf?d0=fp" <<< 0
1
$ dc -e "[1]sf?d0=fp" <<< 1
1
$ dc -e "[1]sf?d0=fp" <<< 42
42

4

엑셀, 10 바이트

=A1+(A1=0)

이는 명백한 'IF'문 솔루션에 비해 4 바이트를 절약 =IF(A1=0,1,A1)합니다.


3
그리고 덜 명백한 것보다 1 바이트 작음=A1+NOT(A1)
엔지니어 토스트


4

R, 13 바이트

n=scan();n+!n

여기 scan에서 입력 값을 읽는 데 사용됩니다 n. 의 부정 n(즉, !n0 또는 1)이에 추가됩니다 n.


3

수학, 9 8 바이트

마틴 엔더 당 :

#~Max~1&

첫 번째 아이디어 :

#/. 0->1&

으로 대체 0되는 순수 기능 1. 공간이 필요하거나 우리가 나누고 있다고 생각합니다 .0.


3

-l 및 -p 플래그에 대한 Perl 5, 6 + 2 바이트

$_||=1

stdin과는 별도의 줄에 입력을받습니다. 플래그와 함께 실행됩니다 -lp.

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