(Tantangan diambil dari game multi-pemain (clash of code) di codingame.com )
Tantangan
Temukan istilah ke- n dari urutan berikut: 1, 1, 2, 1, 2, 3, 1, 2, 3, 4...
atau, untuk membuatnya lebih jelas,{1}, {1,2}, {1,2,3}, {1,2,3,4}...
Urutannya terdiri dari rentang gabungan dari 1 hingga x , mulai dari 1, hingga tak terhingga.
Aturan / IO
Input dan output bisa dalam format apa saja, asalkan bisa dibedakan. Masukan dapat diambil dari sumber yang sesuai: STDIN, file, dll ...
Input dapat 0 atau 1 diindeks, dan pengindeksan yang dipilih harus disebutkan dalam posting.
Anda harus menangani setidaknya hingga hasil 255 inklusif (artinya input maksimum 0-diindeks adalah 32640). Apapun yang harus ditangani, jika bahasa Anda mendukungnya.
Ini adalah code-golf
hitungan byte terpendek yang menang!
Uji kasus (pengindeksan berbasis 0)
0 -> 1
1 -> 1
5 -> 3
10 -> 1
59 -> 5
100 -> 10
1001 -> 12
59
,100
, dll)Jawaban:
05AB1E , 5 byte
Program ini 0-diindeks, kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
GNG¹¾¼QiN
adalah pendekatan berulang, tapi itu lebih pintar.Haskell ,
2726 byteCobalah online!
Terima kasih @DanD. untuk -1 byte!
Ini adalah fungsi anonim, menciptakan urutan yang tak terbatas sebuah hanya mengembalikan
n
unsur -th daripadanya:[[1..k]| k<-[1..]]
menghasilkan daftar tak terbatas daftar:[[1],[1,2],[1,2,3],[1,2,3,4],...]
. Untuk menggabungkan ini, kita dapat menulis[z|k<-[1..],z<-[1..k]]
yang menghasilkan[1,1,2,1,2,3,1,2,3,4,...]
dan akhirnya(...!!)
menerima inputn
(notasi tanpa titik) dan mengembalikann
istilah -th (berbasis 0).sumber
concat
dengan lebih pemahaman hanya menghemat 1 byte:([z|k<-[1..],z<-[1..k]]!!)
.JavaScript,
2928 byte-1 byte terima kasih kepada Arnauld!
Menggunakan rumus rekursif 0-diindeks yang ditemukan di OEIS.
Ketika dipanggil dengan 1 argumen seperti yang diharapkan, nilai default dari argumen kedua,
m
adalahundefined
. Namun,-~undefined
mengembalikan 1, yang memungkinkan kita untuk mendapatkan rekursi bergulir tanpa eksplisitm = 1
dalam daftar argumen (terima kasih @Arnauld!)Cuplikan uji:
Atau, untuk jumlah byte yang sama, kita dapat memiliki fungsi kari seperti:
Anda dapat memanggil ini dengan
f(5)()
- ia mengembalikan fungsi, yang ketika dipanggil, mengembalikan hasilnya, seperti yang dijelaskan dalam posting meta ini .sumber
Jelly , 5 byte, 1-diindeks
Cobalah online!
Penjelasan:
sumber
Oktaf, 39 byte
1- indeks berbasis
Penjelasan:
Pertimbangkan urutan ini:
jika kita menghitung jumlah elemen dari urutan yang kita miliki
jadi dengan menggunakan rumus Gauss untuk bilangan segitiga kita bisa membentuk rumus untuk z:
itu adalah persamaan kuadrat jika kita menyelesaikannya untuk n yang kita miliki
Cobalah secara Online!
sumber
Haskell,
2524 byteContoh penggunaan:
((!!)$[1..]>>= \x->[1..x]) 10
->1
. Cobalah online! .Memetakan fungsi make-a-list-from-1-to-x anonim
\x->[1..x]
(built-inenumFromTo 1
lebih lama satu byte) ke daftar tak terbatas[1..]
dan menggabungkan daftar yang dihasilkan ke dalam satu daftar.!!
mengambil elemen ke-n.Terima kasih kepada @ flawr untuk satu byte.
sumber
(!!)$[1..]>>= \x->[1..x]
. Kadang-kadang saya benar-benar berharap ada cara penulisan singkat yang tak ada gunanya\x->[1..x]
:)<$>
yang tidak ada dalam ruang lingkup. Apakah Anda tahu ada kompiler / juru bahasa Haskell online yang menggunakan versi terbaru? haskell.org hanya mengizinkan ekspresi dan Anda tidak dapat membuat tautan ke kode yang Anda masukkan.Oktaf , 39 byte
Cobalah online!
Ini menggunakan pendekatan alternatif.
Untuk misalnya
n=1
iniA=triu(v'+0*v)
menciptakan matriksSaat menghapus semua elemen nol dan menambahkan kolom dengan
A(A>0)
kita mendapatkan urutannya:Maka itu hanya masalah mengurangkan
n
istilah ke - 4 dari urutan itu.sumber
Python ,
3936 byte-3 byte terima kasih kepada Dennis!
Lambda rekursif yang menggunakan pengindeksan berbasis 1.
Cobalah online!
Kami melacak ukuran "naik" saat ini menggunakan
m
. Jikan
lebih kecil dari atau sama denganm
, itu cocok dengan "kenaikan" saat ini, jadi kami mengembalikannya. Namun, jika lebih besar darim
, kita ambilm
darinya, lalu tambahkan 1 kem
dan panggil fungsi secara rekursif (beralih ke kenaikan berikutnya).sumber
R, 25 byte
Indeks ini berbasis 1.
sumber
sequence
jawaban, dan senang melihat ini.Pyth ,
65 byte1 byte disimpan berkat @TheBikingviking!
Ini menggunakan pengindeksan berbasis 0.
Cobalah online!
Penjelasan
sumber
.n
dengans
.Mathematica,
2724 byteTerima kasih @MartinEnder selama 3 byte!
1-diindeks. Ini melempar kesalahan yang aman untuk diabaikan.
Penjelasan
sumber
Join@@
terlalu mahal;)((r=Range)@r@#<>1)[[#]]&
StringJoin
tidak dievaluasi ... Saya menyukainyabrainf * ck, 78 byte
Mengambil input (berbasis 0) dan output sebagai nilai byte.
Anda bisa mengujinya di sini.
Input membutuhkan
\
angka desimal sebelum (misalnya\10
untuk 10). Jika outputnya adalah karakter ASCII yang dapat dicetak, Anda harus melihatnya. Jika tidak, tekan memori tampilan -> dump akhir. Nilai yang dicetak ada di sel ke-3 (nomor sel 2).Penjelasan:
Sel 0 (INPUT): adalah input dan dikurangi 1 saya setiap kali melalui loop.
Sel 1 (RESET): bertambah 1 setiap kali sama dengan TERM. Untuk melakukan ini, setiap kali melalui loop kita menambahkan 1 dan jika mereka tidak sama kita kurangi 1.
Sel 2 (JANGKA): bertambah 1 setiap loop dan diatur ke 0 jika cocok dengan RESET. Untuk melakukan ini, saya hanya menyalin nilai kembali dari HOLD jika sel ini tidak sama dengan RESET.
Sel 3 (EQUAL): digunakan untuk memeriksa apakah RESET dan TERM sama.
Sel 4 (TAHAN): digunakan untuk menyalin nilai RESET dan JANGKA kembali setelah pemeriksaan sama dengan.
sumber
Pyke, 6 byte
Coba di sini!
Diindeks 0.
sumber
R,
4341 byteSunting: Menemukan pendekatan rekursif yang lebih pendek dengan menggunakan A002262 +1 (0 diindeks):
Versi lama:
Formula 1-diindeks dari OEIS.
sumber
Perl 6 , 21 byte
Diindeks 0. Cobalah online!
Bagaimana itu bekerja:
Perl 6 , 21 byte
Diindeks 0. Cobalah online!
Bagaimana itu bekerja:
sumber
Tak satu pun dari solusi ini sesingkat JungHawn Min , tetapi mereka pendekatan alternatif, yang merupakan sesuatu yang saya kira. Keduanya adalah fungsi yang tidak disebutkan namanya yang mengambil input integer positif (1-diindeks) dan mengembalikan integer positif.
Mathematica, 30 byte
Rumus matematika aktual untuk fungsi ini! Dibuat lebih mudah dibaca (sebagian oleh menerjemahkan karakter 3-byte
⌈
,√
dan⌉
):Ceiling[Sqrt[2 * #] - 1/2]
memberi tahu kami sublist mana yang dirujuk oleh input, dari mana kami mengurangi satu untuk memberi tahu kami sublist mana yang berakhir sebelum kita sampai pada input; kemudian((#^2 + #) / 2 &)
menghitung berapa banyak elemen yang muncul di semua sublists sebelum yang kita pedulikan, yang kita kurangi dari input#
untuk mendapatkan jawaban kita. (Beberapa akan melihat rumus yang sudah dikenal(#^2 + #) / 2
untuk angka#
segitiga th;Ceiling[Sqrt[2 * #] - 1/2]
pada dasarnya adalah fungsi terbalik.)Mathematica, 32 byte
Solusi rekursif, pada dasarnya sama dengan jawaban Billywob dan lainnya.
sumber
Brain-Flak , 46 byte
Nol diindeks
Cobalah online!
Stack Clean, 48 byte
Cobalah online!
Penjelasan
Ini adalah versi modifikasi dari fungsi modulo . Alih-alih menggunakan angka konstan sebagai pembagi itu menambah pembagi untuk setiap kali pembagi dikurangi dari itu (sekali per per loop luar iterasi).
Kode Beranotasi
sumber
Java 8,
857355 bytePendekatan rekursif terindeks 0 dengan formula yang disediakan dalam OEIS :
Coba di sini.
Jawaban lama (
8556 byte):Menggunakan rumus lain yang diindeks 0 yang disediakan dalam OEIS :
Coba di sini.
sumber
Perl , 30 byte
29 byte kode +
-p
bendera.Cobalah online!
sumber
MATL, 8 byte
Solusi ini menggunakan pengindeksan berbasis 1
Cobalah di MATL Online
Penjelasan
sumber
v
setelahnya]
QBIC , 21 byte, 1-diindeks
Penjelasan:
Pendekatan yang sedikit lebih menarik, tetapi 10 byte lebih lama:
Program ini terus menerus menghitung jumlah total angka dalam braket ini dan semua yang sebelumnya (
1 at loop 1, 3 at loop 2, 6 at loop 3 ...
). Ketika penghitung itu melebihi indeks yang dicari N, maka kembalilah X dari braket saat ini, di mana X adalah N dikurangi jumlah penghitung sebelumnya.sumber
Ruby, 30 byte
Pengindeksan berbasis 1
sumber
R, 37 byte
Mengambil input dari
n
, dan membuat urutan untukn
urutan pertama . Ini membuatnya agak tidak efisien pada input yang lebih tinggi, tetapi harus baik-baik saja. Kemudian mengembalikann
entri -th, 1-diindeks.Menggunakan trik kecil yang menyenangkan dengan memulai urutan dengan
T
, yang merupakanTRUE
atau1
secara default.sumber
C11, 48 byte
Cobalah online!
Juga berfungsi di C ++ dan Java.
Alternatif untuk jumlah byte yang sama:
sumber
brainfuck, 141 byte
Saya tahu saya terlambat untuk mendapatkan hadiah, tetapi saya hanya ingin melihat berapa banyak algoritma yang saya pikir akan berakhir.
Program ini tidak diindeks.
Cobalah online
255
, ubah Ukuran sel (Bit) menjadi 16 atau 32 .\5
untuk input5
.\999
Penjelasan:
Ini menunjukkan program dipecah secara bertahap, menunjukkan apa yang terjadi untuk input
5
.#
ditempatkan di lokasi dump memori yang ideal untuk juru bahasa.Anda mungkin ingin menggunakan kotak centang Dump Memory at char:
#
jika menjalankan versi ini. Ini akan membuang memori pada saat memukul#
, memungkinkan Anda untuk melihat nilai pada rekaman jika itu adalah karakter yang tidak diinginkan, atau untuk melihat apa yang terjadi pada langkah apa pun yang Anda inginkan. Sel yang digunakan pointer akan dicetak tebal.Cobalah online
#
Catatan:
>
di awal. Jumlah yang diperlukan dapat bervariasi tergantung pada nilai input, tetapi O (1).sumber
tinylisp (repl), 90 byte (0-diindeks)
Atau, non-bersaing (menggunakan fitur yang dilakukan setelah tantangan ini diposting), 80 byte :
Baris pertama mendefinisikan fungsi pembantu
r
, dan baris kedua adalah fungsi tanpa nama yang mengambiln
dan mengembalikan suku ke-n dari urutan tersebut. Saya telah menetapkan ini sebagai pengiriman repl karena autocompletes tersebut mengisi tanda kurung di akhir setiap baris, bukan hanya di akhir program. Dengan peringatan itu, berikut adalah versi yang dimodifikasi untuk berfungsi di Coba online , dan inilah versi yang tidak diklik berjalan terhadap input 0 hingga 54.Penjelasan
Saya akan menggunakan versi yang tidak bersaing di sini. Satu-satunya perbedaan adalah bahwa versi resmi harus menerapkan penambahan sebagai dua pengurangan.
sumber
C, 54 byte
Bukan solusi C terpendek, tetapi memiliki manfaat berjalan dalam waktu yang konstan (tidak ada loop, hanya matematika). Ini menggunakan pengindeksan berbasis nol:
Tidak Disatukan:
Uji dengan:
sumber
C, 103 byte
Untuk pemula tidak apa-apa, saya pikir :).
atau cara yang diformat
sumber
n,c,i,j
sebagai global, dijamin mereka diinisialisasi ke 0, yang tidak berlaku untuk penduduk setempat.n
adalah input atau nomor ke-n dalam urutan,c
adalah penghitung,i
danj
merupakan elemen loop;j
akan menjadi 1 kemudian 2 kemudian 3 sementarai
akan 1 kemudian 1,2 lalu 1,2,3 dan seterusnya. @ Qwerp-Derpdc , 21 byte, pengindeksan berbasis 0
Coba program dc online!
Penjelasan:
Bagian atas tumpukan sekarang memegang indeks k dari angka segitiga terbesar yaitu <= n.
Program dc ini dapat dikonversi menjadi skrip bash berukuran kompetitif:
Utilitas Bash + Unix, 28 byte, pengindeksan berbasis 0
Coba program bash online!
sumber
C,
8144 bytemetode iteratif lurus, 0 diindeks, dan dengan pijatan lembut;
Cobalah online!
sumber