Kisaran inkremental!


14

Tugas Anda adalah, diberi dua bilangan bulat positif, x dan n , mengembalikan angka x pertama dalam urutan rentang kenaikan.

Urutan berbagai tambahan pertama menghasilkan berkisar dari satu sampai n inklusif. Misalnya, jika n adalah 3 , itu akan menghasilkan daftar [1,2,3] . Kemudian berulang kali menambahkan n nilai terakhir yang ditambahkan oleh 1 ke daftar yang ada, dan melanjutkan.

Masukan n=3 misalnya:

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]

Kasus uji:

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]

Jawaban:



7

Jelly , 4 byte

Ḷd§‘

Tautan diad menerima dua bilangan bulat positif, xdi kiri dan ndi kanan, yang menghasilkan daftar bilangan bulat positif.

Cobalah online!

Bagaimana?

Ḷ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
Tunggu ... apakah itu divmod? Pintar! Dan saya berjuang dengan p...
Erik the Outgolfer

6

R , 33 byte

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

Cobalah online!

Solusi Python Port Jonathan Allan .

R , 36 byte

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

Cobalah online!

Solusi asli saya; menghasilkan matriks n×x dengan setiap kolom sebagai kenaikan, yaitu, 1n,2n+1, , kemudian mengambil entri x pertama (turun kolom).


6

05AB1E , 6 byte

L<s‰O>

Port of @JonathanAllan menjawab Jelly , jadi pastikan untuk membatalkannya!

Input pertama adalah x , input kedua adalah n .

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

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)

Pendekatan awal saya sendiri adalah 8 byte :

LI∍εN¹÷+

Input pertama adalah n , input kedua adalah x .

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

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

Perl 6 , 18 byte

{(1..*X+ ^*)[^$_]}

Cobalah online!

Fungsi kari f(x)(n).

Penjelasan

{                }  # Anonymous block
      X+     # Cartesian product with addition
  1..*       # of range 1..Inf
         ^*  # and range 0..n
 (         )[^$_]  # First x elements

4

Brain-Flak , 100 byte

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

Dengan komentar dan pemformatan:

# 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
        ({}[()]<
            (<>[]({}())<>)
        >)
    >)
}

Cobalah online!


4

J , 13 12 byte

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

Cobalah online!

bagaimana

Kita ambil xsebagai arg kiri, nsebagai kanan. Mari kita ambil x = 8dan n = 3untuk contoh ini:

  • +/&i.: Transform kedua args dengan membuat rentang integer i., yaitu arg kiri menjadi 0 1 2 3 4 5 6 7dan arg kanan menjadi 0 1 2. Sekarang kita membuat "tabel tambahan +/dari keduanya:

     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 +: Tambahkan 1 ke setiap elemen tabel ini:

     1 2  3
     2 3  4
     3 4  5
     4 5  6
     5 6  7
     6 7  8
     7 8  9
     8 9 10
    
  • [: ,: Ratakan ,:

     1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 6 7 8 7 8 9 8 9 10
    
  • [ $: Membentuknya $sehingga memiliki jumlah elemen yang sama dengan arg asli, yang tidak ditransformasi [, yaitu x:

     1 2 3 2 3 4 3 4 
    


4

Oktaf , 25 byte

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

Fungsi anonim yang memasukkan angka ndan x, dan menghasilkan vektor baris.

Cobalah online!

Bagaimana itu bekerja

Pertimbangkan n=3dan x=13.

Kode (1:n)'memberikan vektor kolom

1
2
3

Kemudian (0:x)berikan vektor baris

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

Tambahannya (1:n)'+(0:x)adalah elemen-bijaksana dengan siaran, dan karenanya memberikan matriks dengan semua pasangan jumlah:

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

Pengindeksan dengan (1:x)mengambil xelemen pertama dari matriks ini dalam urutan linier kolom-utama (turun, lalu lintas), sebagai vektor baris:

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

3

Haskell , 31 byte

n#x=take x$[1..n]++map(+1)(n#x)

Cobalah online!

Ini mungkin jenis rekursi favorit saya. Kita mulai dengan nilai-nilai dari 1 hingga n dan kemudian menggabungkan nilai-nilai yang sama (melalui referensi-sendiri) +1. maka kita hanya mengambil nilai x pertama.


2

Keempat (gforth) , 34 byte

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

Cobalah online!

Penjelasan Kode

: 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 byte

:!i:q+2G:)

Cobalah online!

-6 byte disimpan berkat Guiseppe dan Luis Mendo!

Penjelasan:

:!          % 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 Terima kasih! Jelas, saya cukup berkarat dengan MATL saya :)
DJMcMayhem








1

Stax , 6 byte

⌐çYæ▄9

Jalankan dan debug itu

Dibongkar & dijelaskan:

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

Alchemist , 77 byte

_->In_n+In_x
x+n+0y+0z->a+Out_a+Out_" "+m+y
y+n->n
y+0n->z
z+m+a->z+n
z+0m->a

Cobalah online!

Tambahkan dan hasilkan penghitung n kali, lalu kurangi n-1 sebelum diulang.


0

Arang , 18 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya memiliki mimpi untuk menyemai daftar dengan rentang indeks-nol dan kemudian mengirisnya lagi tapi itu sebenarnya 2 byte lebih lama. Penjelasan:

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 byte

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

Cobalah online!


Selamat datang di PPCG :) Karena ini bukan fungsi rekursif, Anda tidak perlu menghitung f=. Anda dapat menyimpan satu byte dengan mengeringkan parameter ( n=>x=>) dan lainnya dengan menyebarkan & memetakan array ( [...Array(x)].map()).
Shaggy





0

C (dentang), 843 byte

#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
Hai, selamat datang di PPCG! Tantangan ini ditandai [kode-golf], yang berarti Anda harus menyelesaikan tantangan dalam sesedikit mungkin byte / karakter. Anda dapat menghapus banyak spasi putih, dan mengubah nama variabel menjadi karakter tunggal dalam kode Anda (the argc, argvdan ranges). Juga, tidak perlu menambahkan pesan peringatan .. Anda dapat menganggap input tersebut valid, kecuali jika tantangan mengatakan sebaliknya.
Kevin Cruijssen



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.