Di sini 100 angka pertama dari urutan yang mudah:
0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226
Bagaimana cara kerja urutan ini?
n: 0 1 2 3 4 5 6 7 8 9 10 11 12
0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15,
0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22
a(0) = 0
- Untuk setiap ganjil
n
(diindeks 0), inia(n-1) + X
(di manaX=1
dan bertambah 1 setiap kali diakses) - Untuk setiap even
n
(0-diindeks), itua(n-1) - 1
Tantangan:
Satu dari:
- Diberikan integer input
n
, outputn
nomor ke-10 dalam urutan. - Diberikan integer input
n
, outputn
angka pertama dari urutan. - Keluarkan urutan tanpa batas tanpa mengambil input ( atau mengambil input kosong yang tidak digunakan ).
Aturan tantangan:
- Input
n
dapat berupa 0 atau 1-diindeks. - Jika Anda menampilkan (bagian dari) urutan, Anda dapat menggunakan daftar / larik, mencetak ke STDOUT dengan pembatas apa pun (spasi, koma, baris baru, dll.). Panggilanmu.
- Harap sebutkan mana dari tiga opsi yang Anda gunakan dalam jawaban Anda.
- Anda harus mendukung setidaknya 10.000 nomor pertama (nomor 10.000 adalah
12,497,501
).
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika memungkinkan.
Kasus uji:
Pastebin dengan 10.001 angka pertama dalam urutan. Jangan ragu memilih yang Anda inginkan.
Beberapa angka yang lebih tinggi:
n (0-indexed) Output:
68,690 589,772,340
100,000 1,249,975,000
162,207 3,288,888,857
453,271 25,681,824,931
888,888 98,765,012,346
1,000,000 124,999,750,000
ÎGDN+D<
menghasilkan urutan, tetapi meraih elemen ke-n tampaknya ... sulit dalam 3 byte.Oktaf , 32 byte
Cobalah online!
Menghasilkan angka ke-n, diindeks 0. Menggunakan rumus yang sama dengan beberapa jawaban lainnya.
sumber
APL (Dyalog Unicode) ,
1612 byte SBCSFungsi awalan diam-diam anonim. Diindeks 0.
Cobalah online!
+/
jumlah dari⊢↑
n
elemen pertama∘∊
dari ϵ terdaftar (diratakan)¯1,¨⍨
negatif-satu-ditambahkan ke masing-masing⍳
n
ɩ ndices pertama (0 hinggan
–1sumber
Jelly , 6 byte
Tautan monadik yang menerima (1-diindeks)
n
yang kembalia(n)
.Cobalah online!Atau lihat test-suite
Bagaimana?
sumber
PHP ,
7364555147 byteMetode pertama
Jawaban golf kode pertama!
Saya yakin ada trik PHP untuk membuatnya lebih pendek dan matematika mungkin dapat ditingkatkan.
Mengambil n sebagai argumen pertama dan menampilkan nomor ke-n dalam urutan.
Mengurangi 9 byte dengan menghapus "$ x = 0;" dan "$ i = 0".
Minus 9 byte, terima kasih kepada @Kevin Cruijssen yang memperbaiki perulangan for dan kehilangan tag akhir.
Dikurangi 1 byte menggunakan bitwise atau "|" daripada "(int)"
Mengurangi 3 byte berkat @ Dennis karena Anda dapat menghapus tag dengan menjalankannya dari baris perintah dengan "php -r 'code here'"
Cobalah online!
Metode kedua
Cocokkan jawaban saya sebelumnya dengan metode yang sama sekali baru!
Menggunakan XOR dan operator tenary untuk beralih antar jumlah dalam loop.
Sunting: Ini tidak berfungsi untuk n = 0 dan saya tidak tahu mengapa. $ i tidak ditugaskan jadi karena itu harus 0, oleh karena itu loop
($i<$argv[1])
harus gagal(0<0==false)
, maka $ x yang tidak ditugaskan harus output sebagai 0 dan bukan 1.Cobalah online!
Metode ketiga
Mengubah rumus excel @Wernisch dibuat ke PHP memberikan solusi 47 byte
Cobalah online!
sumber
?>
. Menghapus$x=0
dan$i=0
memang diizinkan (jika tidak,$x=$i=0
akan lebih pendek juga). Juga, loop dapat disingkat menjadifor(;$i<$y+1;)$x+=$i++;
. Yaitu total -15 byte. Selamat menikmati! :)R , 35 byte
Cobalah online!
Saya pikir ini adalah alternatif yang menarik untuk jawaban @ JayCe karena itu tidak port dengan sangat baik ke bahasa tanpa dukungan built-in untuk matriks, dan kebetulan sama seperti golf.
1-diindeks, mengembalikan
n
elemen pertama dari urutan.Bagaimana itu bekerja:
rbind(n<-1:scan(),-1)
membangun matriks berikut:Karena R menyimpan matriks dalam urutan kolom-utama, jika kita mengonversi ini menjadi
vector
, kita akan mendapatkan vektoryang jika kita mengambil jumlah kumulatif, kita akan dapatkan
yang merupakan urutan, hanya tanpa yang utama
0
.diffinv
untungnya menambahkan nol di depan, jadi kami mengambil nilai pertaman-1
dari matriks dandiffinv
mereka, mendapatkan nilai pertaman
dari urutan.sumber
diffinv
kepada saya!R ,
3534 byteCobalah online!
Opsi keluaran pertama. Rumus yang sama dengan banyak jawaban lain (saya ingin mengarahkan ke jawaban pertama yang menyediakan rumus, saya tidak tahu yang mana).
Opsi output kedua dan ketiga di bawah ini:
R , 43 byte
Cobalah online!
R , 51 byte
Cobalah online!
sumber
Matlab / Oktaf,
3126 byte5 byte disimpan thx ke Luis Mendo!
sumber
fix
sebagai gantifloor
, dann/2+.5
bukannyaceil(n/2)
fix()
dan tidak berharap1:n/2+.5
untuk bekerja - begitu banyak hal yang bisa salah, tetapi mereka sebenarnya tidak :)Java (JDK 10) , 20 byte
Cobalah online!
Port of TFeld's Python 2 anwser , jadi beri mereka upvote! ;)
sumber
QBasic 1.1 , 49 bytes
1-diindeks.
sumber
QBasic 1.1 , 30 byte
Menggunakan algoritma TFeld. Diindeks 0.
sumber
QBasic, 31 byte
Solusi just-implement-the-spec datang sedikit lebih lama dari solusi Erik .
Output ini tanpa batas. Untuk keperluan menjalankannya, saya sarankan untuk mengubah baris terakhir ke sesuatu seperti
LOOP WHILE INPUT$(1) <> "q"
, yang akan menunggu penekanan tombol setelah setiap entri urutan kedua dan keluar jika tombol ditekanq
.sumber
C # (.NET Core) , 56 byte
-2 byte terima kasih kepada Kevin Crujssen
Cobalah online!
1 diindeks. Kembali
a(n)
Tidak Digolkan:
sumber
i=1;for(;i<n;i++)
bisai=0;for(;++i<n;)
dani%2==0
bisai%2<1
.do-while
akan memeriksa setelah menyelesaikan iterasi pertama. :)if
denganfor
-loop. Misalnya:if(t>0)for(i=0;i<l;i++)
untukfor(i=0;t>0&i<l;i++)
. Saya hampir tidak pernah bisa menggunakan ini dalam jawaban saya.Sekam ,
1198 byteMenyimpan satu byte berkat H.PWiz.
Keluaran sebagai daftar tak terbatas.
Cobalah online!
Penjelasan
sumber
Dodos , 69 byte
Cobalah online!
Entah bagaimana ini adalah jawaban terpanjang.
Penjelasan.
sumber
Arang , 15 byte
Cobalah online! Diindeks 0. Tautan adalah untuk mengucapkan versi kode. Rumusnya mungkin lebih pendek, tapi apa yang menyenangkan dari itu? Penjelasan:
sumber
JavaScript,
494845 byteCobalah online!
Tidak secantik jawaban @tsh, tapi milikku bekerja untuk nomor yang lebih besar.
Dan sekarang terima kasih @tsh, untuk
eval
solusinya!sumber
<=x+1
bisa<x+2
x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')
harus lebih pendek.eval
mengembalikan nilai yang dimodifikasi terakhir? Saya masih belum sepenuhnya mengerti apa yang bisa dilakukannya.do
pernyataan di versi yang lebih baru).Melewati 93, 26 byte
Berjalan tanpa batas
Coba secara online , meskipun output menjadi sedikit miring dan turun kembali setelah x = 256, mungkin TIO tidak dapat menangani karakter di atas U + 256. Berfungsi dengan baik di https://www.bedroomlan.org/tools/befunge-playground (sayangnya hanya Chrome. Dengan Firefox, endline dihapus saat runtime, karena alasan tertentu ...)
sumber
J , 17 byte
Sebuah port dari solusi APL Adám.
Cobalah online!
sumber
Pyth , 8 byte
Mengembalikan
n
nomor th dalam urutan, 0-diindeks.Cobalah onlinePenjelasan, dengan contoh untuk
n=5
:sumber
Perl 6 ,
3826 byteCobalah
Berdasarkan reverse engineering jawaban Python TFeld .
Cobalah
Diperluas
38 byte (generator urutan):
Perhatikan bahwa ini memiliki manfaat yang dapat Anda sampaikan
*
untuk mendapatkan seluruh urutan, atau meneruskan dalam Rentang untuk menghasilkan nilai-nilai ganda secara lebih efisien.26 byte (perhitungan langsung):
sumber
05AB1E , 8 byte
Cobalah online!
Berdasarkan pendekatan Jonathan Allan's Jelly (yang mungkin didasarkan pada OP mengedit pertanyaan dengan definisi lain dari urutan), jadi 1-diindeks.
sumber
I
bukan¹
), tetapi pendekatan umum dan byte-count persis sama:;<LO>IÉ-
Cembung ,
109 byteCobalah online!
Berdasarkan pendekatan Jonathan Allan's Jelly (yang mungkin didasarkan pada OP mengedit pertanyaan dengan definisi urutan lainnya). 1-diindeks.
Penjelasan:
sumber
Jelly , 6 byte
Kembalikan
n
angka pertama .Cobalah online!
sumber