Tạo một mảng với các số lặp lại


19

Thử thách

Nhiệm vụ của bạn trong câu hỏi này là viết một chương trình hoặc một hàm được đặt tên lấy một số nguyên dương n(lớn hơn 0) làm đầu vào thông qua STDIN, ARGV hoặc các đối số hàm và xuất ra một mảng thông qua STDOUT hoặc hàm trả về giá trị.

Nghe có vẻ đơn giản? Bây giờ đây là các quy tắc

  • Mảng sẽ chỉ chứa các số nguyên từ 1đếnn
  • Mỗi số nguyên từ 1đến nphải được lặp lại xlần trong đó xlà giá trị của mỗi số nguyên.

Ví dụ:

Đầu vào:

5

Đầu ra:

[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

Các mảng có thể hoặc không thể được sắp xếp.

Đây là vì vậy người chiến thắng là mã ngắn nhất tính bằng byte.

Tiền thưởng

Nhân số điểm của bạn với 0.5nếu không có hai số nguyên liền kề trong mảng đầu ra của bạn giống nhau.

Ví dụ n = 5, một cấu hình như vậy sẽ là

[5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]

Câu trả lời:


6

APL, 4 ký tự

/⍨⍳⎕

Làm thế nào nó hoạt động:

đọc đầu vào của người dùng. Đối với đầu ra, APL theo mặc định in kết quả từ mỗi dòng.

⍳nlà các số nguyên từ 1 đến n. Thí dụ:⍳3←→ 1 2 3

/có nghĩa là nhân rộng . Mỗi phần tử từ đối số bên phải được lặp lại nhiều lần như được chỉ định bởi phần tử tương ứng của nó từ đối số bên trái. Thí dụ:2 0 3/'ABC'←→ 'AACCC'

toán tử đi lại . Khi nó xuất hiện ở bên phải của hàm, nó sẽ sửa đổi hành vi của nó, do đó, nó hoán đổi các đối số ( A f⍨ B ←→ B f Ado đó "đi lại") hoặc cung cấp cùng một đối số ở cả hai bên ( f⍨ A ←→ A f A, "selfie"). Các hình thức sau được sử dụng trong giải pháp này.


Tiền thưởng:

6-∊⌽⍳¨⍳⎕(8 ký tự, cảm ơn @ phil-h )

⍳5(iota năm) là 1 2 3 4 5.

⍳¨ ⍳5(iota mỗi iota năm) là (,1)(1 2)(1 2 3)(1 2 3 4)(1 2 3 4 5), một vectơ của vectơ. Mỗi ( ¨) là một toán tử, nó lấy một hàm ở bên trái và áp dụng nó cho từng mục từ mảng bên phải.

đảo ngược mảng, vì vậy chúng tôi nhận được (1 2 3 4 5)(1 2 3 4)(1 2 3)(1 2)(,1).

tranh thủ (aka flatten ). Đệ quy đi qua đối số và trả về các vô hướng đơn giản từ nó dưới dạng một vectơ.


Làm thế nào về một biểu thức 4 ký tự ? /⍨⍳n
ngn

Như bạn muốn, thưa ngài, tôi đã cập nhật văn bản. Nhưng chắc chắn sự phản đối của bạn phải áp dụng cho các giải pháp khác không được bao bọc trong các chức năng?
ngn

3
Dyalog APL có hai loại: "Cổ điển" và "Unicode". Phiên bản Cổ điển đã tồn tại trong nhiều thập kỷ, kể từ trước khi tiêu chuẩn Unicode xuất hiện và sử dụng mã hóa byte theo mỗi ký tự tùy chỉnh cho bộ ký tự APL. Nó vẫn được hỗ trợ, mặc dù việc sử dụng nó không được khuyến khích. Vì vậy, tôi muốn sử dụng điều này như một cái cớ. Nhìn rộng hơn, tôi nghĩ trong việc chơi golf chúng ta nên đếm các ký tự, không phải byte. Việc các điểm mã thấp nhất trong Unicode bị ASCII tập trung vào tiếng Anh là một tai nạn lịch sử không nên quan trọng ngày nay. Thật thú vị, APL đã được hình thành trước khi ASCII ra đời.
ngn

3
@ngn đếm chars không phải là một ý tưởng tốt , vì câu trả lời thường sẽ trở thành giải mã bảng chữ cái súp. Ký tự APL được tính là byte vì mã hóa đó tồn tại; điều này được thiết lập tốt trên trang web này. Điều này hoạt động với bất kỳ mã hóa byte nào tồn tại trước khi đặt câu hỏi.
FryAmTheEggman

1
@ngn: Bạn có thể giải thích câu trả lời của bạn không? Bởi vì nó có thể được thực hiện thông qua: 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 hoặc 6 trừ mỗi 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1, mà cảm giác như nó không xa từ câu trả lời ban đầu của bạn.
Phil H

11

Ruby (đệ quy), 41 byte * 0,5 = 20,5

def n(n,i=1);i>n ?[]:n(n,i+1)+[*i..n];end

Hoặc sử dụng lambda (theo khuyến nghị của histocrat và Ventero): 34 byte * 0.5 = 17

r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}

(sử dụng cuộc gọi r[argument])


2
Đó là một giải pháp tuyệt vời. Bạn có thể lưu một số byte bằng cách biến nó thành lambda thay vì phương thức ( n=->x,i=1{...n[x,i+1]...) và một vài cái nữa với [*i..n].
lịch sử

1
Bằng cách đảo ngược logic, bạn có thể thả khoảng trắng vào phần ba:r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Ventero


8

Haskell, 31 ký tự = 15,5 điểm

f n=[y|x<-[n,n-1..1],y<-[x..n]]

27 ký tự không có tiền thưởng

f n=[x|x<-[1..n],_<-[1..x]]

Bị đánh đập bởi Proud Haskeller


giải pháp đầu tiên của bạn là không chính xác. Một cách khắc phục có thể làg n = [y|x<-[n,n-1..1],y<-[x..n]]
karakfa

@karakfa oops: - / và cảm ơn vì đã sửa chữa
John Dvorak

Câu trả lời Haskell của tôi chỉ thấp hơn một chút so với câu trả lời của bạn
tự hào

Tôi có nên liên kết với nó từ giải pháp của tôi, để thúc đẩy nó?
John Dvorak

@JanDvorak Tôi thực sự muốn ...
tự hào

7

C, 22 = 44 byte * 0,5

Hàm hcó hai tham số. Đầu tiên là một intchỉ định n . Thứ hai là một int*bộ đệm đầu ra.

h(n,o)int*o;{for(n&&h(~-n,o+=n);*--o=n--;);}

Chương trình kiểm tra

main(){
int wow[999],*i;
memset(wow,0,sizeof(wow));
h(6, wow);
for(i=wow;*i;i++)printf("%d ", *i);
}

Tôi không hiểu Vui lòng giải thích?
bacchusbeale

@bacchusbeale Ok .. Nó đệ quy viết các chuỗi giảm dần từ n đến 0. Các chuỗi ngắn hơn được viết sớm hơn, ở mức độ đệ quy sâu hơn. Nếu đối số n là 0, thì n là falsey nên không có đệ quy và chỉ có 0 được viết, dùng để đánh dấu sự kết thúc của mảng.
frageum

7

Bình - 15 10 * .5 = 5

smr-QdhQUQ

Hãy thử trực tuyến.

Mong đợi đầu vào trên stdin. Thuật toán độc lập phát hiện ra. Cảm ơn @ Sp3000 vì đã giúp tôi dán Q cuối cùng vào đó: P Ngoài ra, thật trớ trêu? XD

Giải trình:

Q=eval(input())       : implicit
s                     : The sum of...
 m      UQ            : map(...,range(Q))
  r-QdhQ              : range(Q-d,Q+1)

2
Giải pháp tốt đẹp. Có bao giờ một tình huống trong đó Pyth sẽ không giành được mã golf? :)
Alex A.

2
@Alex Tùy thuộc vào bản chất của vấn đề, các ngôn ngữ chơi gôn dựa trên ngăn xếp (Golfscript, CJam) có thể giải quyết vấn đề này, nó cũng có thể thua các công cụ thư viện ( ho bash ho );)
FryAmTheEggman 19/12/14

6

CJam, 12 15 byte * 0,5 = 7,5

li_,f{),f-W%~}`

Đây là chương trình STDIN-to-STDOUT đầy đủ. Nó kết hợp các hậu tố tăng dần của 1 ... nphạm vi, điều này đảm bảo rằng không có hai số liền kề nào giống hệt nhau.

Kiểm tra nó ở đây.


6

Python 2, 53 byte * 0,5 = 26,5

i=n=input()
x=[]
while i:x+=range(i,n+1);i-=1
print x

Không biết xấu hổ mượn ý tưởng của @ VisualMelon


6

Haskell, 34 byte * 0,5 = 17

0%n=[]
i%n=[i..n]++(i-1)%n
g n=n%n

Đó là lần đầu tiên tôi từng sử dụng Haskell để chơi gôn. Gọi với g <number>.



5

GolfScript (14 byte * 0,5 = điểm 7)

 ~:x,{~x),>~}%`

Bản demo trực tuyến

Tôi nghĩ rằng điều này có thể tương tự như một số câu trả lời hiện có ở chỗ nó xây dựng mảng concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )

Đáng buồn thay, tôi đã không thể chơi golf thêm nữa thanh lịch hơn:

~:x]{{,{x\-}/}%}2*`

trong đó đặt đầu xvào thành một mảng và sau đó áp dụng hai lần {,{x\-}/}%, ánh xạ từng phần tử trong một mảng thành đếm ngược của nhiều phần tử đó x.


5

C # - 81 (161byte * 0,5)

Công việc đơn giản trong C #, hy vọng sẽ nhận được phần thưởng không có số lượng lớn. Đọc một int từ stdin, viết ra một mảng như ví dụ cho thiết bị xuất chuẩn.

class P{static void Main(){int n=int.Parse(System.Console.ReadLine()),m=n-1,i;var R="["+n;for(;m-->0;)for(i=m;i++<n;)R+=", "+i;System.Console.WriteLine(R+"]");}}

Dễ đọc hơn:

class P
{
    static void Main()
    {
        int n=int.Parse(System.Console.ReadLine()),m=n-1,i;
        var R="["+n;
        for(;m-->0;)
            for(i=m;i++<n;)
                R+=", "+i;
        System.Console.WriteLine(R+"]");
    }
}

Ví dụ đầu ra:

n = 5
[5, 4, 5, 3, 4, 5, 2, 3, 4, 5, 1, 2, 3, 4, 5]

Tôi thực sự đang cố gắng tìm ra một giải pháp C # ngắn hơn nhưng dường như tôi không thể làm được ... hoàn thành tốt
Brandon

1
@MarkKnol System.Consolelà tĩnh, bạn không thể gán nó cho một biến, nhưng trong C # 6 hoặc bất cứ điều gì tiếp theo, bạn sẽ có thể làm using System.Console;( using System;không trả tiền trong trường hợp này), không chắc tôi cảm thấy thế nào về tính năng này, sẽ ảnh hưởng đến rất nhiều câu hỏi golf cũ vì lý do này chính xác;)
VisualMelon

1
@IchabodClay nó trở nên tồi tệ hơn, using C=System.Consoletiết kiệm 3 byte và có lẽ đó là ý nghĩa của @MarkKnol (xin lỗi!), Sự sơ suất đáng xấu hổ về phía tôi.
VisualMelon

1
Ngoài ra, theo các quy tắc, bạn chỉ có thể có phương thức thay vì tạo một chương trình hoàn chỉnh. Một cái gì đó như ... này . (114 byte với khoảng trắng và loại bỏ như vậy. 57 byte có tiền thưởng.)
Ichabod Clay

1
@IchabodClay thực sự; Tôi thích gửi các chương trình đầy đủ cho các chức năng, không có lý do chính đáng, IO dường như là một phần của niềm vui (tôi cũng không có xu hướng sử dụng argv). Hãy đăng một câu trả lời tốt hơn mà không có những ràng buộc daft!
VisualMelon

4

JavaScript, ES6, 41 byte

f=i=>[...Array(i).fill(i),...i?f(--i):[]]

Điều này tạo ra một hàm fcó thể được gọi như thế f(6)và nó trả về mảng cần thiết.

Điều này sử dụng một cách tiếp cận đệ quy, trong đó mỗi lần lặp tạo ra một mảng các iphần tử đều có giá trị ivà nối một mảng được trả về bằng f(i-1)điều kiện dừng của i==0.

Hoạt động trên Firefox mới nhất.


4

Haskell, 14 = 28 byte / 2

f n=n:[1..n-1]>>= \r->[r..n]

đầu ra ví dụ:

>f 5
[5,1,2,3,4,5,2,3,4,5,3,4,5,4,5]

24 byte không có tiền thưởng:

f n=[1..n]>>= \r->[r..n]

có thể =<<giúp tránh khoảng trắng? Tôi cảm thấy như nó có thể, nhưng tôi sẽ ngạc nhiên nếu bạn đã không xem xét điều đó.
John Dvorak

@JanDvorak Nếu tôi đã sử dụng, =<<tôi sẽ cần dấu ngoặc đơn cho lambda
tự hào

Tôi bối rối khi chính xác lambdas cần dấu ngoặc đơn. Liệu tiêu đề lambda có cùng tính cố định như >>=?
John Dvorak

@JanDvorak Họ không có sự cố định; Tôi không chắc chắn như thế nào chính xác quy tắc này, nhưng lambdas chỉ có thể xuất hiện nơi các nhà khai thác không thể (không tính đến phần): sau khi (, [, =, ,, sau khi bất kỳ nhà khai thác, và những thứ tương tự
haskeller tự hào

Tôi đoán cả lambdas và toán tử đều không thể xuất hiện dưới dạng mẫu? let \x->y = (2+) in (x,y)có vẻ như không thể
John Dvorak


3

vba, 76 * 0,5 = 38

Sub i(q)
For Z=1 To q:For x=q To Z Step -1:Debug.?x;",";:Next:Next
End Sub

bạn có thể mất 1 (0,5, về mặt kỹ thuật) byte bằng cách ngưng tụ For Z=1 TothànhFor Z=1To
Taylor Scott

bạn cũng có thể ngưng tụ Next:NextđểNext x,Z
Taylor Scott

2

R, 44 * .5 = 22

f=function(n){r=0;for(i in 1:n)r=c(r,n:i);r}

Một bài kiểm tra nhanh

> f(1)
[1] 1
> f(2)
[1] 2 1 2
> f(3)
[1] 3 2 1 3 2 3
> f(4)
 [1] 4 3 2 1 4 3 2 4 3 4

Gì ? Không có TSQL?
Tối ưu hóa

@Optimizer có thể muộn hơn :)
MickyT

2

JavaScript, ES6, 66 byte * 0,5 = 33

f=i=>(g=n=>[...Array(n).fill().map((v,x)=>i-x),...n?g(n-1):[]])(i)

Xây dựng phương pháp đệ quy của Trình tối ưu hóa , chúng ta có thể xây dựng các bước giảm dần theo chiều dài giảm dần, như thế nào [4,3,2,1, 4,3,2, 4,3, 4].

Thay vì thực hiện các tập hợp con có cùng giá trị với Array(i).fill(i), chúng tôi thực hiện undefinedcác tập hợp con có độ dài phù hợp với Array(n).fill()và sau đó thay đổi các giá trị thành một lần chạy giảm dần bằng cách sử dụng .map((v,x)=>i-x). Ngoài ra, chúng tôi xác định và tái diễn trên một chức năng bên trong g; hàm ngoài fchỉ tồn tại để lưu trữ giá trị itrong khi gđệ quy.


2

T-SQL, 176 * 0,5 = 88

Vì bạn dường như bỏ lỡ T-SQL @Optimizer, nên đây là vinh quang dài dòng :).

Một vài tùy chọn chức năng, hàm vô hướng và hàm nội tuyến có giá trị. Hàm vô hướng sử dụng các vòng lặp while để lặp lại và trả về một chuỗi số, trong đó hàm Inline Table Valued sử dụng CTE đệ quy cho một chuỗi và trả về một bảng. Tất nhiên những thứ này sẽ không bao giờ cạnh tranh được, vì vậy tôi đã không dành nhiều thời gian để chơi gôn.

Hàm nội tuyến có giá trị, 176 * .5

CREATE FUNCTION F(@ INT)RETURNS TABLE RETURN WITH R AS(SELECT @ N UNION ALL SELECT N-1FROM R WHERE N>0)SELECT B.N FROM R CROSS APPLY(SELECT TOP(R.N)N FROM R A ORDER BY N DESC)B

Được gọi như sau

SELECT * FROM dbo.F(5)

Ví dụ SQLFiddle

Hàm vô hướng, 220 * .5

CREATE FUNCTION G(@ INT)RETURNS VARCHAR(MAX)AS BEGIN DECLARE @S VARCHAR(MAX),@N INT=1,@I INT,@C INT WHILE @N<=@ BEGIN SELECT @I=@N,@C=@ WHILE @C>=@I BEGIN SELECT @S=CONCAT(@S+',',@C),@C-=1 END SET @N+=1 END RETURN @S END

Được gọi như sau

SELECT dbo.G(5)

Ví dụ SQLFiddle



2

perl, 26 byte

for(1..$n){print"$_ "x$_;}

1
Xin vui lòng gửi điểm số của bạn. Ngoài ra, vì đây là mã golf, bạn có thể lưu byte bằng cách xóa các khoảng trắng thừa và định nghĩa của $n.
Alex A.

Điều này không chạy cho tôi theo Perl 6.
Alex A.

@Alex, lỗi là gì, hoạt động theo 5.10
michael501

Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3. Đã thử nó trên ideone.com.
Alex A.

@Alex, hãy thử điều này: C: \ Windows \ system32> perl -e "$ n = 5; for (1 .. $ n) {print qq ($ _) x $ _;};" 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
michael501

2

JavaScript (có thể đọc được), 131 byte

Tôi chưa quen với Code Golf nên đây không phải là tốt nhất

function f(n) {
    var arr = [];
    for(var i = 1; i <= n; i++) {
        for(var j = 0; j < i; j++) {
            arr.push(i);
        }
    }
    return arr;
}

JavaScript (ít đọc hơn), 87 byte

Giảm thiểu bằng cách sử dụng jscompress.com

function f(e){var t=[];for(var n=1;n<=e;n++){for(var r=0;r<n;r++){t.push(n)}}return t}

2

TECO, 25 byte * 0,5 = 12,5

a\+1%a%b<qauc-1%b<-1%c=>>

Ở trên hầu như không vượt qua phiên bản không thưởng ở mức 13 byte:

a\%a<%b<qb=>>

2

C #, 114 99 * 0,5 = 49,5 byte

(Với một chút trợ giúp từ câu trả lời của VisualMelon) Chỉnh sửa: và nhận xét của James Webster

int[]A(int n){int m=n,i,c=0;var a=new int[n*(n+1)/2];while(m-->0)for(i=m;i++<n;)a[c++]=i;return a;}

Ung dung:

int[] FooBar(int n)
{
    int altCounter = n, i, arrayCounter = 0;
    var returnArray = new int[n * (n + 1) / 2];
    while(m-->0)
        for(i = altCounter; i++ < n; )
            returnArray[arrayCounter++]=i;
    return returnArray;
}

Có một phiên bản không an toàn mà tôi xấu hổ lấy từ câu trả lời C của frageum, nhưng tôi không chắc chắn 100% nó phù hợp với các quy tắc vì bạn phải phân bổ bộ nhớ trước khi gọi phương thức.

C # (không an toàn), 82 * 0,5 = 41 byte

unsafe void A(int n,int*p){int*z=p;int m=n,i;while(m-->0)for(i=m;i++<n;)z++[0]=i;}

Được gọi như sau:

int n = 5, length = (int)((n / 2f) * (n + 1));
int* stuff = stackalloc int[length];
int[] stuffArray = new int[length];
A(n, stuff);
System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuffArray), stuffArray, 0, stuffArray.Length);
//stuffArray == { 5, 4, 5, 3, 4, 5, 2, 3, 4, 5, 1, 2, 3, 4, 5 }

Theo đề xuất của VisualMelon (cảm ơn!), Mã không an toàn có thể được tạo lại bằng mã an toàn làm giảm kích thước hơn nữa! Vẫn đặt ra câu hỏi nếu việc tạo mảng kết quả cuối cùng được phép thực hiện ngoài phương thức.

C #, 72 * 0,5 = 36 byte

void A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}

Công việc tốt đẹp! Đối với phiên bản mỗi phân bổ, nó rẻ hơn nhiều để đi an toàn và vượt qua nó int[]tắt thẳng void A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}- Tôi sẽ đồng ý nó có thể là một chút iffy, liên quan đến các quy tắc;)
VisualMelon

Bạn không cần phải tạo một con trỏ cục bộ cho phiên bản không an toàn, giúp cắt giảm 8byte tốt. Ngoài ra, tôi có thể thiếu điểm, nhưng dòng cuối cùng của mã gọi không an toàn có nên System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);không?
VisualMelon

@VisualMelon Đó là những gì tôi nhận được khi không kiểm tra lại tên của các biến sau khi tôi đổi tên chúng. Cảm ơn những người đứng đầu: D. Đã chỉnh sửa câu trả lời cho tài khoản cho phiên bản ngắn hơn trong bình luận của bạn.
Ichabod Clay

Bạn có thể cắt giảm một chút phiên bản an toàn bằng cách nội tuyến độ dài var a=new int[(int)((n/2f)*(n+1))];tôi nghĩ rằng nó sẽ giảm xuống còn 109
James Webster

Thêm một lần nữa bằng cách viết lại calc như:(n*(n+1)/2)
James Webster


1

C #, 116 115 + 33 = 148 byte

Không phải mã ngắn nhất, nhưng ... dù sao nó cũng hoạt động: P

int[]l(int m){List<int>i=new List<int>();for(int j=1;j<=m;j++){for(int x=0;x<j;x++){i.Add(j);}}return i.ToArray();}

Yêu cầu điều này ở đầu tệp (33 byte):

using System.Collections.Generic;

Phiên bản chưa chơi gôn:

int[] RepatedNumberList(int m)
{
    List<int> intList = new List<int>();
    for (int j = 1; j <= m; j++)
    {
        for (int x = 0; x < j; x++)
        {
            intList.Add(j);
        }
    }
    return initList.ToArray();
}

1

J, 23 * 0,5 = 11,5

   f=.-;@(<@|.@i."0@>:@i.)
   f 5
5 4 5 3 4 5 2 3 4 5 1 2 3 4 5

J, 11

   f=.#~@i.@>:
   f 5
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

1
23 * 0.511.5, không 10.5.
Chương trìnhFOX

@ProgramFOX bắt tốt. Bạn sẽ chỉnh sửa, hay tôi nên? Không phải là một lý do tuyệt vời để downvote IMO.
John Dvorak

@JanDvorak Chỉ cần chỉnh sửa nó. Và tôi đã không downvote, tôi đã nâng cấp nó ngay cả trước khi tôi nhìn thấy sai lầm.
Chương trìnhFOX

Bây giờ lỗi đã được sửa, giải pháp thưởng có nên được chuyển xuống đáy không?
John Dvorak

-1Byte : f=.-[:;<@|.@i."0@>:@i., làm cho điểm số bằng nhau!
Bolce Bussiere

1

JavaScript (ES6) 29 (58 * 0,5)

Chỉnh sửa xóa; thx @Optimizer

Q=o=>(m=>{for(n=o,r=[];n>m||++m<(n=o);)r.push(n--)})(0)||r

Thử nghiệm trong bảng điều khiển FireFox / FireBug

Q(9)

Đầu ra

[9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 9, 8, 7, 6, 5, 4, 9, 8, 7, 6, 5, 9, 8, 7, 6, 9, 8, 7, 9, 8, 9]

Bị đánh cắp

Q=o=>{
  for(m=0,r=[];m<o;++m)
    for(n=o;n>m;)
      r.push(n--);
  return r
}

1

ECMAScript6, 67 * 0,5 = 33,5 byte

f=n=>{a=[],b=0;while(c=n+b,n--){while(c-b)a.push(c--);b++}return a}

Khá hài lòng với cái này ... Nó chỉ bằng một phần tư kích thước ban đầu của tôi.

f(4) trả về:

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

Câu trả lời cũ:

f=i=>{a=b=Array;while(i)a=a.concat(b.apply(null,b(i)).map(e=>i)),i--;return a}

Đây là lần đầu tiên tôi chơi golf mã ... Tôi vẫn muốn nhận được 0,5x tiền thưởng đó. Mọi góp ý đều được hoan nghênh!

Được gọi với f (n).


Bạn phải khá mới với JavaScript nó tự :). (1) Xóa dấu ngoặc quanh đối số d, (2) a=b=c=[]trong phần khai báo, (3) c[a].map(e=>a)(4)b.push(...c)
Trình tối ưu hóa

Tôi đã tạo một phiên bản ngắn hơn trước khi đọc bình luận của bạn, mà tôi sẽ đưa vào bài viết của mình. Trải nghiệm của tôi với JS chủ yếu giới hạn ở thao tác DOM / kiểu cho các ứng dụng web đơn giản ... và tôi hầu như không sử dụng bất kỳ tính năng ES6 mới nào cho đến ngày hôm nay.
nhị phân

1

C #, 108 byte * 0,5 = 54

List<int> f(int n){var r=new List<int>();int m=n-1,i;r.Add(n);for(;m-->0;)for(i=m;i++<n;)r.Add(i);return r;}

Cảm ơn VisualMelon đã làm công việc khó khăn! Tôi nghĩ tôi sẽ cố gắng ép nó xuống hết mức có thể.

(114 byte * 0,5 = 57, nếu bạn khăng khăng sử dụng .ToArray () để trả về int [])

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.