X 단계 앞으로, 1 단계 뒤로


21

쉬운 순서의 처음 100 개 숫자는 다음과 같습니다.

0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226

이 순서는 어떻게 작동합니까?

n: 0 1     2           3     4     5     6     7     8      9       10      11      12

   0,      1-1=0,      2-1=1,      4-1=3,      7-1=6,       11-1=10,        16-1=15,      
     0+1=1,      0+2=2,      1+3=4,      3+4=7,      6+5=11,        10+6=16,        15+7=22
  • a(0) = 0
  • 모든 홀수 n(0 인덱싱)에 대해 a(n-1) + X( X=1액세스 할 때마다 1 씩 증가합니다)
  • 모든 짝수 n(0 인덱싱)에 대해a(n-1) - 1

도전:

다음 중 하나 :

도전 규칙 :

  • 입력 n은 0 또는 1 색인이 될 수 있습니다.
  • 시퀀스를 출력 (일부)하는 경우 목록 / 배열을 사용하고 구분 기호 (공백, 쉼표, 줄 바꾸기 등)를 사용하여 STDOUT으로 인쇄 할 수 있습니다. 당신의 전화.
  • 귀하의 답변에 사용한 세 가지 옵션 중 어느 것을 기재하십시오.
  • 최소한 처음 10,000 개 숫자 (만번 째 숫자는 12,497,501) 를 지원해야합니다 .

일반적인 규칙:

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

테스트 사례 :

시퀀스에서 처음 10,001 개의 숫자가있는 Pastebin 원하는 것을 골라주십시오.

더 높은 숫자 :

n (0-indexed)    Output:

68,690           589,772,340
100,000          1,249,975,000
162,207          3,288,888,857
453,271          25,681,824,931
888,888          98,765,012,346
1,000,000        124,999,750,000

답변:



8

엑셀, 31 바이트

답변이 0색인됩니다. n숫자를 출력합니다 .

=(A1^2+IF(ISODD(A1),7,-2*A1))/8

설명 된 시퀀스는 궁극적으로 인터레이스 된 두 개의 시퀀스입니다.

ODD:   (x^2+x+2)/2
EVEN:  (x^2-x)/2

이들을 하나의 0인덱스 시퀀스 로 인터레이스하면 다음과 같은 결과가 나타 납니다.

a = (x^2 - 2x)/8 if even
a = (x^2 + 7 )/8 if odd

다음을 제공합니다.

=IF(ISODD(A1),(A1^2+7)/8,(A1^2-2*A1)/8)

우리는 31바이트 까지 골프를 칩니다.


동일한 접근 방식을 사용하여 1indexed는 37바이트를 제공 합니다.

=(A1^2-IF(ISODD(A1),4*A1-3,2*A1-8))/8



4

하스켈 , 40 38 37 바이트

scanl(flip($))0$[1..]>>=(:[pred]).(+)

무한 목록을 반환하고 온라인으로 시도하십시오!

설명

scanl세 개의 인수 f를 사용 init하고 xs( [ x 0 , x 1 ... ] ) 새 목록을 작성합니다.

[ a 0 = init , a 1 = f (a 0 , x 0 ) , a 2 = f (a 1 , x 1 ) ... ]

우리는 설정 init = 0과 반전 사용 ($)(따라서이 적용 응용 프로그램 연산자를 함수에이 X 전을 지금 우리는 함수의 목록 필요) - 목록이 올바른 기능을 가진 무한 목록입니다 :[1..]>>=(:[pred]).(+)

[(+1),(-1),(+2),(-1),(+3),(-1),(+4),...

흥미로운 대안, 37 바이트

flipHaskell의 타입 추론 때문에 대신 (a -> b -> c) -> b -> a -> c사용할 수 있는 타입 을 가짐으로써 타입 이 통합 될 것 입니다.id :: d -> d($)da -> b

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

편집하다

-notation (>>=)대신 -2 바이트를 사용 합니다 do.

scanl대신에 -1 바이트를 사용하십시오 zipWith.



3

05AB1E , 10 바이트

ÎF<NÈi¼¾>+

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

설명

Î             # initialize stack with: 0, input
 F            # for N in [0 ... input-1] do:
  <           # decrement the current number
   NÈi        # if N is even
      ¼       # increment a counter
       ¾>     # push counter+1
         +    # add to current number

또 다른 10 바이 터 : ÎFNÈN;Ì*<O


ÎGDN+D<시퀀스를 생성하지만 n 번째 요소를 잡는 것은 3 바이트로 어려워 보입니다.
Magic Octopus Urn



3

젤리 , 6 바이트

HḶS‘_Ḃ

n을 반환 하는 (1- 인덱스 화 된) 모나 딕 링크 a(n).

온라인으로 사용해보십시오! 또는 시험 스위트를 참조하십시오

방법?

HḶS‘_Ḃ - link: n
H      - halve         -> n/2.0
 Ḷ     - lowered range -> [0,1,2,...,floor(n/2.0)-1]
  S    - sum           -> TriangleNumber(floor(n/2.0)-1)
   ‘   - increment     -> TriangleNumber(floor(n/2.0)-1)+1
     Ḃ - bit = 1 if n is odd, 0 if it's even
    _  - subtract      -> TriangleNumber(floor(n/2.0)-1)+isEven(n)

흠, 흥미로운 접근 방식이 있습니다.
Outgolfer Erik

3

PHP , 73 64 55 51 47 바이트

첫 번째 방법

첫 번째 코드 골프 답변!
더 짧은 PHP 트릭이 있고 수학을 향상시킬 수 있다고 확신합니다.

n을 첫 번째 인수로 사용하고 시퀀스에서 n 번째 숫자를 출력합니다.

$y=$argv[1]/2;for(;$i<$y+1;)$x+=$i++;echo$x-($y|0);

"$ x = 0;"을 제거하여 마이너스 9 바이트 "$ i = 0"입니다.

@Kevin Cruijssen 덕분에 마이너스 9 바이트가 for 루프 및 엔드 태그 손실을 개선했습니다.

비트 또는 "|"를 사용하는 1 바이트 빼기 "(int)"보다는

"php -r 'code here'"로 명령 행에서 태그를 실행하여 태그를 제거 할 수 있으므로 @Dennis 덕분에 마이너스 3 바이트

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

두 번째 방법

이전 답변과 완전히 새로운 방법을 일치 시켰습니다!

for(;$i<$argv[1];$i++)$x+=($y^=1)?$i/2+1:-1;echo$x;

XOR과 tenary 연산자를 사용하여 루프의 합계를 전환합니다.

편집 : 이것은 n = 0에서 작동하지 않으며 이유를 모릅니다. $ i가 할당되지 않았으므로 0이어야하므로 루프 ($i<$argv[1])가로 실패해야 (0<0==false)하므로 할당되지 않은 $ x는 1이 아닌 0으로 출력됩니다.

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

세번째 방법

엑셀 공식을 @Wernisch에서 PHP로 변환하면 47 바이트 솔루션이 제공됩니다.

$z=$argv[1];echo(pow($z,2)+(($z&1)?7:-2*$z))/8;

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


1
안녕하세요, PPCG에 오신 것을 환영합니다! 아직 PHP 에서 골프 팁<모든 언어>에서 골프 팁 을 읽는 것이 흥미로울 수 있습니다. 골프를 타야 할 것들 : 후행을 제거 할 수 있습니다 ?>. 풀이$x=0 하고 $i=0실제로 허용됩니다 (그렇지 않은 경우 $x=$i=0더 짧을 수 있음). 또한 루프를로 단축 할 수 있습니다 for(;$i<$y+1;)$x+=$i++;. 총 -15 바이트입니다. 체류를 즐길 수! :)
Kevin Cruijssen

@KevinCruijssen 감사합니다!
Sam Dean

천만에요. Btw, TIO는 현재 58 대신 60 바이트입니다. 왜 57을 언급했는지 잘 모르겠습니다 . 온라인으로 시도하십시오.
케빈 크루이 센

@KevinCruijssen 잘못된 TIO를 계속 게시했습니다! TIO는 이제 58을 말한다하지만 그냥 TIO에, 시작 태그에서 "PHP"를 제거 할 수 있습니다 나는 55을 게시 한
샘 딘을

@Wernisch 공식에 감사드립니다!
샘 딘

3

R , 35 바이트

diffinv(rbind(n<-1:scan(),-1)[n-1])

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

@JayCe의 대답 에 대한 흥미로운 대안이라고 생각했습니다. 매트릭스를 기본적으로 지원하지 않는 언어로 잘 이식되지 않았기 때문에 골프처럼 느껴지기 때문입니다.

1- 인덱싱 된 n시퀀스 의 첫 번째 요소를 반환합니다 .

작동 방식 :

rbind(n<-1:scan(),-1) 다음 행렬을 구성합니다.

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]   -1   -1   -1   -1

R은 행렬을 열 주요 순서로 유지하므로 이것을로 변환하면 vector벡터를 얻을 수 있습니다

1 -1 2 -1 3 -1 4 -1

누적 합을 취하면

1 0 2 1 4 3 7 6

바로 앞에없는 시퀀스 0입니다.diffinv다행히도 선행 0을 추가하므로 n-1행렬에서 첫 번째 값을 가져 와서 시퀀스 diffinv의 첫 번째 n값을 얻습니다 .


2
나는 당신의 'diffinv'답변의 큰 팬입니다.
JayCe


3

R , 35 34 바이트

(u=(n=scan())-n%%2-1)-n+(15+u^2)/8

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

첫 번째 출력 옵션. 다른 많은 답변과 동일한 수식 (공식을 제공하는 첫 번째 답변을 가리키고 싶습니다. 어떤 수식인지 알 수 없습니다).

아래의 두 번째 및 세 번째 출력 옵션 :

R , 43 바이트

function(m,n=1:m,u=n%%2+1)((n-u)^2-1)/8+2-u

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

R , 51 바이트

while(T){cat(((T-(u=T%%2+1))^2-1)/8+2-u," ");T=T+1}

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


3

Matlab / Octave, 31 26 바이트

Luis Mendo에 5 바이트 절약!

@(n)sum(1:n/2+.5)-fix(n/2)

1
당신은 아마 사용할 수 있습니다 fix대신 floor하고, n/2+.5대신ceil(n/2)
루이스 Mendo

@LuisMendo Ty! 에 대해 몰랐 fix()및 기대하지 않았다 1:n/2+.5: 잘못 될 수있는 많은 것들을하지만, 실제로는하지 않습니다 - 작업에
린더 Moesinger에게




3

Q 기본, 31 바이트

사양 구현 솔루션은 Erik의 솔루션 보다 약간 더 깁니다 .

DO
?n
i=i+1
n=n+i
?n
n=n-1
LOOP

무한정 출력됩니다. 그것을 실행하기 위해 마지막 줄을와 같은 것으로 변경하는 것이 좋습니다 LOOP WHILE INPUT$(1) <> "q". 이는 두 번째 시퀀스 입력마다 키 누름을 기다렸다가 누른 키가 인 경우 종료합니다 q.


2

C # (. NET 코어) , 56 바이트

n=>{int a=0,i=0;for(;++i<n;)a+=i%2<1?-1:i/2+1;return a;}

Kevin Crujssen 덕분에 -2 바이트

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

1 색인. 보고a(n)

Ungolf'd :

int f(int n)
{
    // a needs to be outside the for loop's scope,
    // and it's golfier to also define i here
    int a = 0, i = 1;
    // basic for loop, no initializer because we already defined i
    for (; ++i < n;)
    {
        if (i%2 < 1) {
            // if i is even, subtract 1
            a -= 1;
        }
        else
        {
            // if i is odd, add (i / 2) + 1
            // this lets us handle X without defining another int
            a += i / 2 + 1;
        }
    }
    // a is the number at index n
    return a;
}

1
i=1;for(;i<n;i++)할 수 i=0;for(;++i<n;)있고 i%2==0할 수 있습니다 i%2<1.
케빈 크루이 센

@KevinCruijssen 감사합니다! 나는 두 번째 것을 보았지만 루프에 대한 첫 번째 루프 후에 조건부 만 검사한다고 생각했기 때문에 첫 번째 것이 작동하는 것을 생각하지 않았습니다. TIL
Skidsdev

아니요, 첫 번째 반복 전에 이미 확인합니다. A do-while는 첫 번째 반복을 완료 한 후 확인합니다. :)
Kevin Cruijssen

매우 드문 경우 iffor-loop 와 병합 할 수도 있습니다. 예를 들면 다음 if(t>0)for(i=0;i<l;i++)과 같습니다 for(i=0;t>0&i<l;i++). 그래도 대답에 거의 이것을 사용할 수 없었습니다.
Kevin Cruijssen

꽤 굉장이, 나는 확실히 마음 다음 번에 내가 요즘 아주 드문 C #을 골프를 할 것을 계속해야 할 것이다 : P는 내 C # 작업의 대부분은 확실히 ungolfy입니다
Skidsdev

2

껍질 , 11 9 8 바이트

ΘṁṠe→Θ∫N

H.PWiz 덕분에 바이트를 절약했습니다.
무한 목록으로 출력합니다.
온라인으로 사용해보십시오!

설명

ΘṁṠe→Θ∫N
      ∫N   Cumulative sum of natural numbers (triangular numbers).
     Θ     Prepend 0.
 ṁṠe→      Concatenate [n + 1, n] for each.
Θ          Prepend 0.

2

도도 스 , 69 바이트

	. w
w
	. h
	+ r . ' dab h '
h
	h ' '
	. dab
r
	
	r dip
.
	dot
'
	dip

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


어쨌든 이것이 가장 긴 대답입니다.

설명.

┌────┬─────────────────────────────────────────────────┐
│Name│Function                                         │
├────┼─────────────────────────────────────────────────┤
│.   │Alias for "dot", computes the sum.               │
├────┼─────────────────────────────────────────────────┤
│'   │Alias for "dip".                                 │
├────┼─────────────────────────────────────────────────┤
│r   │Range from 0 to n, reversed.                     │
├────┼─────────────────────────────────────────────────┤
│h   │Halve - return (n mod 2) followed by (n/2) zeros.│
└────┴─────────────────────────────────────────────────┘

1

, 15 바이트

I∨ΣEN⎇﹪ι²±¹⊕⊘ι⁰

온라인으로 사용해보십시오! 인덱스가 0입니다. 링크는 자세한 버전의 코드입니다. 공식은 아마도 더 짧을 지 모르지만 그 점에서 재미는 무엇입니까? 설명:

    N           Input as a number
   E            Map over implicit range
     ⎇          Ternary
      ﹪ι²       Current value modulo 2
         ±¹     If true (odd) then -1
           ⊕⊘ι  Otherwise calculate X as i/2+1
  Σ             Take the sum
 ∨            ⁰ If the sum is empty then use zero
I               Cast to string and implicitly print

1

자바 스크립트, 49 48 45 바이트

x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')

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

@ tsh 답변만큼 예쁘지는 않지만 광산은 더 큰 숫자로 작동합니다.

이제 eval솔루션에 대한 @tsh에게 감사드립니다 !


<=x+1가능<x+2
Kevin Cruijssen

x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')더 짧아야합니다.
tsh

eval마지막으로 수정 된 값을 반환 합니까 ? 나는 아직도 그것이 무엇을 할 수 있는지 완전히 이해하지 못한다.
랜덤 남자

statement의 값을 반환합니다 ( 나중 버전 에서는 statement에 포함될 수 있음 do).
tsh



1

피스 , 8 바이트

s<s,R_1S

보고 n시퀀스에서 숫자를 0으로 인덱스하여 합니다. 온라인으로 사용해보십시오

예를 들면 다음과 n=5같습니다.

s<s,R_1SQQ   Final 2 Q's are implicit, Q=eval(input())

       SQ    1-indexed range        [1,2,3,4,5]
   ,R_1      Map each to [n,-1]     [[1,-1],[2,-1],[3,-1],[4,-1],[5,-1]]
  s          Sum (Flatten)          [1,-1,2,-1,3,-1,4,-1,5,-1]
 <       Q   Take 1st Q             [1,-1,2,-1,3]
s            Sum, implicit output   4

1

펄 6 ,  38  26 바이트

{(0,{$_+(($+^=1)??++$ !!-1)}...*)[$_]}

시도 해봐

{(+^-$_+|1)**2 div 8+$_%2}

리버스 엔지니어링 TFeld의 Python answer 기반 .
시도 해봐

넓히는

38 바이트 (시퀀스 생성기) :

{  # bare block lambda with implicit parameter $_

  (
    # generate a new sequence everytime this function is called

    0,    # seed the sequence

    {     # bare block that is used to generate the rest of the values

      $_  # parameter to this inner block (previous value)

      +

      (
          # a statement that switches between (0,1) each time it is run
          ( $ +^= 1 )

        ??     # when it is 1 (truish)
          # a statement that increments each time it is run
          ++$ # &prefix:« ++ »( state $foo )

        !!     # or else subtract 1
          -1
      )
    }

    ...  # keep generating until:

    *    # never stop

  )[ $_ ] # index into the sequence
}

이것은 당신이 전달할 수있는 이점이 있습니다 *이는 전체 시퀀스를 얻기 위해 전달하거나 Range를 전달하여 여러 값을보다 효율적으로 생성 .

26 바이트 (직접 계산) :

{  # bare block lambda with implicit parameter $_

  (

    +^     # numeric binary negate
      -$_  # negative of the input
      +|   # numeric binary or
      1

  ) ** 2   # to the power of 2

  div 8     # integer divide it by 8

  + $_ % 2  # add one if it is odd
}

1

05AB1E , 8 바이트

;L¨O>¹É-

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

Jonathan Allan의 Jelly 접근법 (아마도 시퀀스의 다른 정의로 ​​질문을 편집하는 OP를 기반으로 함)을 기반으로하므로 1- 색인화되었습니다.


+1. 나는 다른 사람이 아무도 게시하지 않으면 며칠 안에 게시 할 05AB1E에서 비슷한 접근 방식을 준비했습니다. 약간 다릅니다 (꼬리를 제거하는 대신 목록을 만들기 전에 먼저 절반을 줄입니다. I대신을 사용 합니다 ¹). 일반적인 접근 방식과 바이트 수는 정확히 동일합니다.;<LO>IÉ-
Kevin Cruijssen

@KevinCruijssen 내가 더 깊이 생각할 수 있다면 어제 게시했을 것입니다. 그러나, 이것이 마지막 기간이며, 이것에 대해 너무 깊이 생각하는 것은 금지되어 있습니다. : P
Outgolfer 에릭

아, 더 이상 결승에 진출하지 못해 다행입니다. 나는 직장에서도 꽤 바쁘고 때로는 때때로 내가 원하는 것보다 더 자주 코드 골프를 연기해야합니다. ; p 시험에 행운을 빕니다!
케빈 크루이 센

1

볼록형 , 10 9 바이트

_½,ª)\2%-

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

Jonathan Allan의 Jelly 접근법을 기반으로합니다 (아마도 시퀀스의 다른 정의로 ​​질문을 편집하는 OP를 기반으로 함). 1- 색인.

설명:

_½,ª)\2%- Stack: [A]
_         Duplicate. Stack: [A A]
 ½        Halve. Stack: [A [A]½]
  ,       Range, [0..⌊N⌋). Stack: [A [[A]½],]
   ª      Sum. Stack: [A [[A]½],]ª]
    )     Increment. Stack: [A [[[A]½],]ª])]
     \    Swap. Stack: [[[[A]½],]ª]) A]
      2   2. Stack: [[[[A]½],]ª]) A 2]
       %  Modulo. Stack: [[[[A]½],]ª]) [A 2]%]
        - Minus. Stack: [[[[[A]½],]ª]) [A 2]%]-]

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