직무:
주어진 샘플 인덱스 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
답변
답변
줄리아 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)