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
1
hinggan
- Setiap bilangan bulat dari
1
ken
harus diulangx
kali di manax
nilai 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 kode-golf sehingga pemenang adalah kode terpendek dalam byte.
Bonus
Lipat gandakan skor Anda dengan 0.5
jika 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]
sumber
/⍨⍳n
Ruby (rekursif), 41 byte * 0,5 = 20,5
Atau menggunakan lambda (seperti yang direkomendasikan oleh histokrat dan Ventero): 34 byte * 0,5 = 17
(panggil menggunakan
r[argument]
)sumber
n=->x,i=1{...n[x,i+1]...
) dan beberapa lagi dengan[*i..n]
.r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Pyth , 9 byte * 0,5 = 4,5
Dengan bantuan dari @FryAmTheEggman
Cobalah online.
Penjelasan
dimana
Q
inputnyasumber
Haskell, 31 karakter = skor 15,5
27 karakter tanpa bonus
Dipukuli oleh Proud Haskeller
sumber
g n = [y|x<-[n,n-1..1],y<-[x..n]]
C, 22 = 44 byte * 0,5
Fungsi ini
h
mengambil dua parameter. Yang pertama adalahint
menentukan n . Yang kedua adalahint*
yang merupakan buffer output.Program uji
sumber
Pyth -
1510 * .5 = 5Cobalah 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:
sumber
CJam,
1215 byte * 0,5 = 7,5Ini adalah program STDIN-ke-STDOUT lengkap. Ini menggabungkan akhiran peningkatan
1 ... n
jangkauan, yang memastikan bahwa tidak ada dua angka yang berdekatan yang identik.Uji di sini.
sumber
Python 2, 53 byte * 0,5 = 26,5
Tanpa malu-malu meminjam ide @ VisualMelon
sumber
Haskell, 34 byte * 0,5 = 17
Itulah pertama kalinya saya menggunakan Haskell untuk bermain golf. Panggil dengan
g <number>
.sumber
Bash + coreutils, 28/2 = 14
Tanpa malu-malu mencuri ide dan golf @ pgy :
Bash murni (tanpa coreutils), 30/2 = 15
Eval, melarikan diri dan ekspansi neraka:
sumber
GolfScript (14 byte * 0,5 = skor 7)
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:
yang menempatkan input
x
ke dalam array dan kemudian berlaku dua kali{,{x\-}/}%
, yang memetakan setiap elemen dalam array untuk menghitung mundur dari banyak elemen darix
.sumber
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.
Lebih mudah dibaca:
Contoh output:
sumber
System.Console
adalah statis, Anda tidak dapat menetapkannya ke variabel, tetapi dalam C # 6 atau apa pun yang berikutnya, Anda akan dapat melakukanusing 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;)using C=System.Console
menghemat 3 byte, dan mungkin itulah yang dimaksud @MarkKnol (maaf!), Kelalaian memalukan di pihak saya.JavaScript, ES6, 41 byte
Ini menciptakan fungsi
f
yang bisa disebut sepertif(6)
dan mengembalikan array yang diperlukan.Ini menggunakan pendekatan rekursif, di mana setiap iterasi menciptakan array
i
elemen yang semuanya dihargaii
dan menggabungkan array yang dikembalikan olehf(i-1)
dengan kondisi berhentii==0
.Bekerja pada Firefox terbaru.
sumber
Haskell, 14 = 28 byte / 2
contoh output:
24 byte tanpa bonus:
sumber
=<<
membantu menghindari spasi? Saya merasa seperti itu bisa, tetapi saya akan terkejut jika Anda belum mempertimbangkan itu.=<<
saya akan membutuhkan tanda kurung untuk lambda>>=
?(
,[
,=
,,
, setelah setiap operator, dan sejenisnyalet \x->y = (2+) in (x,y)
sepertinya agak mustahil.Haxe , 53 byte
Bekerja dengan l (6); karena pemahaman array.
Uji secara online http://try.haxe.org/#741f9
sumber
vba, 76 * 0,5 = 38
sumber
For Z=1 To
keFor Z=1To
Next:Next
keNext x,Z
R, 44 * .5 = 22
Tes cepat
sumber
JavaScript, ES6, 66 byte * 0,5 = 33
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)
membuatundefined
sub -nilai dengan nilai yang sama , kami membuat- sub-bidang dengan panjang yang sesuai denganArray(n).fill()
dan kemudian mengubah nilai-nilai ke run menurun menggunakan.map((v,x)=>i-x)
. Selain itu, kami mendefinisikan dan mengulangi tentang fungsi bating
; fungsi luarf
hanya ada untuk menyimpan nilaii
saatg
berulang.sumber
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
Disebut sebagai berikut
Contoh SQLFiddle
Fungsi Skalar, 220 * .5
Disebut sebagai berikut
Contoh SQLFiddle
sumber
Mathematica, 34 * 0,5 = 17
sumber
perl, 26 byte
sumber
$n
.Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3
. Mencobanya di ideone.com.JavaScript (dapat dibaca), 131 byte
Saya baru mengenal Code Golf jadi ini bukan yang terbaik
JavaScript (kurang dapat dibaca), 87 byte
Diminimalkan menggunakan jscompress.com
sumber
TECO, 25 byte * 0,5 = 12,5
Di atas nyaris mengalahkan versi non-bonus pada 13 byte:
sumber
C #,
11499 * 0,5 = 49,5 byte(Dengan sedikit bantuan dari jawaban VisualMelon) Edit: dan komentar James Webster
Tidak Disatukan:
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
Disebut sebagai berikut:
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
sumber
int[]
langsungvoid 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;)System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);
?var a=new int[(int)((n/2f)*(n+1))];
saya pikir membawanya ke 109(n*(n+1)/2)
Bash dengan seq, expr dan xargs = 59/2 = 29.5
Simpan dan jalankan dengan nomor sebagai argumen pertama.
sumber
C #,
116115 + 33 = 148 byteBukan kode terpendek, tapi ... tetap berfungsi: P
Membutuhkan ini di bagian atas file (33 byte):
Versi tidak golf:
sumber
J, 23 * 0,5 = 11,5
J, 11
sumber
23 * 0.5
adalah11.5
, tidak10.5
.-1
Byte:,f=.-[:;<@|.@i."0@>:@i.
membuat skor sama!JavaScript (ES6) 29 (58 * 0,5)
Edit hapus; thx @Optimizer
Tes di konsol FireFox / FireBug
Keluaran
Tidak disatukan
sumber
ECMAScript6, 67 * 0,5 = 33,5 byte
Cukup senang dengan yang ini ... Ini sekitar seperempat ukuran aslinya.
f(4)
pengembalian:Jawaban lama:
Ini adalah pukulan pertama saya di kode golf ... Saya masih ingin mendapatkan bonus 0,5x itu. Ada saran yang disambut!
Disebut dengan f (n).
sumber
d
, (2)a=b=c=[]
di untuk bagian deklarasi, (3)c[a].map(e=>a)
(4)b.push(...c)
C #, 108 byte * 0,5 = 54
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 [])
sumber