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