Inilah urutan yang saya bicarakan:
{1, 4, 5, 9, 10, 11, 16, 17, 18, 19, 25, 26, 27...}
Mulai dari 1, simpan 1, jatuhkan 2 berikutnya, simpan 2 berikutnya, jatuhkan 3, simpan 3 dan seterusnya. Ya, ini juga ada di OEIS (A064801) !
Tantangan
Diberikan bilangan bulat n>0
, temukan suku ke-9 dari urutan di atas
Uji Kasus
Input -> Output
1->1
22->49
333->683
4444->8908
12345->24747
Ini adalah kode golf sehingga jawaban tersingkat dalam byte menang! Semoga berhasil!
Jawaban:
Java (OpenJDK 8) ,
4544 byteCobalah online!
-1 byte terima kasih kepada @Nevay
Setelah menatap ini sebentar, saya perhatikan sebuah pola. Setiap kali kita menjatuhkan
n
angka, angka berikutnya dalam urutan adalah kuadrat sempurna. Melihat ini, saya secara mental memecah urutan menjadi potongan-potongan nyaman:[[1],[4,5],[9,10,11],...]
Pada dasarnya,i
potongan dimulai dengani*i
, dan beralih ke atas untuki
elemen.Untuk menemukan
n
nomor th dalam urutan ini, kami ingin mencari yang mana potongan nomor itu, dan kemudian posisi mana dalam potongan yang ditempati. Kami kurangi jumlah selisih kamii
darin
sampain
kurang darii
(yang memberi kita potongan kami), dan kemudian hanya menambahkann-1
untuki*i
mendapatkan yang benarposition
di chunk tersebut.Contoh:
sumber
return~-n+i*i;
untuk menghemat 1 byte.Haskell,
484341 byte4 byte tambahan untuk pengindeksan berbasis 1 dan bukan berbasis 0. Pembatasan yang tidak perlu, IMHO.
Cobalah online!
sumber
Python 3 ,
4746 byte1 byte terima kasih kepada Tn. Xcoder.
Cobalah online!
SANGAT cepat untuk angka yang lebih tinggi
sumber
def f(n):a=round((2*n)**.5);return~-n+a*-~a//2
. Meskipun tidak yakin ... Pendekatan cerdas!a*(a+1)
bahkan untuk setiap bilangan bulat. Apakah Python mengeluh tentang pembagian float pada bilangan bulat? Apakah itu mengeluh tentang operasi bitwise di pelampung? Jika tidak:(2*n)**.5+.5|0
.Jelly , 8 byte
Cobalah online!
sumber
Haskell , 33 byte
Fungsi anonim. Digunakan sebagai
((!!)$0:do n<-[1..];[n^2..n^2+n-1]) 1
Cobalah online!
!!
. Ini0:
adalah elemen dummy untuk menyesuaikan dari pengindeksan berbasis 0 ke 1.[n^2..n^2+n-1]
membangun urutan tanpa celah, dimulai dengan kuadratn
dan berisin
angka.do
notasi merangkai rentang dibangun untuk semuan>=1
.sumber
Python 3 , 46 byte
Cobalah online!
sumber
Perl 6 , 43 byte
Menguji
Diperluas:
(1..*).rotor({++$=>++$+1}...*)
menghasilkan:sumber
TeX, 166 byte
Pemakaian
sumber
Javascript,
4338 byteCobalah online!
Saya menggunakan fakta, bahwa untuk setiap angka segitiga ditambah satu, hasilnya adalah angka kuadrat.
Sebagai contoh: angka segitiga adalah 0, 1, 3, 6, 10 ... jadi untuk 1, 2, 4, 7, 11 ... kita amati 1, 4, 9, 16, 25 ... dalam urutan kita .
Jika indeks berada di antara angka-angka yang diketahui ini, elemen dari urutan kami hanya naik satu saja. Misalnya, untuk menghitung hasil untuk 10, kita ambil 7 (sebagai angka segitiga ditambah satu), ambil hasilnya (16) dan tambahkan 10-7 = 3. Dengan demikian, 16 + 3 = 19.
sumber
05AB1E , 12 byte
Cobalah online!
sumber
[0..a-1] + a**2
, hal yang keren di sini, imo adalahÝÁćn+
bukanD<Ýsn+
.cQuents , 27 byte
Cobalah online!
Saat ini port jawaban Python Leaky , saya pikir ada cara yang lebih baik.
sumber
Swift 3 , 72 byte
Port solusi Python saya .
Test Suite.
sumber
C # (Mono) , 164 byte
Cobalah online!
sumber
Mathematica, 37 byte
Penjelasan
Function
yang mengambil bilangan bulat positif#
dan mengembalikan#
urutan angka berurutan.Menghasilkan daftar semua jalan tersebut hingga input
#
Flattens
daftar yang dihasilkan dan mengembalikan#
elemen th.sumber
Perl 5 , 33 + 1 (-p) = 34 byte
Cobalah online!
sumber
Tampio ,
310308 bytePenggunaan:
4:n uni
dievaluasi menjadi9
.Penjelasan:
Dari perpustakaan standar:
sumber
JavaScript (ES6), 33 byte
Solusi rekursif yang terinspirasi oleh pengamatan Xanderhall .
Cobalah
sumber
Python 3 , 50 byte
Cobalah online!
sumber
Mathematica, 82 byte
sumber
Python , 40 byte
Cobalah online!
Mengoptimalkan ekspresi Leaky Nun .
Python , 41 byte
Cobalah online!
Ekspresi rekursif.
sumber
Javascript (ES6)
10098 BytesJenis melakukan ini dengan cepat, jadi saya yakin ada banyak ruang untuk perbaikan, hanya loop dan counter dasar.
sumber
Retina , 27 byte
Cobalah online! Port dari jawaban Python @ LeakyNun. Tahap pertama dan terakhir hanya membosankan konversi desimal ⇔ unary. Tahap kedua berfungsi seperti ini:
((^1|1\2)+)
adalah pencocokan angka segitiga;$1
adalah angka segitiga yang cocok sedangkan$2
indeksnya. Trailing1
artinya cocok dengan angka segitiga terbesar yang benar-benar kurang dari input, sehingga menghasilkan iterasi tepat satu lebih sedikit dari loop Python, yang berarti$1
setara dengana-i
dan$2
untuki-1
dan jumlah merekaa-1
atau cocok dengan dalam kasus itu juga.~-a
sesuai kebutuhan. ($&
hanya mencegah kecocokan agar tidak dihapus dari hasil.) Perhatikan bahwa untuk input yang1
tidak cocok terjadi dan hasilnya sama dengan input. Jika Anda sesat Anda bisa menggunakan^((^1|1\2)*)1
sumber
MATL , 12 byte
Cobalah online!
Penjelasan
sumber
C (gcc) , 38 byte
Menggunakan algoritma @ Xanderhall di sini
Cobalah online!
sumber
PHP,
48 4237 + 1 byteporting dari jawaban Leaky Nun
Jalankan sebagai pipa dengan
-F
atau coba online .pendekatan langsung, 42 +1 byte (porting dari jawaban Leaky Nun lainnya )
Jalankan sebagai pipa dengan
-nR
atau batalkan komentar di atas TiO.solusi iteratif yang lebih lama, 48 +1 byte
sumber