삼각 신호 생성 -4

직무:

주어진 샘플 인덱스 x는 4 개의 샘플주기 및 진폭 1을 갖는 삼각파의 샘플 값 f (x)를 계산합니다. 오프셋은 음수 일 수 있으며 샘플 값은 {0, 1, -1} 일 수 있습니다.

테스트 사례 :

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

개인적으로 C에서 두 가지 접근 방식을 알고 있습니다. 첫 번째는 조회 테이블을 사용하고 두 번째는 조건부 명령을 사용합니다. 브라우니 포인트의 경우 순수한 “수학”접근 방식으로 저에게 깊은 인상을 줄 수 있습니까? (예를 들어 조건부 명령어를 사용하지 않거나 LUT에 메모리를 사용하는 순수한 기능적 접근을 의미합니다.) 그러나 이것은 제한이 아닙니다. 당신이 할 수 없거나 당신의 언어가 그것을 지원하지 않는 경우-그냥 해결책을 게시



답변

수학, 8 바이트

Im[I^#]&

설명

Im[I^#]&
   I^#    (* Raise the imaginary unit to the input power *)
Im[   ]   (* Take the imaginary part *)


답변

TI 기본, 7 5 4 바이트

sin(90Ans

(도 모드) @immibis에서 -1 바이트 내 이전 답변.


이전 답변

imag(i^Ans

계산기에 대한 순수 수학 접근법. 🙂

재미를 위해 9 바이트 (라디안 모드) 또는 8 바이트 (도 모드)에 대한 또 다른 순수한 수학 솔루션이 있습니다.

2/πsin-1sin(πAns/2 # Radians
90-1sin-1sin(90Ans # Degrees


답변

파이썬 2 , 20 바이트

lambda n:n%2-n%4/3*2

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

더 짧은 산술 또는 비트 식에 대한 무차별 대입 검색을 실행 중입니다. 이것은 내가 손으로 찾은 것입니다.


답변

줄리아 0.5 , 12 바이트

!n=(2-n&3)%2

다른 언어로는 가장 짧을 것 같지 않기 때문에이 방법이 마음에 듭니다.

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

작동 원리

Julia의 연산자 우선 순위는 약간 특이합니다. 대부분의 다른 언어와 달리 비트 연산자는 산술 연산자와 우선 순위가 동일하므로 &(비트 곱셈)과 우선 순위가 같습니다 *.

먼저 양의 부호 n&3가있는 입력 모듈로 4를 취합니다 .

그런 다음 결과 0 , 1 , 2 또는 3 –을 2 에서 빼고 2 , 1 , 0 또는 -1을 생성 합니다.

마지막으로 부호있는 나눗셈의 나머지를 2 씩 취하여 0 , 1 , 0 또는 -1을 반환 합니다.


답변

젤리 , 3 바이트

ı*Ċ

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

작동 원리

ı*Ċ  Main link. Argument: n

ı*   Elevate i, the imaginary unit, to the n-th power.
  Ċ  Take the imaginary part of the result.


답변

dc, 13

모듈로 %연산자를 “순수 수학”으로 계산하는지 확실하지 않은 경우 :

?1+d*v4%1-2%p

온라인으로 사용해보십시오 . 참고 dc사용하는 _대신를 -음수를 나타냅니다.

설명

?              # read input
 1+            # add 1
   d*v         # duplicate, multiply, square root (poor-mans abs())
      4%       # mod 4
        1-     # subtract 1
          2%   # mod 2
            p  # print

주의 dc%모드 운영자가 음의 값에 음수 값을 매핑 표준 “CPU”버전입니다.


답변

brainfuck , 136 바이트

>,>++++<[>->+<[>]>[<+>-]<<[<]>-]>>>>-[>+<-----]>--[-<+>>>+>>>+>>>+<<<<<<<<]<->>>>>>->--[>+<++++++]>++<<<<<<<<<<[[->>>+<<<]>>>-]>[.[-]]>.

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

아마도 더 간단한 대답이있을 수 있지만 본질적으로 값 테이블을 사용합니다. 브레인 퍽 127 0에서 양의 값으로 ASCII 문자로 입력을 받아 있지만 여전히 (테스트로 대체 음의 값을 받아 들일 수 있다면로 작동 ,n-문자).

작동 원리

>,                                   take input (X)
>++++<                               take second input for modulo (4)
[>->+<[>]>[<+>-]<<[<]>-]             calculate X mod 4
>>>>-[>+<-----]>--                   create initial '1' character
[-<+>>>+>>>+>>>+<<<<<<<<]            duplicate '1' four times as 1,1,1,1
<->>>>>>->--[>+<++++++]>++<<<<<<<<<< change 1,1,1,1 to 0,1,0,-1
[[->>>+<<<]>>>-]>[.[-]]>.            move to the right X%4 * 3 times, then print the following two characters ( 0, 1, 0,-1)