Tugas Anda cukup sederhana, hitung elemen ke- A1 A190810 .
Elemen A190810 dihitung berdasarkan aturan ini:
- Elemen pertama adalah 1
- Urutannya meningkat
- Jika
x
terjadi dalam urutan, maka2x+1
dan3x-1
juga lakukan
Anda dapat menggunakan pengindeksan berbasis 1 atau 0, tetapi jika Anda menggunakan pengindeksan berbasis 0, harap katakan dalam jawaban.
Uji kasus
a(1) = 1
a(2) = 2
a(3) = 3
a(4) = 5
a(5) = 7
a(10) = 17
a(20) = 50
a(30) = 95
a(55) = 255
Karena ini adalah kode-golf, jawaban tersingkat dalam byte menang!
x ϵ A → (2*x) + 1 ϵ A
danx ϵ A → (3*x)-1 ϵ A
, di manaϵ
berarti "adalah anggota" dan→
dapat dipahami sebagai "menyiratkan".Jawaban:
Jelly , 16 byte
Sangat tidak efisien. Cobalah online!
Bagaimana itu bekerja
sumber
Python 2,
888372 byteAnda mungkin ingin membaca program dalam jawaban ini dalam urutan terbalik ...
Lebih lambat dan lebih pendek, terima kasih untuk Dennis:
Cobalah online
Ini tidak berjalan secepat, tetapi lebih pendek ( 83 byte .) Dengan menyortir dan menghapus duplikat setiap iterasi, serta menghapus elemen pertama, saya menghapus kebutuhan akan indeks ke dalam daftar. Hasilnya hanyalah elemen pertama setelah
n
iterasi.Saya mungkin telah bermain golf dengan Dennis. : D
Cobalah online
Versi di bawah ini ( 88 byte ) berjalan sangat cepat, menemukan elemen ke-500000 dalam waktu sekitar dua detik.
Sederhana saja. Hitung elemen daftar hingga ada tiga kali lebih banyak elemen daripada
n
, karena setiap elemen yang ditambahkan dapat menambahkan paling banyak 2 elemen lebih unik. Kemudian menghapus duplikat, mengurutkan, dan mencetakn
elemen ke - th (diindeks nol.)Cobalah online
sumber
Python 2, 59 byte
Berdasarkan jawaban Python @ mbomb007 . Uji di Ideone .
sumber
min
adalah O (n) sementara pengindeksan daftar adalah O (1) , jadi solusi ini setidaknya O (n²) ...Haskell,
767369 byteMenggunakan indeks berbasis 0. Contoh penggunaan:
(filter t[1..]!!) 54
->255
.Alih-alih membangun daftar dengan memasukkan berulang kali
2x+1
dan3x-1
seperti yang terlihat di sebagian besar jawaban lain, saya memeriksa semua bilangan bulat dan memeriksa apakah mereka dapat dikurangi menjadi1
dengan berulang kali menerapkan(x-1) / 2
atau(x+1) / 3
jika dapat dibagi.sumber
f=filter t[1..]!!
), karena saya tidak berpikir ini benar.Haskell,
7774 byteIni menyediakan fungsi
a
untuk entri ke-n. Ini nol diindeks. Atau,a=nub$f[1]
akan membuat seluruh daftar (malas).Ini adalah varian daftar
Set
kode Reinhard Zumkeller .sumber
y
bukanxs
untuk menyelamatkan dua byte? Juga, saya percaya bahwa Anda mungkin dapat memotong baris terakhir untuk sesuatu seperti(!!)$nub.f[1]
(x:xs)
, benar-benar lupa itu, terima kasih.Python 2,
8884 byteUji di Ideone .
sumber
Pyth,
2019 byteCobalah online. Suite uji.
Menggunakan pengindeksan berbasis nol.
sumber
1
dan itu jelas tidak berhasil.Brachylog , 45 byte
Menghitung
N = 1000
sekitar 6 detik di mesin saya.Ini 1-diindeks, misalnya
Penjelasan
Predikat utama:
Predikat 1:
Anda mungkin memperhatikan bahwa kami tidak memberikan input apa pun ke predikat 1 saat kami menelepon
y - Yield
. Karena propagasi kendala, ia akan menemukan input yang tepat setelah mencapai1.
klausa yang akan menyebarkan nilai input yang benar.sumber
MATL,
19, 1817 byteIni adalah algoritma yang sangat tidak efisien. Interpreter online kehabisan memori untuk input yang lebih besar dari 13.
Satu byte disimpan, terima kasih kepada Luis Mendo!
Cobalah online!
Versi ini lebih panjang, tetapi lebih efisien (21 byte)
Cobalah online
Penjelasan:
Cara logis untuk melakukannya, adalah menambahkan elemen ke array sampai cukup lama untuk mengambil elemen ke-i. Begitulah cara kerja yang efisien. The Golfy (dan tidak efisien) cara untuk melakukannya, adalah untuk hanya meningkatkan ukuran array i kali.
Jadi pertama, kami menentukan awal array yang:
1
. Kemudian kita menukar dua elemen teratas, sehingga input ada di atas.w
. Sekarang, kita mengulang melalui input dengan:"
. Jadi saya kali:Sekarang, kita memiliki deretan raksasa urutan. (Cara lebih dari yang dibutuhkan untuk menghitung) Jadi kita berhenti mengulang
]
,, dan ambil nomor ke-i dari array ini denganG)
(1-diindeks)sumber
1`tEQy3*qvuStnG<]G)
. Kondisi loop adalahtnG<
(keluar ketika array sudah memiliki ukuran yang diperlukan)for
versi -loop Anda dapat mengambil input dalam unary sebagai string dan menghapus:
JavaScript (ES6), 63 byte
Mungkin menyerah dengan cepat karena rekursi.
sumber
Retina, 57
Cobalah online!
Diindeks 0. Mengikuti algoritme yang sering digunakan: hapus nilai minimum dari set saat ini, panggil
x
, dan tambahkan2x+1
dan3x-1
setel beberapa kali sama dengan input, maka angka yang memimpin adalah hasilnya. "Set" di Retina hanyalah daftar yang berulang kali disortir dan dibuat hanya mengandung elemen unik. Ada beberapa bit licik ditambahkan ke algoritma untuk golf, yang akan saya jelaskan setelah saya punya waktu lagi.Terima kasih banyak untuk Martin karena bermain golf sekitar 20 byte!
sumber
Clojure,
114108 byteSaya tidak akan terkejut jika ini bisa golf / dikurangi dengan jumlah yang signifikan tetapi
set
tidak mendukung dan benar-benar melukai pikiran saya.Coba online
Versi dengan spasi:
sumber
05AB1E,
1817 byteMenggunakan pengodean CP-1252 .
Penjelasan
Cobalah online untuk jumlah kecil
Sangat lambat.
Menggunakan pengindeksan berbasis 0.
sumber
C ++, 102 byte
Fungsi lambda ini membutuhkan
#include <map>
danusing std::map
.Di
map
sini hanya kumpulan kunci; nilai-nilai mereka diabaikan. Saya menggunakanmap
untuk mendapatkan manfaat dari kode singkat untuk dimasukkan:Berkat urutan terurut
map
, elemen terkecil diekstraksi olehk.begin()->first
.sumber
set
dan initializer daftar:[](int i){int t;set<int>k{1};for(;i--;k.erase(t))t=*k.begin(),k.insert({t*2+1,t*3-1});return t;};
.Sebenarnya, 27 byte
Cobalah online!
Program ini menggunakan pengindeksan berbasis 0. Pendekatan ini sangat kasar, jadi jangan berharap itu bekerja di penerjemah online untuk input yang lebih besar.
Penjelasan:
sumber
CJam (25 byte)
Demo online . Perhatikan bahwa ini menggunakan pengindeksan berbasis nol.
Ini menggunakan pendekatan yang mirip dengan kebanyakan: menerapkan waktu transformasi
n
dan kemudian mengurutkan dan mengekstrakn
item th. Sebagai anggukan efisiensi, deduplikasi diterapkan di dalam loop dan penyortiran diterapkan di luar loop.sumber
1ari{(_2*)\3*(@||$}*0=
(Juga jauh lebih efisien.)Retina , 48 byte
Cobalah online!
Terinspirasi oleh jawaban nimi, saya pikir saya akan mencoba pendekatan yang berbeda untuk Retina, memanfaatkan backtracking mesin regex untuk mencari tahu apakah ada nomor (tidak diperhatikan) dalam urutan atau tidak. Ternyata ini dapat ditentukan dengan regex 27 byte, tetapi memanfaatkannya biayanya lebih sedikit, tetapi masih berakhir lebih pendek daripada pendekatan generatif.
Berikut solusi 48 byte alternatif:
Dan menggunakan I / O unary kita bisa melakukan 42 byte, tapi saya mencoba menghindarinya dan jawaban Retina lainnya menggunakan desimal juga:
sumber
Ruby, 70 byte
Penjelasan
sumber
*1
trik rapiJ, 31 byte
Menggunakan pengindeksan berbasis nol. Memori sangat tidak efisien.
Penjelasan
sumber
Oktaf, 68 byte
sumber
;end
Perl,
173132 bytes +1 untuk -n = 133Tidak Disatukan:
Saya mungkin bisa melakukan lebih baik jika saya memikirkannya lebih lanjut, tetapi inilah yang saya hasilkan setelah beberapa menit. Pertama kali saya bermain golf, jadi ini cukup menyenangkan!
Terima kasih kepada @Dada dan @ TùxCräftîñg (dan sekelompok kecil optimasi byte) untuk -40 byte
sumber
my
s,return
danprint
(Tidak dapat menguji, tidak memiliki perl)return
. Theprint
dapat menggantikan olehsay
. Sebagian besarmy
tidak diperlukan (Anda hanya perlu satu sebelum$a
dalam fungsi saya pikir. Jangan initialize atau declare@b
. Anda mungkin dapat drop inisialisasi$i
jika Anda melakukan$i++
pada awal sementara bukan di akhir.pop
Adalah lebih pendek daripada itushift
. Ingatlah bahwa ada lebih banyak hal untuk bermain golf daripada hanya menghilangkan spasi putih dan baris baru ...JavaScript (ES6), 58
Kurang golf
Uji
Tentang waktu dan memori: elemen 500000 dalam ~ 20 detik dan 300MB yang digunakan oleh FireFox 64 bit alpha saya
sumber