Saya sedang menyelesaikan tugas, di mana:
Memasukkan:
Angka sebagai bilangan bulat.
Keluaran:
Prime palindromic terbesar terdekat sebagai bilangan bulat.
Saya akan sangat menghargai petunjuk bagaimana membuat solusi saya lebih pendek. Atau arahan jika perubahan pendekatan akan bermanfaat.
golf=lambda l,r=range:next(x for x in r(10**6)if(x==int(`x`[::-1]))&all(x%d for d in r(2,x))and x>l)
palindromik:
x==int(`x`[::-1])
utama:
all(x%d for d in r(2,x))
Jawaban:
Sekarang, untuk beberapa perbaikan besar. Program asli Anda adalah 97 karakter:
Dengan peningkatan di bawah ini, Anda bisa mencapai 90 karakter:
Dengan trik untuk menghilangkan tanda kurung di sekitar pernyataan pemeriksaan palindrome, Anda bisa mencapai 87:
Namun, saya punya solusi dalam 80 karakter. Untuk mendapatkannya, fokuslah pada mengubah gambaran besar, bukan komponen individu. Pikirkan kembali pilihan paling dasar Anda untuk sampai ke titik ini. Kenapa lambda? Mengapa min dari rentang yang difilter? Mungkin ada cara yang lebih baik.
Menggunakan
int()
dalam perbandingan palindrome banyak karakter - dapatkah Anda melihat cara yang lebih pendek untuk berbelokdan
dalam tipe yang sama?
Juga,
and x>l
bit pada akhirnya adalah banyak karakter. Apakah ada cara untuk mempersingkatnya? Hilangkan kebutuhan untuk itu dengan mengubah sesuatu yang lain?Apakah
next
fungsi yang tepat untuk pekerjaan itu? Ingat, ini kode golf, runtime tidak relevan.Fungsi pemeriksaan prima terlihat tepat.
Juga, dan ini hanya estetika, saya tidak suka fungsi aliasing, seperti yang Anda lakukan dengan range, ketika itu tidak menyimpan karakter apa pun, seperti dalam kasus ini.
sumber
x
==x
[:: - 1], selanjutnya untuk indeks [0] ... masih memikirkan dan x> lrange
.