Buat array dengan angka berulang

19

Tantangan

Tugas Anda dalam pertanyaan ini adalah menulis program atau fungsi bernama yang mengambil bilangan bulat positif n(lebih besar dari 0) sebagai input melalui STDIN, ARGV atau argumen fungsi dan menghasilkan array melalui STDOUT atau nilai fungsi yang dikembalikan.

Kedengarannya cukup sederhana? Sekarang inilah aturannya

  • Array hanya akan berisi bilangan bulat dari 1hinggan
  • Setiap bilangan bulat dari 1ke nharus diulang xkali di mana xnilai dari setiap bilangan bulat.

Sebagai contoh:

Memasukkan:

5

Keluaran:

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

Array mungkin atau mungkin tidak diurutkan.

Ini adalah sehingga pemenang adalah kode terpendek dalam byte.

Bonus

Lipat gandakan skor Anda dengan 0.5jika tidak ada dua bilangan bulat yang berdekatan di array output Anda sama.

Misalnya untuk n = 5, satu konfigurasi seperti itu

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

Jawaban:

6

APL, 4 karakter

/⍨⍳⎕

Bagaimana itu bekerja:

membaca input pengguna. Sedangkan untuk output, APL secara default mencetak hasil dari setiap baris.

⍳nadalah bilangan bulat dari 1 hingga n. Contoh:⍳3←→ 1 2 3

/berarti mereplikasi . Setiap elemen dari argumen kanan diulang sebanyak yang ditentukan oleh elemen yang sesuai dari argumen kiri. Contoh:2 0 3/'ABC'←→ 'AACCC'

adalah operator perjalanan . Ketika itu terjadi di sebelah kanan fungsi, ia memodifikasi perilakunya, sehingga ia bertukar argumen ( A f⍨ B ←→ B f A, karenanya "bepergian") atau memberikan argumen yang sama di kedua sisi ( f⍨ A ←→ A f A, "selfie"). Bentuk terakhir digunakan dalam solusi ini.


Bonus:

6-∊⌽⍳¨⍳⎕(8 karakter, terima kasih @ phil-h )

⍳5(iota lima) adalah 1 2 3 4 5.

⍳¨ ⍳5(Iota setiap iota lima) adalah (,1)(1 2)(1 2 3)(1 2 3 4)(1 2 3 4 5), vektor vektor. Setiap ( ¨) adalah operator, dibutuhkan fungsi di sebelah kiri dan menerapkannya ke setiap item dari array di sebelah kanan.

membalikkan array, jadi kita dapatkan (1 2 3 4 5)(1 2 3 4)(1 2 3)(1 2)(,1).

adalah Terdaftar (alias meratakan ). Secara rekursif melintasi argumen dan mengembalikan skalar sederhana dari itu sebagai vektor.

ngn
sumber
Bagaimana dengan ekspresi 4 karakter ? /⍨⍳n
ngn
Terserah Anda, tuan, saya sudah memperbarui teksnya. Tapi tentu saja keberatan Anda harus berlaku untuk solusi lain yang tidak dibungkus fungsi?
ngn
3
Dyalog APL hadir dalam dua rasa: "Klasik" dan "Unicode". Versi Classic telah ada selama beberapa dekade, sejak sebelum standar Unicode muncul, dan menggunakan pengkodean byte-per-karakter khusus untuk set karakter APL. Itu masih didukung, meskipun penggunaannya tidak disarankan. Jadi, saya ingin menggunakan ini sebagai alasan. Secara lebih luas, saya pikir dalam bermain golf kita harus menghitung karakter, bukan byte. Fakta bahwa titik kode terendah di Unicode ditempati oleh ASCII yang berpusat pada bahasa Inggris adalah kecelakaan historis yang seharusnya tidak menjadi masalah saat ini. Menariknya, APL dikandung sebelum ASCII keluar.
ngn
3
@ngn menghitung karakter bukan ide yang baik , karena jawaban umumnya akan menjadi decode alfabet sup Karakter APL dihitung sebagai byte karena penyandian itu ada; ini sudah mapan di situs ini. Ini berfungsi dengan pengodean byte apa pun yang ada sebelum pertanyaan diajukan.
FryAmTheEggman
1
@ ngn: Bisakah Anda menjelaskan jawaban bonus Anda? Karena dapat dilakukan melalui: 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 atau 6 masing-masing minus 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1, yang rasanya seperti tidak jauh dari jawaban awal Anda.
Phil H
11

Ruby (rekursif), 41 byte * 0,5 = 20,5

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

Atau menggunakan lambda (seperti yang direkomendasikan oleh histokrat dan Ventero): 34 byte * 0,5 = 17

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

(panggil menggunakan r[argument])

AlexRath
sumber
2
Itu solusi yang sangat keren. Anda dapat menyimpan beberapa byte dengan menjadikannya lambda alih-alih metode ( n=->x,i=1{...n[x,i+1]...) dan beberapa lagi dengan [*i..n].
histokrat
1
Dengan membalik logika, Anda dapat menjatuhkan spasi putih di ternary:r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Ventero
11

Pyth , 9 byte * 0,5 = 4,5

smrhQhdUQ

Dengan bantuan dari @FryAmTheEggman

Cobalah online.


Penjelasan

s             reduce + on list
 m            map
  rhQhd       lambda d: reversed(range(d+1, Q+1)), over
       UQ     range(Q)

dimana Qinputnya

Sp3000
sumber
5
Seharusnya tidak membantu Anda: D
FryAmTheEggman
8

Haskell, 31 karakter = skor 15,5

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

27 karakter tanpa bonus

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

Dipukuli oleh Proud Haskeller

John Dvorak
sumber
solusi pertama Anda tidak benar. Perbaikan yang mungkin adalahg n = [y|x<-[n,n-1..1],y<-[x..n]]
karakfa
@karakfa oops: - / dan terima kasih atas perbaikannya
John Dvorak
Jawaban Haskell saya sedikit lebih rendah dari jawaban Anda
haskeller bangga
Haruskah saya menautkannya dari solusi saya, untuk mempromosikannya?
John Dvorak
@ JanDvorak Saya ingin, sebenarnya ...
haskeller bangga
7

C, 22 = 44 byte * 0,5

Fungsi ini hmengambil dua parameter. Yang pertama adalah intmenentukan n . Yang kedua adalah int*yang merupakan buffer output.

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

Program uji

main(){
int wow[999],*i;
memset(wow,0,sizeof(wow));
h(6, wow);
for(i=wow;*i;i++)printf("%d ", *i);
}
feersum
sumber
Aku tidak mendapatkannya. Tolong jelaskan?
bacchusbeale
@ bacchusbeale Oke .. Secara rekursif menulis urutan menurun dari n ke 0. Urutan yang lebih pendek ditulis lebih cepat, pada tingkat rekursi yang lebih dalam. Jika argumen n adalah 0, maka n adalah falsey sehingga tidak ada rekursi, dan hanya 0 yang ditulis, yang berfungsi untuk menandai akhir array.
feersum
7

Pyth - 15 10 * .5 = 5

smr-QdhQUQ

Cobalah online.

Diharapkan input pada stdin. Algoritma yang ditemukan secara independen. Terima kasih @ Sp3000 untuk membantu saya menempel Q terakhir di sana: P Juga, ironi? XD

Penjelasan:

Q=eval(input())       : implicit
s                     : The sum of...
 m      UQ            : map(...,range(Q))
  r-QdhQ              : range(Q-d,Q+1)
FryAmTheEggman
sumber
2
Solusi yang bagus. Apakah pernah ada situasi di mana Pyth tidak akan memenangkan golf kode? :)
Alex A.
2
@Alex Tergantung pada sifat masalahnya, bahasa golf berbasis stack (Golfscript, CJam) dapat mengatasinya, juga dapat kalah dengan item perpustakaan ( cough bash cough );)
FryAmTheEggman
6

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

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

Ini adalah program STDIN-ke-STDOUT lengkap. Ini menggabungkan akhiran peningkatan 1 ... njangkauan, yang memastikan bahwa tidak ada dua angka yang berdekatan yang identik.

Uji di sini.

Martin Ender
sumber
6

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

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

Tanpa malu-malu meminjam ide @ VisualMelon

Sp3000
sumber
6

Haskell, 34 byte * 0,5 = 17

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

Itulah pertama kalinya saya menggunakan Haskell untuk bermain golf. Panggil dengan g <number>.

Sp3000
sumber
5

Bash + coreutils, 28/2 = 14

Tanpa malu-malu mencuri ide dan golf @ pgy :

seq -f"seq %g $1" $1 -1 1|sh

Bash murni (tanpa coreutils), 30/2 = 15

Eval, melarikan diri dan ekspansi neraka:

eval eval echo \\{{$1..1}..$1}
Trauma Digital
sumber
5

GolfScript (14 byte * 0,5 = skor 7)

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

Demo online

Saya pikir ini mungkin mirip dengan beberapa jawaban yang ada dalam membangun array concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )

Sedihnya saya tidak bisa bermain golf lebih jauh yang bisa dibilang lebih elegan:

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

yang menempatkan input xke dalam array dan kemudian berlaku dua kali {,{x\-}/}%, yang memetakan setiap elemen dalam array untuk menghitung mundur dari banyak elemen dari x.

Peter Taylor
sumber
5

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

Pekerjaan sederhana di C #, semoga mendapat bonus no-neibouring-number. Membaca int dari stdin, menulis array seperti contoh ke stdout.

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+"]");}}

Lebih mudah dibaca:

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+"]");
    }
}

Contoh output:

n = 5
[5, 4, 5, 3, 4, 5, 2, 3, 4, 5, 1, 2, 3, 4, 5]
VisualMelon
sumber
Saya benar-benar mencoba mencari solusi C # yang lebih pendek tapi saya sepertinya tidak bisa mendapatkannya ... bagus sekali
Brandon
1
@ MarkKnol System.Consoleadalah statis, Anda tidak dapat menetapkannya ke variabel, tetapi dalam C # 6 atau apa pun yang berikutnya, Anda akan dapat melakukan using System.Console;( using System;tidak membayar dalam hal ini), tidak yakin bagaimana perasaan saya tentang fitur ini, apakah memengaruhi banyak pertanyaan golf lama karena alasan ini tepatnya;)
VisualMelon
1
@IchabodClay semakin buruk, using C=System.Consolemenghemat 3 byte, dan mungkin itulah yang dimaksud @MarkKnol (maaf!), Kelalaian memalukan di pihak saya.
VisualMelon
1
Juga, sesuai aturan, Anda bisa saja memiliki metode itu sendiri alih-alih membuat program yang lengkap. Sesuatu seperti ... ini . (114 byte dengan spasi putih dan semacamnya dihapus. 57 byte dengan bonus.)
Ichabod Clay
1
@IchabodClay memang; Saya lebih suka mengirimkan program lengkap ke fungsi, tidak ada alasan bagus, IO sepertinya merupakan bagian dari kesenangan (saya juga tidak cenderung menggunakan argv). Jangan ragu untuk mengirim jawaban skor yang lebih baik tanpa kendala gila ini!
VisualMelon
4

JavaScript, ES6, 41 byte

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

Ini menciptakan fungsi fyang bisa disebut seperti f(6)dan mengembalikan array yang diperlukan.

Ini menggunakan pendekatan rekursif, di mana setiap iterasi menciptakan array ielemen yang semuanya dihargai idan menggabungkan array yang dikembalikan oleh f(i-1)dengan kondisi berhentii==0 .

Bekerja pada Firefox terbaru.

Pengoptimal
sumber
4

Haskell, 14 = 28 byte / 2

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

contoh output:

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

24 byte tanpa bonus:

f n=[1..n]>>= \r->[r..n]
haskeller bangga
sumber
dapat =<<membantu menghindari spasi? Saya merasa seperti itu bisa, tetapi saya akan terkejut jika Anda belum mempertimbangkan itu.
John Dvorak
@ JanDvorak Jika saya akan menggunakan =<<saya akan membutuhkan tanda kurung untuk lambda
bangga haskeller
Saya bingung kapan tepatnya lambdas membutuhkan tanda kurung. Apakah header lambda memiliki fixity yang sama >>=?
John Dvorak
@ JanDvorak Mereka tidak memiliki fixity; Saya tidak yakin seberapa akurat aturan ini, tapi lambdas hanya dapat muncul di mana operator tidak dapat (mengabaikan bagian): setelah (, [, =, ,, setelah setiap operator, dan sejenisnya
bangga haskeller
Saya kira lambda atau operator tidak dapat muncul sebagai pola? let \x->y = (2+) in (x,y)sepertinya agak mustahil.
John Dvorak
4

Haxe , 53 byte

function l(v)return[for(i in 0...v)for(j in 0...i)i];

Bekerja dengan l (6); karena pemahaman array.
Uji secara online http://try.haxe.org/#741f9

Mark Knol
sumber
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
SeanC
sumber
Anda bisa kehilangan 1 (0,5, secara teknis) byte dengan mengkondensasi For Z=1 TokeFor Z=1To
Taylor Scott
Anda juga dapat mengembun Next:NextkeNext 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}

Tes cepat

> 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
MickyT
sumber
Apa ? Tidak ada TSQL?
Pengoptimal
@Optimizer mungkin nanti :)
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)

Membangun berdasarkan pendekatan rekursif Pengoptimal , kita dapat membangun penurunan yang menurun dengan panjang, seperti [4,3,2,1, 4,3,2, 4,3, 4].

Alih-alih Array(i).fill(i)membuat undefinedsub -nilai dengan nilai yang sama , kami membuat- sub-bidang dengan panjang yang sesuai dengan Array(n).fill()dan kemudian mengubah nilai-nilai ke run menurun menggunakan .map((v,x)=>i-x). Selain itu, kami mendefinisikan dan mengulangi tentang fungsi batin g; fungsi luar fhanya ada untuk menyimpan nilai isaat gberulang.

apsillers
sumber
2

T-SQL, 176 * 0,5 = 88

Karena Anda sepertinya melewatkan T-SQL @Optimizer, ini dia semua itu sangat menyenangkan :).

Beberapa opsi fungsi, fungsi skalar, dan nilai tabel sebaris. Fungsi Skalar menggunakan while untuk mengulang dan mengembalikan string angka, di mana fungsi Inline Table Valued menggunakan CTE rekursif untuk urutan dan mengembalikan tabel. Tentu saja ini tidak akan pernah kompetitif, jadi saya belum menghabiskan banyak waktu bermain golf.

Fungsi Tabel Bernilai Inline, 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

Disebut sebagai berikut

SELECT * FROM dbo.F(5)

Contoh SQLFiddle

Fungsi Skalar, 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

Disebut sebagai berikut

SELECT dbo.G(5)

Contoh SQLFiddle

MickyT
sumber
2

Mathematica, 34 * 0,5 = 17

f=Join@@Table[x,{y,#},{x,#,y,-1}]&
alephalpha
sumber
2

perl, 26 byte

for(1..$n){print"$_ "x$_;}
michael501
sumber
1
Silakan kirim skor Anda. Juga, karena ini adalah kode golf, Anda dapat menyimpan byte dengan menghapus spasi tambahan dan definisi $n.
Alex A.
Ini tidak berjalan untuk saya di bawah Perl 6.
Alex A.
@Alex, apa kesalahannya, bekerja di bawah 5.10
michael501
Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3. Mencobanya di ideone.com.
Alex A.
@Alex, coba ini: C: \ Windows \ system32> perl -e "$ n = 5; untuk (1 .. $ n) {print qq ($ _) x $ _;};" 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
michael501
2

JavaScript (dapat dibaca), 131 byte

Saya baru mengenal Code Golf jadi ini bukan yang terbaik

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 (kurang dapat dibaca), 87 byte

Diminimalkan menggunakan 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}
SirPython
sumber
2

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

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

Di atas nyaris mengalahkan versi non-bonus pada 13 byte:

a\%a<%b<qb=>>
feersum
sumber
2

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

(Dengan sedikit bantuan dari jawaban VisualMelon) Edit: dan komentar 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;}

Tidak Disatukan:

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;
}

Ada versi yang tidak aman yang saya ambil tanpa malu-malu dari jawaban C feersum, tapi saya tidak 100% yakin cocok dengan aturan karena Anda harus mengalokasikan memori sebelum memanggil metode.

C # (tidak aman), 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;}

Disebut sebagai berikut:

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 }

Sesuai saran VisualMelon (terima kasih!), Kode tidak aman dapat dibuat kembali dengan kode aman yang mengurangi ukuran lebih jauh! Masih menimbulkan pertanyaan jika pembuatan array hasil akhir diizinkan dilakukan di luar metode.

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;}
Ichabod Clay
sumber
Kerja bagus! Untuk versi per-alokasi, jauh lebih murah untuk pergi aman dan lulus int[]langsung void A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}- Saya setuju itu mungkin sedikit rapuh, mengenai aturan;)
VisualMelon
Anda tidak perlu membuat pointer lokal untuk versi yang tidak aman, yang memotong 8bytes dengan baik. Juga, saya mungkin kehilangan intinya, tetapi haruskah baris terakhir dari kode panggilan tidak aman itu System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);?
VisualMelon
@VisualMelon Itulah yang saya dapatkan karena tidak memeriksa ulang nama variabel setelah saya menamainya kembali. Terima kasih atas kepala: D. Mengedit jawaban untuk akun untuk versi yang lebih pendek dalam komentar Anda.
Ichabod Clay
Anda dapat memotong sedikit versi yang aman dengan menyinggung panjangnya yang var a=new int[(int)((n/2f)*(n+1))];saya pikir membawanya ke 109
James Webster
Satu lagi dengan menulis ulang calc sebagai:(n*(n+1)/2)
James Webster
1

C #, 116 115 + 33 = 148 byte

Bukan kode terpendek, tapi ... tetap berfungsi: 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();}

Membutuhkan ini di bagian atas file (33 byte):

using System.Collections.Generic;

Versi tidak golf:

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();
}
ProgramFOX
sumber
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
randra
sumber
1
23 * 0.5adalah 11.5, tidak 10.5.
ProgramFOX
@ProgramFOX tangkapan yang bagus. Apakah Anda akan mengedit, atau haruskah saya? Bukan alasan bagus untuk downvote IMO.
John Dvorak
@ JanDvorak Baru saja mengeditnya. Dan saya tidak mengundurkan diri, saya menaikkannya bahkan sebelum saya melihat kesalahan.
ProgramFOX
Sekarang kesalahan telah diperbaiki, haruskah solusi bonus dipindahkan ke bawah?
John Dvorak
-1Byte:, f=.-[:;<@|.@i."0@>:@i.membuat skor sama!
Bolce Bussiere
1

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

Edit hapus; thx @Optimizer

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

Tes di konsol FireFox / FireBug

Q(9)

Keluaran

[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]

Tidak disatukan

Q=o=>{
  for(m=0,r=[];m<o;++m)
    for(n=o;n>m;)
      r.push(n--);
  return r
}
edc65
sumber
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}

Cukup senang dengan yang ini ... Ini sekitar seperempat ukuran aslinya.

f(4) pengembalian:

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

Jawaban lama:

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

Ini adalah pukulan pertama saya di kode golf ... Saya masih ingin mendapatkan bonus 0,5x itu. Ada saran yang disambut!

Disebut dengan f (n).

binormal
sumber
Anda harus cukup baru dalam JavaScript itu sendiri :). (1) Hapus tanda kurung di sekitar argumen d, (2) a=b=c=[]di untuk bagian deklarasi, (3) c[a].map(e=>a)(4)b.push(...c)
Pengoptimal
Saya membuat versi yang lebih pendek sebelum membaca komentar Anda, yang akan saya masukkan dalam posting saya. Pengalaman saya dengan JS sebagian besar terbatas pada manipulasi DOM / style untuk aplikasi web sederhana ... dan saya belum pernah menggunakan salah satu fitur ES6 baru sampai hari ini.
binormal
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;}

Terima kasih kepada VisualMelon untuk melakukan kerja kerasnya! Saya pikir saya akan mencoba menekannya sebanyak mungkin.

(114 byte * 0,5 = 57, jika Anda bersikeras menggunakan .ToArray () untuk mengembalikan int [])

Romen
sumber