Solusi terbaik yang saya temukan sejauh ini untuk teka-teki kode golf yang saya kerjakan termasuk dua doa yang agak gemukrange
. Saya sangat baru di golf kode, terutama di Python, jadi saya bisa menggunakan beberapa tips.
Fragmen yang relevan adalah ini
[x for x in range(n+1,7**6)if`x`==`x`[::-1]*all(x%i for i in range(2,x))]
Batas atas yang pertama range
bukan yang tajam. Seharusnya setidaknya 98690, dan semua yang lain sama (berdasarkan golf), semakin kecil perbedaan antara batas atas ini dan 98690 semakin baik, berdasarkan kinerja 1 . Saya menggunakan 7 6 (= 117649) karena 7**6
merupakan ekspresi Python terpendek yang dapat saya buat yang sesuai dengan tagihan.
Sebaliknya, batas bawah di yang pertama range
, serta kedua batas di yang kedua, tegas. TKI, program (dalam bentuk saat ini) akan menghasilkan hasil yang salah jika batas tersebut diubah.
Apakah ada cara untuk mempersingkat satu atau kedua ekspresi
range(n+1,7**6)
range(2,x)
?
BTW, dalam hal ini, alias range
, katakanlah, r
tidak memperoleh apa-apa:
r=range;rr
rangerange
EDIT: FWIW, program lengkapnya adalah ini:
p=lambda n:[x for x in range(n+1,7**6)if`x`==`x`[::-1]*all(x%i for i in range(2,x))][0]
p(n)
harus menjadi prime palindromic terkecil yang lebih besar dari n
. Juga, p
jangan rekursif. Peringatan: Ini sudah sangat lambat!
1 Ya, saya tahu: kinerja tidak relevan dalam kode golf, tapi itu sebabnya saya menulis "semuanya sama (golf-wise, that is)". Sebagai contoh, pilihan saya 7**6
, dan bukan alternatif yang "jelas-setara" yang lebih jelas, tetapi berkinerja buruk 9**9
. Saya suka benar - benar menjalankan upaya kode golf saya, yang berarti tidak membiarkan kinerja menurun ke titik yang membutuhkan waktu bertahun-tahun untuk menjalankan kode. Jika saya dapat membantu, tentu saja.
p=lambda n:(x for x in xrange(n+1,7**6)if`x`==`x`[::-1]*all(x%i for i in xrange(2,x))).next()
. Tentu saja, sementara Anda pada saat itu, mungkin juga berubahxrange(2,x)
untukxrange(2,int(x**.5+1))
dan membuat pengujian Anda benar-benar cepat. Jelas kode ini setara dengan kode Anda, lebih lama dan lebih cepat.