산술주기


13

입력:

정수 n이다 >=0또는 >=1( f(0)선택 사항)

산출:

n아래 순서 의 '번째 숫자 또는 n'번째 숫자 까지의 순서 입니다.

순서:

(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99

이 시퀀스는 어떻게 만들어 집니까?

f(n=0) = 0(선택 사항)
f(n=1) = f(0) + n또는 f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n

또는 의사 코드에서 :

function f(integer n){
  Integer result = 0
  Integer i = 1
  Loop as long as i is smaller than or equal to n
  {
    if i modulo-4 is 1:
      result = result plus i
    if i modulo-4 is 2 instead:
      result = result minus i
    if i modulo-4 is 3 instead:
      result = result multiplied with i
    if i modulo-4 is 0 instead:
      result = result integer/floor-divided with i
    i = i plus 1
  }
  return result
}

그러나 언급했듯이 시퀀스에는 두 가지 패턴이 있습니다.

0, ,-1,  ,0, ,-1,  ,0, ,-1,   ,0,  ,-1,   ,0,  ,-1,   ,...
 ,1,  ,-3, ,5,  ,-7, ,9,  ,-11, ,13,  ,-15, ,17,  ,-19,...

따라서 동일한 시퀀스를 생성하는 다른 접근 방식도 물론 완벽합니다.

도전 규칙 :

  • 인덱싱 된 입력과 인덱싱 된 입력은 같은 결과를 낳습니다 (따라서 f(0)포함하려는 경우 0 인덱싱 된 입력의 경우 선택 사항 임).
  • n이 시퀀스 의 '번째 숫자 를 출력 할 수 있습니다 . 또는 n'번째 숫자를 포함하여 전체 시퀀스 . ( 또는 f(5)결과를 초래할 수 있습니다 .) 50,1,-1,-3,0,5
    • n'번째 숫자 까지의 시퀀스를 출력하도록 선택하면 출력 형식이 유연합니다. 목록 / 배열, 쉼표 / ​​공백 / 줄 바꿈 문자열 또는 STDOUT으로 인쇄 등일 수 있습니다.
  • 나누기 ( /)는 정수 / 바닥 나누기이며 0으로 반올림합니다 (일부 언어의 경우와 같이 음의 무한대가 아닌).

일반 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 리턴 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 필요한 경우 설명을 추가하십시오.

위의 추가 테스트 사례 n=100:

Input     Output

1000      0
100000    0
123       -123
1234      -1
12345     12345
123456    0

1
oeis.org에서 찾을 수 없으므로 제출할 수도 있습니다. 흥미로운 순서입니다. 아무도 등록하지 않은 것에 놀랐습니다.
파이프

1
@pipe 꽤 임의의 것
qwr에게

답변:


20

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

n=>[0,n,-1,-n][n&3]

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

증명

4의 n 배수에 대해 다음과 같은 관계가 있다고 가정 해 봅시다 . 이러한 관계는 시퀀스의 첫 번째 항에 대해 사소하게 검증됩니다.

f(n)   = 0
f(n+1) = n+1
f(n+2) = -1
f(n+3) = -(n+3)

그리고 N = n + 4 이라고하자 . 그런 다음 정의에 따라 :

f(N)   = f(n+4) = f(n+3) // (n+4) = -(n+3) // (n+4) = 0
f(N+1) = f(n+5) = f(n+4) + (n+5)  = 0 + (n+5)       = N+1
f(N+2) = f(n+6) = f(n+5) - (n+6)  = (n+5) - (n+6)   = -1
f(N+3) = f(n+7) = f(n+6) * (n+7)  = -1 * (n+7)      = -(N+3)

수학적 유도에 의해, 관계 는 4의 N 배수에 대해 관계가 있음을 증명합니다 .


2
대부분의 답변은이 솔루션의 포트이므로 가능한 것으로 확인되었습니다.
Outgolfer Erik


아, 견과류는 비슷한 일을하면서 일로 인해 산만 해졌습니다. +1
얽히고 설킨

호기심에서 "n % 4"보다 "n & 3"을 선호하는 이유가 있습니까?
IanF1

2
@ IanF1 나는 이것이 단지 저수준 프로그래밍 습관이라고 생각합니다 (모듈로 계산하는 것보다 비트 단위 AND 어셈블리로 계산하는 것이 쉽고 빠릅니다). 그러나 여기에서는별로 이해가되지 않으며 실제로 n%432 비트보다 큰 숫자로 작동 하도록 나중에 반으로 바꾸려는 유혹을 받았습니다 .
Arnauld

4

05AB1E , 8 바이트

nth숫자를 출력합니다

ÎD(®s)sè

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

05AB1E , 14 바이트

시퀀스의 패턴을 사용하여 N까지의 숫자 목록을 출력합니다.

ÅÉāÉ·<*āÉ<‚øí˜

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

설명

N = 7을 사용한 예

ÅÉ               # List of odd numbers upto N
                 # STACK: [1,3,5,7]
  ā              # Enumerate 1-based
   É             # is odd?
                 # STACK: [1,3,5,7],[1,0,1,0]
    ·<           # double and decrement
                 # STACK: [1,3,5,7],[1,-1,1,-1]
      *          # multiply
                 # STACK: [1,-3,5,-7]
       āÉ<       # enumerate, isOdd, decrement
                 # STACK: [1,-3,5,-7],[0,-1,0,-1]
          ‚ø     # zip
                 # STACK: [[1, 0], [-3, -1], [5, 0], [-7, -1]]
            í    # reverse each
             ˜   # flatten
                 # RESULT: [0, 1, -1, -3, 0, 5, -1, -7]

4

파이썬 2 , 25 바이트

Arnauld의 답변 :

lambda n:[0,n,-1,-n][n%4]

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


순진한 솔루션 :

파이썬 3 , 50 49 바이트

lambda n:n and eval('int(f(n-1)%sn)'%'/+-*'[n%4])

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


파이썬 2 , 78 77 76 58 57 53 52 바이트

lambda n:n and eval('int(1.*f(n-1)%sn)'%'/+-*'[n%4])

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

int파이썬 플로어는 0질문에서와 같이가 아닌쪽으로 나누기 때문에 에 많은 바이트를 사용했습니다 .


@KevinCruijssen 예, 감사합니다 :)
TFeld


3

TIS -n 2 1 , 123 바이트

nth 수를 출력합니다 0 <= n <= 999. (상한은 언어 제한으로 인한 것입니다).

@0
MOV UP ACC
MOV ACC ANY
L:SUB 4
JGZ L
JEZ L
ADD 5
JRO -5
@1
MOV UP ACC
JRO UP
SUB ACC
JRO 3
MOV 1 ACC
NEG
MOV ACC ANY
HCF

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


TIS -n 2 1 , 124 바이트

nth 수를 출력합니다 0 <= n <= 999. (상한은 언어 제한으로 인한 것입니다). n공백으로 구분하여 여러 개를 제공 할 수 있습니다.

@0
MOV UP ACC
MOV ACC ANY
L:SUB 4
JGZ L
JEZ L
ADD 5
MOV ACC ANY
@1
MOV UP ACC
JRO UP
SUB ACC
JRO 3
MOV 1 ACC
NEG
MOV ACC ANY

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


TIS -n 3 1 , 192 바이트

에 대한 값 출력 0..n을 위해 0 <= n <= 999. (상한은 언어 제한으로 인한 것입니다).

@0
MOV UP ACC
ADD 1
MOV ACC ANY
JRO -1
@1
SUB UP
JLZ C
HCF
C:ADD UP
MOV ACC ANY
ADD 1
SWP
ADD 1
MOV ACC ANY
SUB 4
JEZ W
ADD 4
W:SWP
@2
MOV UP ACC
JRO UP
SUB ACC
JRO 3
MOV 1 ACC
NEG
MOV ACC ANY

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


모두 숫자 I / O ( -n플래그)를 사용합니다. 처음 두 솔루션은 두 개의 컴퓨팅 노드를 사용하며 하나는 다른 노드 위에 위치합니다. 세 번째 노드는 세 개의 노드로 구성됩니다.

처음 두 솔루션의 경우 상위 노드는 입력을 읽고 원래 숫자를 보낸 다음 음수가 될 때까지 4를 반복적으로 빼고 5를 추가하여 점프 테이블의 색인에 추가합니다. 이는에 해당합니다 (n % 4) + 1.

세 번째 솔루션은이 작업을 두 노드로 나누었습니다. 상단 노드는 시간이 끝날 때까지 한계를 반복하고 중간 노드는 위와 같이 인덱스 (해당 한계와 비교) 및 모듈로를 병렬로 계산합니다.

세 솔루션 모두의 하위 노드는 동일합니다. 여기에는 점프 테이블이 있으며 이것이 마법이 일어나는 곳입니다. 우리는 원래 번호를 저장 ACC한 후, JRO(아마 J UMP R elative O ffset) 앞으로하여 1, 2, 3, 또는 4, 노드가 위의 말씀에 따라.

뒤로 작업 :

  • 4A는 ) NEG먹었다 ACCB 로 이동) ACC출력 내려.
  • 3넣어 1으로 ACC다음 단계를 수행 와 B를 .44
  • 24b 단계로 바로 이동합니다 .
  • 1자신 을 SUB끌어 ACC내고 (실제로 제로화 ACC) 다음 단계를 수행 2하면 4b로 이동합니다 .

2

C (gcc) , 62 바이트

f(n,k){k=~-n;n=n?n%4?k%4?n-2&3?f(k)*n:f(k)-n:f(k)+n:f(k)/n:0;}

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


당신은 정확히의 포트를 생성하여 바이트 수 (31 바이트)를 절반으로 줄일 수 OlivierGrégoire 의 자바 답 : f(n){n=n%2>0?n*(2-n%4):n%4/-2;}나는 때문에 내가 당신의 재귀 방식처럼,하지만 두 번째 대답으로 추가뿐만 아니라 것입니다. :)
Kevin Cruijssen

@KevinCruijssen 두 언어의 산술 구문이 너무 비슷하기 때문에 Java 10 솔루션을보고 간결함을 알았습니다. 단지 솔루션을 복사하고 싶지는 않습니다.
Jonathan Frech



1

망막 , 46 바이트

.+
*
r`(____)*$
_$.=
____
-
___.*
-1
__

_.*
0

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

.+
*

단항으로 변환합니다.

r`(____)*$
_$.=

십진수로 다시 변환하지만 n%4+1밑줄을 남겨 둡니다 .

____
-

4 인 경우 결과는 -n입니다.

___.*
-1

사례 3 : -1

__

사례 2 : n

_.*
0

사례 1 : 0



1

APL (Dyalog Classic) , 22 12 바이트

Outgolfer의 Erik의 말 때문에 대량의 10 바이트가 절약되었습니다. 감사합니다!

4∘|⊃0,⊢,¯1,-

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

n 번째 숫자를 출력합니다

나는 APL을 모른다 .Dnalog APL에서 Arnauld 솔루션의 J 포트를 작동 시키려고 노력했다.


2
좋은 시도! 몇 비고 : 1) 당신은 대체 할 수 (0,⍵,¯1,-⍵)와 함께 (0⍵¯1,-⍵). 2) 시스템 변수가 할당 1+되었다고 가정 하여 를 제거 할 수 있습니다 (예, 허용됩니다). 3) 우리는 일반적으로 기능을 제출할 때 부품을 계산하지 않습니다 . 4) 인덱싱 대신이 기능을 사용할 수 있습니다 . 모든 사람들이 함께 이것을 형성합니다 : ( 이것을 세지 마십시오)⎕IO0f←[]⎕IO←0{(4|⍵)⊃0⍵¯1,-⍵}
Outgolfer Erik 14

@ Outgolfer @Erik 감사합니다!
Galen Ivanov

2
이 접근 방식을 기반으로 한 고급 골프 : 4∘|⊃0,⊢,¯1,-.
Outgolfer Erik

1
@ Outgolfer @ Erik-그렇습니다! 4∘|⊃0,⊢,¯1,- 내 J 솔루션 4&|{0,],_1,-이 APL에서 어떻게 보일지 정확히 생각합니다 . 다시 감사합니다!
Galen Ivanov

1
실제로 J는 APL 변형이지만 Dyalog 및 NARS2000과 같은 다른 APL 유사 제품보다 먼 거리입니다.
Outgolfer Erik

1

Cubix , 20 19 바이트

Iun:^>s1ns:u@Ota3s0

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

동일한 접근 방식을 cubix에 포팅합니다.

큐브에서 :

    I u
    n :
^ > s 1 n s : u
@ O t a 3 s 0 .
    . .
    . .

첫 번째 비트 ^Iu:n>s1ns:u0s는 스택을 빌드 한 다음 3at해당 항목을 TOS에 복사 한 다음 프로그램 을 O출력하고 @종료합니다.


0

공백, 84 83 바이트

[S S S N
_Push_0][S N
S _Duplicate_0][T   T   S _Store][S S S T   S N
_Push_2][S S T  T   N
_Push_-1][T T   S _Store][S S S T   N
_Push_1][S N
S _Duplicate_1][T   N
T   T   _Read_STDIN_as_integer][S S S T T   N
_Push_3][S S S T    N
_Push_1][T  T   T   ][S S T T   N
_Push_-1][T S S N
_Multiply][T    T   S _Store][T T   T   _Retrieve_input][S S S T    S S N
_Push_4][T  S T T   _Modulo][T  T   T   _Retrieve_result][T N
S T _Print_as_integer]

문자 S(공백), T(탭) 및 N(줄 바꾸기)가 강조 표시로만 추가되었습니다.
[..._some_action]설명으로 만 추가되었습니다.

온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).

@Arnauld 의 JavaScript 답변 포트 .

설명 (입력 예 n=7) :

Command   Explanation         Stack        Heap                  STDIN   STDOUT   STDERR

SSSN      Push 0              [0]
SNS       Duplicate top (0)   [0,0]
TTS       Store               []           {0:0}
SSSTSN    Push 2              [2]          {0:0}
SSTTN     Push -1             [2,-1]       {0:0}
TTS       Store               []           {0:0,2:-1}
SSSTN     Push 1              [1]          {0:0,2:-1}
SNS       Duplicate top (1)   [1,1]        {0:0,2:-1}
TNTT      Read STDIN as nr    [1]          {0:0,1:7,2:-1}        7
SSSTTN    Push 3              [1,3]        {0:0,1:7,2:-1}
SSSTN     Push 1              [1,3,1]      {0:0,1:7,2:-1}
TTT       Retrieve input      [1,3,7]      {0:0,1:7,2:-1}
SSTTN     Push -1             [1,3,7,-1]   {0:0,1:7,2:-1}
TSSN      Multiply (-1*7)     [1,3,-7]     {0:0,1:7,2:-1}
TTS       Store               [1]          {0:0,1:7,2:-1,3:-7}
TTT       Retrieve input      [7]          {0:0,1:7,2:-1,3:-7}
SSSTSSN   Push 4              [7,4]        {0:0,1:7,2:-1,3:-7}
TSST      Modulo (7%4)        [3]          {0:0,1:7,2:-1,3:-7}
TTT       Retrieve            [-7]         {0:0,1:7,2:-1,3:-7}
TNST      Print as integer    []           {0:0,1:7,2:-1,3:-7}           -7
                                                                                  error

오류와 함께 중지 : 종료가 정의되지 않았습니다.

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