Giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay cho một câu đố đang golf Tôi đang làm việc trên bao gồm hai chứ không phải chất béo tìm lời gọi của range
. Tôi rất mới về môn đánh gôn, đặc biệt là về Python, vì vậy tôi có thể sử dụng một vài mẹo.
Các mảnh có liên quan là đây
[x for x in range(n+1,7**6)if`x`==`x`[::-1]*all(x%i for i in range(2,x))]
Giới hạn trên của đầu tiên range
không phải là một sắc nét. Nó phải có ít nhất 98.690, và tất cả con người khác bằng (golf-khôn ngoan, đó là), nhỏ hơn sự khác biệt giữa giới hạn trên và 98.690 thì càng tốt, hiệu suất-khôn ngoan 1 . Tôi đang sử dụng 7 6 (= 117649) vì đây 7**6
là biểu thức Python ngắn nhất tôi có thể đưa ra phù hợp với hóa đơn.
Ngược lại, giới hạn thấp hơn trong lần đầu tiên range
, cũng như cả hai giới hạn ở lần thứ hai, đều vững chắc. IOW, chương trình (ở dạng hiện tại) sẽ tạo ra kết quả không chính xác nếu những giới hạn đó được thay đổi.
Có cách nào để rút ngắn một hoặc cả hai biểu thức
range(n+1,7**6)
range(2,x)
?
BTW, trong trường hợp này, bí danh range
, nói, r
không thu được gì:
r=range;rr
rangerange
EDIT: FWIW, chương trình đầy đủ là thế này:
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)
nên là số nguyên tố palindromic nhỏ nhất lớn hơn n
. Ngoài ra, p
không nên đệ quy. Cảnh báo: Nó đã chậm một cách khó hiểu!
1 Vâng, tôi biết: hiệu suất không liên quan đến môn đánh gôn, nhưng đó là lý do tại sao tôi viết "tất cả những thứ khác đều bình đẳng (đó là thông thái, đó là)". Ví dụ, sự lựa chọn của tôi 7**6
, và không phải là sự thay thế rõ ràng hơn, nhưng hiệu quả kém hơn, "tương đương với golf" 9**9
. Tôi thực sự muốn chạy mã golf của mình, điều đó có nghĩa là không để hiệu suất giảm xuống đến mức phải mất nhiều năm để chạy mã. Nếu tôi có thể giúp nó, tất nhiên.
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()
. Tất nhiên, trong khi tại đó, cũng có thể thay đổixrange(2,x)
đểxrange(2,int(x**.5+1))
và làm thử nghiệm của bạn rất nhanh. Rõ ràng mã này tương đương với mã của bạn, chỉ dài hơn và nhanh hơn.