pengantar
Angka pentagonal ( A000326 ) dihasilkan oleh rumus P n = 0,5 × (3n 2 -n) . Atau Anda bisa menghitung jumlah titik yang digunakan:
Anda dapat menggunakan rumus, atau gif di atas untuk menemukan beberapa angka pentagonal pertama:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...
Selanjutnya, kita perlu menghitung jumlah x angka berurutan.
Sebagai contoh, jika x = 4 , kita perlu melihat P n + P n + 1 + P n + 2 + P n + 3 (yang terdiri dari 4 istilah). Jika jumlah bilangan pentagonal juga merupakan bilangan pentagonal, kita akan menyebut ini a bilangan pentagon pentagonal .
Untuk x = 4 , terkecil jumlah pentagon pentagonal adalah 330
, yang terbuat dari 4 nomor pentagonal berturut-turut: 51, 70, 92, 117
. Jadi, kapan inputnya4
, program fungsi Anda harus keluar 330
.
Tugas
- Ketika diberi bilangan bulat lebih besar dari 1, hasilkan angka pentagon pentagonal terkecil.
- Anda dapat menyediakan fungsi atau program.
- Catatan: Tidak ada solusi untuk mis x = 3 . Ini artinya kalau angka tidak dapat dibuat dari angka 10.000 pentagonal pertama, Anda harus berhenti menghitung dan menghasilkan apa pun yang paling cocok untuk Anda.
- Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Kasus uji:
Input: 2
Output: 1926 (which comes from 925, 1001)
Input: 3
Output: ?
Input: 4
Output: 330 (which comes from 51, 70, 92, 117)
Input: 5
Output: 44290 (which comes from 8400, 8626, 8855, 9087, 9322)
Input: 6
Output: 651 (which comes from 51, 70, 92, 117, 145, 176)
Input: 7
Output: 287 (which comes from 5, 12, 22, 35, 51, 70, 92)
Input: 8
Output: ?
Input: 9
Output: 12105 (which comes from 1001, 1080, 1162, 1247, 1335, 1426, 1520, 1617, 1717)
Input: 10
Output: ?
Juga angka yang lebih besar dapat diberikan:
Input: 37
Output: 32782
Input: 55
Output: 71349465
Input: 71
Output: 24565290
10001-x
x = 3
, yang tidak memiliki solusi?9919
->496458299155
Jawaban:
CJam, 29 byte
Cobalah online.
Butuh beberapa detik untuk berlari.
Penjelasan
Pertama, kita perlu memeriksa berapa bilangan pentagonal yang perlu kita pertimbangkan sebagai jumlah potensial. Jumlah dari 10.000 angka pentagonal pertama adalah
500050000000
. Angka pentagonal pertama yang lebih besar dari itu adalah 577.380.Saya menggunakan program yang sedikit dimodifikasi untuk menemukan input terbesar yang menghasilkan solusi tidak kosong. Ini semua adalah solusi untuk input yang lebih besar dari 9.000:
sumber
Lua, 142 Bytes
Tidak disatukan
Yay untuk membalik tabel!
Perbarui 142 Bytes: Disimpan 10 bytes dengan menghapus panggilan fungsi 'tonumber' yang berlebihan.
sumber
Haskell, 109 byte
Kembali
0
jika tidak ada nomor pentagon pentagonal.Contoh penggunaan (membutuhkan waktu untuk menyelesaikan):
map (#take(10^4)p) [1..10]
->[1,1926,0,330,44290,651,287,0,12105,0]
.Ini lebih atau kurang merupakan implementasi langsung dari definisi: jika jumlah
x
elemen pertama ada dalam daftar, keluarkan, atau coba lagi dengan ekor daftar. Mulailah dengan 10.000 angka pentagonal pertama, berhenti dan kembali0
jika daftar memiliki kurang darix
elemen.sumber
PARI / GP, 71 byte
Saya suka
ispolygonal
fungsi di PARI / GP.sumber
Python 3, 144 byte
Ini membalikkan definisi bilangan pentagonal; jika P (n) = (3n ^ 2-n) / 2, maka P yang diberikan akan menjadi bilangan segi lima iff (1 + sqrt (24 * P + 1)) / 6 adalah bilangan bulat. (Secara teknis, ini juga harus melihat (1-sqrt (24 * P + 1)) / 6, tetapi itu harus selalu negatif.) Juga menggunakan spasi dan tab sebagai dua tingkat indentasi yang berbeda, seperti yang disarankan di sini . Ini tidak menghasilkan apa-apa jika tidak dapat menemukan angka pentagonal pentagonal; Saya percaya tidak apa-apa?
Saya sangat percaya bahwa seseorang yang lebih pintar daripada saya dapat menemukan cara untuk mempersingkat ini lebih, mungkin di sekitar for the loop.
sumber
LabVIEW, 39 Primview LabVIEW
Tidak ada gif dari itu yang berjalan saat ini.
Node matematika dalam loop menciptakan array dari semua angka. Ambil Sub-array, tambahkan elemen, cari nomor itu, jika ditemukan ambil indeks dan hentikan loop.
Input yang tidak valid mengeluarkan angka pentagonal tertinggi.
sumber
R,
114100 byteungolfed (agak)
sumber
Jelly , 30 byte
Kode ini berfungsi dengan versi Jelly ini dan setara dengan kode biner berikut:
Ini jauh melambat dan haus akan memori untuk penerjemah online, karena ia memeriksa 150.000.000 pertama untuk segi lima (149.995.000 kebetulan 10.000 th jumlah pentagonal).
Dengan mempersingkat rentang ke sesuatu yang lebih masuk akal, Anda bisa mencobanya secara online! untuk input yang cukup kecil.
Ide
Hasil yang diketahui tentang bilangan pentagonal adalah bahwa x adalah pentagonal jika dan hanya jika sqrt (24x + 1) - 1 dapat dibagi dengan 6 .
Daripada menghitung 10.000 angka pentagonal pertama, kami mendefinisikan tautan pembantu yang menghilangkan angka-angka non-pentagonal dari array yang diberikan. Mengapa? Karena versi terbaru Jelly yang ada sebelum tantangan ini tidak memiliki cara yang waras untuk memotong daftar ...
Kode
Jelly, 21 byte (tidak bersaing)
Versi terbaru Jelly memiliki dua fitur baru (irisan yang tumpang tindih dan dan penyaringan daftar / persimpangan) dan perbaikan bug, yang memungkinkan jumlah byte jauh lebih rendah.
Kode ini berfungsi dengan baik di komputer desktop saya, tetapi agak lambat untuk batas waktu TIO. Untuk Mencoba secara online! (untuk input yang cukup kecil), kami harus mengurangi rentang awal sekali lagi.
Bagaimana itu bekerja
sumber
Mathematica 85 byte
melakukan pencarian cepat hingga P 10 4 .
sumber
Aksioma, 157 byte
ungolfed dan hasilnya
esplenation: Kita dapat menemukan dan menggunakan hasil "a", lihat di bawah
[gunakan 1 + sqrt (...) karena n> 0]
Ini di atas berarti bahwa jika ada satu n0 sedemikian rupa
dari
Setelah itu kita harus membuktikan bahwa p (n0) = a untuk memastikan (karena tidak selalu demikian)
Tapi trik utamanya adalah melakukan penjumlahan
hanya di awal, dan temukan jumlah elemen x berikutnya hanya menggunakan
dan seterusnya untuk jumlah lainnya (menggunakan di atas dalam pernyataan a: = a + p (j + x) -p (j)). Ini berarti tidak perlu jumlah satu elemen x jumlah di dalam loop ... ..
sumber
Python 2 ,
128124 byteCobalah online!
sumber
Javascript 93 byte
sumber