증분 범위!


14

두 개의 양의 정수 x 와 주어지면 증분 범위 시퀀스 의 첫 숫자를 반환해야 합니다.nx

증분 범위 시퀀스는 먼저 1에서 까지 의 범위를 생성 합니다. 예를 들어, 이 이면 목록 생성합니다 . 그런 다음 씩 증가한 마지막 값 을 기존 목록에 반복적으로 추가 하고 계속합니다.nn3[1,2,3]n1

예를 들어 의 입력은 다음과 같습니다.n=3

n=3
1. Get range 1 to n. List: [1,2,3]
2. Get the last n values of the list. List: [1,2,3]. Last n=3 values: [1,2,3].
3. Increment the last n values by 1. List: [1,2,3]. Last n values: [2,3,4].
4. Append the last n values incremented to the list. List: [1,2,3,2,3,4]
5. Repeat steps 2-5. 2nd time repeat shown below.

2nd repeat:
2. Get the last n values of the list. List: [1,2,3,2,3,4]. Last n=3 values: [2,3,4]
3. Increment the last n values by 1. List: [1,2,3,2,3,4]. Last n values: [3,4,5].
4. Append the last n values incremented to the list. List: [1,2,3,2,3,4,3,4,5]

테스트 사례 :

n,   x,   Output
1,  49,   [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]
2, 100,   [1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,51]
3,  13,   [1,2,3,2,3,4,3,4,5,4,5,6,5]

답변:



7

젤리 , 4 바이트

Ḷd§‘

x왼쪽과 n오른쪽 에 두 개의 양의 정수를 허용하는 양수 링크 는 양의 정수 목록을 생성합니다.

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

어떻게?

Ḷd§‘ - Link: x, n              e.g   13, 3
Ḷ    - lowered range (x)             [0,1,2,3,4,5,6,7,8,9,10,11,12]
 d   - divmod (n)                    [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2],[3,0],[3,1],[3,2],[4,0]]
  §  - sums                          [0,1,2,1,2,3,2,3,4,3,4,5,4]
   ‘ - increment (vectorises)        [1,2,3,2,3,4,3,4,5,4,5,6,5]

3
잠깐만 ... divmod입니까? 영리한! 그리고 나는 고군분투했다 p...
Outgolfer Erik에 30:19

6

R , 33 바이트

function(n,x,z=1:x-1)z%%n+z%/%n+1

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

포트 조나단 앨런의 파이썬 솔루션 .

R , 36 바이트

function(n,x)outer(1:n,0:x,"+")[1:x]

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

내 원래 솔루션; 각 열을 증분으로하여 ×엑스 행렬을 생성합니다 . 즉, 1,2+1, 은 첫 엑스 항목 을 취 합니다 (열 아래로).


6

05AB1E , 6 바이트

L<s‰O>

@JonathanAllan 의 젤리 답변 포트 , 그래서 그를 투표해야합니다!

첫 번째 입력은 x 이고 두 번째 입력은 입니다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

L       # Push a list in the range [1, (implicit) input]
        #  i.e. 13 → [1,2,3,4,5,6,7,8,9,10,11,12,13]
 <      # Decrease each by 1 to the range [0, input)
        #  → [0,1,2,3,4,5,6,7,8,9,10,11,12]
  s    # Divmod each by the second input
        #  i.e. 3 → [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2],[3,0],[3,1],[3,2],[4,0]]
    O   # Sum each pair
        #  → [0,1,2,1,2,3,2,3,4,3,4,5,4]
     >  # And increase each by 1
        #  → [1,2,3,2,3,4,3,4,5,4,5,6,5]
        # (after which the result is output implicitly)

내 자신의 초기 접근 방식은 8 바이트 였습니다 .

LI∍εN¹÷+

첫 번째 입력은 n 이고 두 번째 입력은 엑스 입니다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

L         # Push a list in the range [1, (implicit) input]
          #  i.e. 3 → [1,2,3]
 I       # Extend it to the size of the second input
          #  i.e. 13 → [1,2,3,1,2,3,1,2,3,1,2,3,1]
   ε      # Map each value to:
    N¹÷   #  The 0-based index integer-divided by the first input
          #   → [0,0,0,1,1,1,2,2,2,3,3,3,4]
       +  #  Add that to the value
          #   → [1,2,3,2,3,4,3,4,5,4,5,6,5]
          # (after which the result is output implicitly)


4

Brain-Flak , 100 바이트

(<>)<>{({}[()]<(({}))((){[()](<{}>)}{}){{}{}<>(({})<>)(<>)(<>)}{}({}[()]<(<>[]({}())[()]<>)>)>)}{}{}

주석과 형식 :

# Push a zero under the other stack
(<>)<>

# x times
{
    # x - 1
    ({}[()]<

        # Let 'a' be a counter that starts at n
        # Duplicate a and NOT
        (({}))((){[()](<{}>)}{})

        # if a == 0
        {
            # Pop truthy
            {}
            <>

            # Reset n to a
            (({})<>)

            # Push 0 to each
            (<>)(<>)
        }

        # Pop falsy
        {}

        # Decrement A, add one to the other stack, and duplicate that number under this stack
        ({}[()]<
            (<>[]({}())<>)
        >)
    >)
}

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


4

J , 13 12 바이트

[$[:,1++/&i.

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

어떻게

우리 는 오른쪽 xn같이 왼쪽 인수 로 사용합니다. 의는하자 x = 8n = 3이 예를 들면 :

  • +/&i.: 정수 범위를 작성하여 두 인수를 변환하십시오 i.. 즉, 왼쪽 arg가 0 1 2 3 4 5 6 7되고 오른쪽 arg가됩니다 0 1 2. 이제 우리 +/는 그 두 가지로부터 "추가 테이블 을 만듭니다 :

     0 1 2
     1 2 3
     2 3 4
     3 4 5
     4 5 6
     5 6 7
     6 7 8
     7 8 9
    
  • 1 +:이 테이블의 모든 요소에 1을 추가하십시오.

     1 2  3
     2 3  4
     3 4  5
     4 5  6
     5 6  7
     6 7  8
     7 8  9
     8 9 10
    
  • [: ,: 평평하게 ,:

     1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 6 7 8 7 8 9 8 9 10
    
  • [ $: 그 모양 $원래, 변환되지 않은 왼쪽 인수 같은 수의 요소가 있으므로 [, 예를 x:

     1 2 3 2 3 4 3 4 
    


4

옥타브 , 25 바이트

@(n,x)((1:n)'+(0:x))(1:x)

익명 함수 입력 번호 해당 n하고 x, 출력한다 행 벡터.

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

작동 원리

고려 n=3x=13.

코드 (1:n)'는 열 벡터를 제공합니다

1
2
3

그런 다음 (0:x)행 벡터를 제공합니다

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

덧셈 (1:n)'+(0:x)은 브로드 캐스트에서 요소별로 이루어 지므로 모든 쌍의 합계가 포함 된 행렬을 제공합니다.

1  2  3  4  5  6  7  8  9 10 11 12 13 14
2  3  4  5  6  7  8  9 10 11 12 13 14 15
3  4  5  6  7  8  9 10 11 12 13 14 15 16

인덱싱을 사용 (1:x)하면 x이 행렬 의 첫 번째 요소를 열 주요 선형 순서 (아래로, 가로로)로 행 벡터로 검색합니다.

1 2 3 2 3 4 3 4 5 4 5 6 5


2

4 번째 (2 번째) , 34 바이트

: f 0 do i over /mod + 1+ . loop ;

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

코드 설명

: f            \ start a new word definition
  0 do         \ start a loop from 0 to x-1
    i          \ put the current loop index on the stack
    over       \ copy n to the top of the stack
    /mod       \ get the quotient and remainder of dividing i by n
    + 1+       \ add them together and add 1
    .          \ output result
  loop         \ end the counted loop
;              \ end the word definition

2

MATL , 16 , 10 바이트

:!i:q+2G:)

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

Guiseppe와 Luis Mendo 덕분에 -6 바이트가 절약되었습니다!

설명:

:!          % Push the array [1; 2; ... n;]
  i:q       % Push the array [0 1 2 ... x - 1]
     +      % Add these two arrays with broadcasting
      2G    % Push x again
        :)  % Take the first x elements

@LuisMendo 감사합니다! 분명히, 나는 내 MATL로 꽤 녹슬 었습니다 :)
James








1

Stax , 6 바이트

⌐çYæ▄9

실행 및 디버깅

포장 풀기 및 설명 :

rmx|%+^ Full program, implicit input (n, x on stack; n in register X)
r       Range [0 .. x)
 m      Map:
  x|%     Divide & modulo x
     +    Add quotient and remainder
      ^   Add 1
          Implicit output


0

, 18 바이트

NθFN⊞υ⊕⎇‹ιθι§υ±θIυ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 나는 인덱스가없는 범위로 목록을 시드하고 다시 슬라이스하는 꿈을 꾸었지만 실제로 2 바이트 더 길었습니다. 설명:

Nθ                  Input `n` into variable
   N                Input `x`
  F                 Loop over implicit range
         ι          Current index
        ‹           Less than
          θ         Variable `n`
       ⎇   ι        Then current index else
               θ    Variable `n`
              ±     Negated
            §υ      Cyclically indexed into list
      ⊕             Incremented
    ⊞υ              Pushed to list
                Iυ  Cast list to string for implicit output

0

JS, 54 바이트

f=(n,x)=>Array.from(Array(x),(_,i)=>i+1-(i/n|0)*(n-1))

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


PPCG에 오신 것을 환영합니다 :) 이것은 재귀 함수가 아니기 때문에를 계산할 필요가 없습니다 f=. 매개 변수를 카레 ( n=>x=>)하여 배열을 확장하고 배열 ( [...Array(x)].map()) 을 펼치고 맵핑하여 다른 바이트를 절약 할 수 있습니다 .
얽히고 설킨 Shaggy





0

C (클랑), 843 바이트

#include <stdlib.h>
main(int argc, char* argv[]){
        int x,n;
        if (argc == 3 && (n = atoi(argv[1])) > 0 && (x = atoi(argv[2])) > 0){ 
                int* ranges = calloc(x, sizeof *ranges);
                for (int i = 0; i < x; i++){
                        if (i < n){ 
                                ranges[i] = i+1;
                        }   
                        else {
                                ranges[i] = ranges[i-n] + 1;
                        }   
                }   
        printf("[");
        for (int j = 0; j < x - 1; j++){
                printf("%d",ranges[j]);
                printf(",");
        }   
        printf("%d",ranges[x - 1]);
        printf("]\n");
        free(ranges);
        }   
        else {
                printf("enter a number greater than 0 for n and x\n");
        }   
}

2
안녕하세요, PPCG에 오신 것을 환영합니다! 이 챌린지에는 [code-golf] 태그가 지정되어 있으므로 가능한 한 적은 바이트 / 문자로 챌린지를 완료해야합니다. 당신은 공백의 부하를 제거하고 코드합니다 (단일 문자 변수 이름을 변경할 수 있습니다 argc, argv그리고 ranges). 또한 경고 메시지를 추가 할 필요가 없습니다. 챌린지가 달리 지시하지 않는 한 입력이 유효하다고 가정 할 수 있습니다.
Kevin Cruijssen



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