Tugas Anda adalah, dengan nomor input p
, temukan jumlah pesanan meriam positif terkecil p
yang BUKAN 1.
Definisi
Nomor bola meriam (of order p
) adalah nomor yang keduanya:
- An
p
-gonal number ( Lihat halaman ini ). dan
p
nomor piramida -gonal.- The
n
thp
jumlah piramida -gonal adalah jumlah dari 1 sampain
thp
nomor -gonal.- (mis.
4th square pyramid number = 1 + 4 + 9 + 16 = 30
)
- (mis.
Gambar di bawah ini mewakili nomor piramida kuadrat ke-4, sebagai piramida persegi.
Untuk info lebih lanjut, kunjungi tautan ini .
- The
Jumlah cannonball pesanan 3, misalnya, adalah 10, karena itu adalah:
- Angka segitiga keempat (
1 + 2 + 3 + 4 = 10
) - dan nomor piramida segitiga ketiga. (
1 + 3 + 6 = 10
)
Formula
CATATAN: Jika Anda dapat menemukan (atau membuat) formula yang lebih berguna daripada yang saya miliki di sini, silakan posting di sini (atau kirim pesan kepada saya tentang hal obrolan pertanyaan).
- Jika Anda tertarik, rumus untuk angka
n
ke-p
5 adalah:
- Dan
n
thp
jumlah -gonal piramida adalah:
Spesifikasi
p
dijamin lebih besar dari 2.- Program harus memeriksa nilai untuk solusi
p
hingga (dan termasuk)2^16
. Program Anda dapat melakukan apa saja jika tidak ada solusi yang ditemukanp
. - Hanya indeks positif untuk
n
.
Uji kasus
3
output10
(bilangan segitiga ke-4, bilangan segitiga ke-3)4
output4900
(angka kuadrat 70, angka piramid persegi 24)
Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang.
Catatan: Jika Anda memposting solusi, harap sertakan deskripsi tentang bagaimana kode bekerja.
Haruskah saya memulai hadiah untuk solusi yang lebih baik dan tidak menggunakan formula saya?
n
? Jika tidak, berapa kisarann
yang akan Anda gunakan?n
dann
-gonal tidak perlu didefinisikan.Jawaban:
Python 3,
129127 byteFungsi yang mengambil input melalui argumen dan mengembalikan output.
Ini adalah kekuatan kasar yang sangat naif, dan membutuhkan waktu yang sangat lama untuk ukuran sedang
p
; waktu eksekusi akan konyol untuk sesuatu yang mendekati maksimum diberikan untukp
dari2^16
, tetapi tidak ada alasan mengapa program ini tidak akan bekerja, diberikan waktu yang cukup.Mungkin ada cara yang jauh lebih pendek dan lebih cepat untuk melakukan ini, tetapi saya pikir akan lebih baik untuk memposting sesuatu untuk memulai ini.
Bagaimana itu bekerja
Nilai pengembalian
x
diinisialisasi ke2
, dan kemudian program hanya loop atas semua angka piramidal -gonalp
danp
-gonal sesuai pesananx
. Jika angka piramidal -gonalp
dan -gonal saat inip
, dihitung dengan menggunakan rumus, sama dengan satu sama lain dan untukx
, makax
haruslah angka bola meriam yang relevan dan ini dikembalikan. Lain,x
bertambah, dan program mencoba lagi untuk nilai barux
.Dalam hal bermain golf, produk Cartesian digunakan untuk menciutkan dua for-loop untuk bilangan piramidal gonal
p
danp
-gonal menjadi satu loop tunggal, dan rumus-rumus tersebut difaktorkan lebih lanjut untuk menghemat beberapa byte.sumber
JavaScript,
11198 byteungolfed
c tidak reinitialized dalam loop batin karena p berikutnya [b] pasti lebih besar dari g saat ini [c] (jadi kita harus pindah di anyway)
contoh
sumber
C, 107 byte
Tidak digabungkan dengan parameter uji:
Ini menggunakan fakta bahwa bilangan p-gonal ke-n dapat didefinisikan sebagai
n(1+(p-2)(n-1)/2)
dan bilangan piramida adalah jumlah dari bilangan-bilangan di atas.Saya pikir itu bisa golf lebih lanjut, mengingat itu tidak benar-benar perlu untuk variabel
a
diselamatkan.sumber
i
dalam formula Anda angka imajineri
?i
seharusnyan
. Saya memiliki berbagai notasi yang berserakan dalam penelitian saya. Saya tidak bisa membayangkan menggunakan nomor imajiner untuk masalah ini, dan saya pasti tidak bisa membayangkan menggunakannya dalam C.program PHP lama,
115106 byte+16 untuk PHP saat ini, lihat di bawah
<scriptpath>?n=<number>
dengan PHP <5.4, tambahkan
register_globals=1
kephp.ini
(+18?)1
dengan$n=$_GET[n]
. Atau ganti1
dengan$n=$argv[1]
, jalankanphp -f <filename> <number>
.echo$p
dengandie(print$p)
+/- 0 untuk fungsi:
loop selamanya jika tidak menemukan apa pun. Ganti
1
dengan$p<1e6
untuk break at 100k atau dengan$p<$p+1
untuk loop sampai integer overflow. (diuji dengan PHP 5.6)contoh (berfungsi)
contoh keluaran
sumber