현기증 정수 열거


25

오늘 당신의 도전은 모든 정수를 열거하는 주어진 시퀀스의 항을 출력하는 것입니다. 순서는 다음과 같다 : 우리는 시퀀스를 생성하는 0 인덱싱 기능이있는 경우 f(n)ceil(x)그 천장 함수이고 f(0) = 0; abs(f(n)) = ceil(n/2); sign(f(n))경우 양성 n및하면 ceil(n/2)중 둘 또는 모두 짝수 홀수이다.

이 순서를 이해하기 위해 처음 몇 용어는 다음과 같습니다. 0 1 -1 -2 2 3 -3 -4 4 5 -5 -6 6 7 -7...

당신의 임무는 정수를 취하고 시퀀스 nn제 항을 출력 하는 프로그램을 작성하는 것 입니다. 입력은 0 또는 1 색인 만 가능합니다.

테스트 사례 (0 인덱스) :

0  =>  0
1  =>  1
2  => -1
3  => -2
4  =>  2
5  =>  3

이것은 이며 가장 적은 바이트 수입니다!



그것은의 역 보인다 접는 기능
sergiol

답변:


8

SOGL V0.12 , 8 6 바이트

I».»⌡±

여기 사용해보십시오! 또는 첫 번째 커플 번호를 시도하십시오 (비트가 변경되어 작동합니다)
0 인덱스.

설명:

I       increment the input
 »      floor divide by 2
  .     push the original input
   »    floor divide by 2
    ⌡   that many times
     ±    negate

또는 더 간단합니다.

(input + 1) // 2 negated input // 2 times
        I     »     ±      .     »    ⌡

3
한 분도 걸리지 않았습니다!
NieDzejkob

6
나는 ».»전화 중 I».»⌡±입니다.
Jonathan Allan

@JonathanAllan 나는 그것을 얻지 못한다 ._.
Pavel



4

C, 25 바이트

f(n){return~n/2*~-(n&2);}

키워드 return을 사용하는 대신 첫 번째 매개 변수에 리턴 값을 지정하여 4 바이트를 절약 할 수 있습니다. f(n){n=~n/2*~-(n&2);}
cleblanc

5
@cleblanc C가 작동하는 방식이 아닙니다.
orlp

2
gcc -O0x86-64의 경우 @cleblanc의 버전을 곱셈 결과 eax( godbolt.org/g/dztKPV ) 로 남기는 명령어로 컴파일 하지만 x86-64 gcc -O0C 답변이 아닌 답변이됩니다. 최적화를 사용하지 않는 C 답변, 특히 반환 값 쓰레기와 같은 어리석은 마지막 표현은 무효 투표하지 않습니다. 그것이 gcc가 작동하는 방식이지만 C가 작동 하는 방식이 아닙니다 .
Peter Cordes

포인터를 만드십시오. 원래 값과 최종 값이 스택에 없으면 최적화가 필요하지 않습니다.
mreff555

1
@ mreff555 비표준 (허용 될 수는 있지만) IO 방법이 될 것이며 더 짧지 않을 것입니다.
orlp





3

Mathematica, 24 바이트

(s=⌈#/2⌉)(-1)^(#+s)&  

@Misha Lavrov에서 -14 바이트


1
사용 Boole및은 OddQ1 개 0, 심지어 번호 홀수 번호를 변환하는 효과가 있습니다,하지만 당신은 여기 필요가 없습니다 : -1 힘 어쨌든 당신에게 모든 홀수 번호에 대한 정답을 제공합니다. 따라서이 단계를 (-1)^Tr@{#,s}또는 로 줄일 수 있습니다 (-1)^(#+s).
Misha Lavrov






2

배치, 29 바이트

@cmd/cset/a"%1/2^(%1<<30>>30)

2

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

f=
n=>n/2^(n<<30>>30)
<input type=number min=0 value=0 oninput=o.textContent=f(this.value)><pre id=o>0

인덱스가 0입니다.


2

자바 스크립트, 17 바이트

n=>~n/2*~-(n&2)^0

이 인덱스는 0입니다. 그것은 전적으로 조금 까다 롭습니다.


2

큐빅 으로 23 바이트

(1 인덱스)

FDF'$:7+8/0_0*0-8*7/0%6

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

입방체로 코드를 작성할 때의 주요 어려움은 다음과 같습니다.

  • 쓰기 가능한 변수는 1 개 뿐이며
  • 상수 얻기가 어렵습니다.

따라서이 솔루션은

((((n+1)/2)%2)*2-1)*n/2

여기서 /정수 나누기를 나타냅니다. 1 개의 임시 변수와 상수 1과 2 만 있으면됩니다.

설명:

FDF'$:7+8/0_0*0-8*7/0%6
FDF'                      Set face value of face 0 to 2, and value of memory index 8 (cube is unsolved) to 1 (true = unsolved)
    $                     Read input
     :7                                 input
       +8                                + 1
         /0                        (        ) /2
           _0                     (             ) %2
             *0                  (                  ) *2
               -8                                        -1
                 *7             (                          ) *n
                   /0                                          /2
                     %6   Print

2

TI 기본 (TI-84 Plus CE), 20 바이트

‾int(‾Ans/2)(1-2remainder(int(Ans/2),2

같은 전체 프로그램입니다 5:prgmNAME.

TI-Basic은 토큰 화 된 언어 이며 여기에 사용 된 모든 토큰은 1 바이트 remainder(이며 2를 제외하고는 1 바이트 입니다.(-)키로 입력되는 규제 토큰을 나타냅니다 .

예 :

0:prgmNAME
 => 0
1:prgmNAME
 => 1
2:prgmNAME
 => -1
#etc

설명:

‾int(‾Ans/2)(1-2remainder(int(Ans/2),2
‾int(‾Ans/2)                           # -int(-X) is ciel(X), so ciel(Ans/2)
                          int(Ans/2)   # int(X) is floor(X), so floor(Ans/2)
                remainder(int(Ans/2),2 # 1 if floor(Ans/2) is odd else 0
            (1-2remainder(int(Ans/2),2 # -1 if floor(Ans/2) is odd, else 1
_int(_Ans/2)(1-2remainder(int(Ans/2),2 # -ciel(Ans/2) if floor(Ans/2) is odd, else ciel(Ans/2)

Y-var 함수와 동일한 공식 :

Y1= ‾int(‾X/2)(1-2remainder(int(X/2),2


2

자바 8, 15 바이트

n->~n/2*~-(n&2)

편집 : Java는 실제로 골프가 아닌 언어 중 가장 짧은가요?! o.Ô

설명:

여기에서 시도하십시오.

나는 무슨 일이 일어나고 있는지에 대한 참조로 아래 표를 사용할 것입니다.

  1. ~n 와 동등하다 -n-1 .
  2. Java의 정수 나누기는 양의 정수에서 자동으로 바닥을 이루고 음의 정수에서 ceil하기 ~n/2때문에 시퀀스가 ​​발생합니다.0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,...
  3. n&2순서대로 0또는 중 하나를 초래 2합니다.0,0,2,2,0,0,2,2,0,0,2,...
  4. ~-x와 같으 (x-1)므로 ~-(n&2)(((n&2)-1) )는 시퀀스가됩니다-1,-1,1,1,-1,-1,1,1,-1,-1,1,...
  5. 두 개의 시퀀스 ~n/2와 곱하기는 ~-(n&2)챌린지에서 요구되는 올바른 시퀀스입니다.0,1,-1,-2,2,3,-3,-4,4,5,-5,...

개요 테이블 :

n       ~n      ~n/2    n&2     ~-(n&2)     ~n/2*~-(n&2)
0       -1      0       0       -1          0
1       -2      -1      0       -1          1
2       -3      -1      2       1           -1
3       -4      -2      2       1           -2
4       -5      -2      0       -1          2
5       -6      -3      0       -1          3
6       -7      -3      2       1           -3
7       -8      -4      2       1           -4
8       -9      -4      0       -1          4
9       -10     -5      0       -1          5
10      -11     -5      2       1           -5

2

Brain-Flak , 86 74 72 70 바이트

{({}[()]<({}<>([({})]{(<{}([{}]())>)}{}())<>)>)}{}<>{}{<>([{}])(<>)}<>

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

설명

이 코드에는 두 부분이 있습니다. 첫 번째 부분

({}[()]<({}<>([({})]{(<{}([{}]())>)}{}())<>)>)}{}

계산의 힘을 수행합니다. ceil(n/2)출력을 무효화할지 여부를 결정 합니다.

작동 방식을 설명하기 위해 먼저 계산 방법을 설명하겠습니다 ceil(n/2). 이것은 다음 코드로 수행 할 수 있습니다

{({}[()]<({}([{}]()))>)}{}

카운터에서 not ( )을 수행 할 때마다 n 부터 카운트 다운 ([{}]())하고 카운터를 결과에 추가합니다. 카운터는 시간의 절반이기 때문에 첫 번째부터 시작하여 다른 모든 실행 만 증가시킵니다.

이제 결과의 부호도 계산하고 싶습니다. 이를 위해 우리는 다른 카운터를 시작합니다. 이 카운터는 첫 번째 카운터가 꺼져있는 경우에만 상태를 변경합니다. 그렇게하면 원하는 패턴을 얻을 수 있습니다. 우리는이 두 카운터를 시간이 지날 때 쉽게 움직일 수 있도록 오프 스택에 놓습니다.

이제 계산을 마치면 스택은 다음과 같습니다

          parity(n)
ceil(n/2) sign

따라서이 두 번째 부분에서 의도 한 결과를 얻으려면 약간의 작업을 수행해야합니다.

<>{}{<>([{}])(<>)}<>



1

QBIC , 27 26 바이트

g=(:+1)'\2`~(a-g)%2|?-g\?g

설명

g=          set worker var 'g' to
(:+1)           our index (plus one for the ceil() bit)
'\2`            integer divided by 2 (the int div needs a code literal: '..`
~(a-g)%2    IF index - temp result is odd (index 2 minus result 1 = 1)
|?-g        THEN PRINT g negated
\?g         ELSE PRINT g

1

클로저 122 바이트

골프를 쳤을 때도 장황하다. 나는 동정 투표를 위해 갈거야 ... :-)

골프 :

(defn d[n](let[x(int(Math/ceil(/ n 2)))y(cond(or(and(even? n)(even? x))(and(odd? n)(odd? x)))(Math/abs x):else(- 0 x))]y))

언 골프 드 :

(defn dizzy-integer [n]
  (let [x   (int (Math/ceil (/ n 2)))
        y   (cond
                (or (and (even? n) (even? x))
                    (and (odd? n)  (odd? x))) (Math/abs x)
                :else (- 0 x)) ]
    y))

1

Excel VBA 32 비트, 39 37 바이트

셀에서 입력 A1을 받고 VBE 즉시 창으로 출력하는 익명 VBE 즉시 창 기능

?[Sign((-1)^Int(A1/2))*Int((A1+1)/2)]

A^B64 비트에서는 유효하지 않으므로 32 비트로 제한됨 ( A ^B가능한 한 근접 함)


사이의 공간 (-1)^[Int필요?
Pavel

64 비트 버전의 Excel VBA의 경우 @Pavel, 예. 그러나 그것은 32 비트 버전에는 해당되지 않는다고 맹세하지만 안타깝게도 현재 보유하고있는 하드웨어에 대해서는 테스트 할 수 없습니다.
Taylor Scott

@Pavel-32 비트 시스템 (기본 설치 사양)에서 살펴 봤으며 해당 시스템에서 공간이 필요하지 않습니다.이를 활용하기 위해 솔루션을 32 비트로 제한했습니다
Taylor Scott

1
시원한! 그래도 수정 된 바이트 수를 추가하는 것을 잊었습니다.
Pavel

Whoops, Thanks @Pavel-이제 해결되었습니다
Taylor Scott

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