Artımlı Aralıklar!


14

Göreviniz, ve olmak üzere iki pozitif tamsayı verilen artımlı aralıklar dizisindeki ilk sayısını döndürmektir .xnx

Artımlı aralık dizisi ilk olarak bir ila dahil bir aralık üretir . Örneğin, olduğu , bu şekilde olur . Daha sonra ile artırılan son değerini tekrar tekrar mevcut listeye ekler ve devam eder.nn3[1,2,3]n1

Örneğin girişi :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]

Test senaryoları:

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]

Yanıtlar:



7

Jöle , 4 bayt

Ḷd§‘

xSolda ve nsağda iki pozitif tamsayıyı kabul eden ve pozitif tamsayıların bir listesini veren ikili bir Bağlantı .

Çevrimiçi deneyin!

Nasıl?

Ḷ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
Bekle ... bu divmod mu? Zeki! Ve ben mücadele ediyordum p...
Outgolfer Erik


6

05AB1E , 6 bayt

L<s‰O>

Port of @JonathanAllan'ın Jelly cevabı , bu yüzden onu oyladığınızdan emin olun!

xn

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

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)

Kendi ilk yaklaşımım 8 byte idi :

LI∍εN¹÷+

nx

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

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 bayt

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

Çevrimiçi deneyin!

Körili fonksiyon f(x)(n).

açıklama

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

4

Brain-Flak , 100 bayt

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

Yorum ve biçimlendirme ile:

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

Çevrimiçi deneyin!


4

J , 13 12 bayt

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

Çevrimiçi deneyin!

Nasıl

xSol argümanı, nsağ olarak kabul ediyoruz . En alalım x = 8ve n = 3bu örneğin:

  • +/&i.: Her iki argümanı da tamsayı aralıkları oluşturarak dönüştürün i., yani sol argüman olur 0 1 2 3 4 5 6 7ve sağ argüman olur 0 1 2. Şimdi +/bu ikisinden bir "toplama tablosu" oluşturuyoruz :

     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 +: Bu tablonun her öğesine 1 ekleyin:

     1 2  3
     2 3  4
     3 4  5
     4 5  6
     5 6  7
     6 7  8
     7 8  9
     8 9 10
    
  • [: ,: Düzleştirin ,:

     1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 6 7 8 7 8 9 8 9 10
    
  • [ $: $Orijinal, dönüştürülmemiş sol argümanla aynı sayıda öğeye sahip olacak şekilde şekillendirin [, yani x:

     1 2 3 2 3 4 3 4 
    


4

Oktav , 25 bayt

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

Anonim fonksiyon girişleri sayı olduğu nve xve çıkışlar bir sıra vektörü.

Çevrimiçi deneyin!

Nasıl çalışır

Düşünün n=3ve x=13.

Kod (1:n)'sütun vektörünü verir

1
2
3

Sonra (0:x)satır vektörü verir

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

Ekleme (1:n)'+(0:x), yayın ile öğe bazındadır ve bu nedenle tüm toplam çiftleriyle bir matris verir:

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

İle endeksleme , bu matrisin (1:x)ilk xelemanlarını sütun-büyük doğrusal sırayla (aşağı, sonra karşı) bir satır vektörü olarak alır:

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

3

Haskell , 31 bayt

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

Çevrimiçi deneyin!

Bu benim en sevdiğim özyineleme olabilir. 1'den n'ye kadar olan değerlerle başlıyoruz ve sonra aynı değerleri (kendi kendine referans yoluyla) +1 birleştiriyoruz. o zaman sadece ilk x değerlerini alırız.


2

İleri (gforth) , 34 bayt

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

Çevrimiçi deneyin!

Kod Açıklaması

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

:!i:q+2G:)

Çevrimiçi deneyin!

Guiseppe ve Luis Mendo sayesinde -6 bayt kurtarıldı!

Açıklama:

:!          % 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 Teşekkürler! Açıkçası, MATL'imle oldukça paslıyım :)
James








1

Stax , 6 bayt

⌐çYæ▄9

Çalıştır ve hata ayıkla

Paketten çıkarıldı ve açıklandı:

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

Simyacı , 77 bayt

_->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

Çevrimiçi deneyin!

Bir sayacı n kez artırır ve çıkarır, ardından tekrarlamadan önce n-1'i çıkarır.


0

Kömür , 18 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Listeyi sıfır indeksli bir aralıkta tohumlama ve sonra tekrar dilimleme hayalleri vardı ama aslında 2 bayt daha uzun. Açıklama:

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 bayt

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

Çevrimiçi deneyin!


PPCG'ye hoş geldiniz :) Bu özyinelemeli bir işlev olmadığından, saymaya gerek yoktur f=. Parametreleri ( n=>x=>) kırarak bir bayt , diziyi ( [...Array(x)].map()) yayarak ve eşleştirerek başka bir bayt kaydedebilirsiniz .
Shaggy





0

C (clang), 843 bayt

#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
Merhaba, PPCG'ye hoş geldiniz! Bu meydan okuma [kod-golf] olarak etiketlenir, yani meydan okumayı mümkün olduğunca az bayt / karakterle tamamlamanız gerekir. Sen beyaz alanlara bir sürü kaldırın ve kod (tek karakter değişken isimleri değiştirebilir argc, argvve ranges). Ayrıca, herhangi bir uyarı mesajı eklemenize gerek yoktur .. Zorluk aksi belirtilmedikçe, girişin geçerli olduğunu varsayabilirsiniz.
Kevin Cruijssen



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.