Perl, 173
Hãy để tôi thêm một giải pháp vô dụng. Giải pháp này chậm đến mức thậm chí không thể xuất ra bất cứ thứ gì qua số lạ đầu tiên. Tôi dám nói đó là cách chậm nhất trong tất cả các giải pháp ở đây.
$n=<>;$i=2;while($n){$b=qr/^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+/;$_='x'x3x$i;if(/$b/&&($+[0]>$i)&&!/$b\1{2}$/){print"$i\n";$n--}$i++}
Bản giới thiệu
Mã tương tự được viết bằng Java (mà tôi thấy thoải mái hơn) thậm chí không thể nhận ra số lạ thứ 2 (836) và tôi đã đưa số trực tiếp vào phương thức kiểm tra (thay vì lặp và kiểm tra mọi số).
Cốt lõi của giải pháp này nằm trong regex:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+
Và cách chuỗi được thiết lập gấp 3 lần số mà chúng tôi đang kiểm tra.
Độ dài của chuỗi được thiết lập bằng 3 lần số mà chúng tôi đang kiểm tra i: 2 đầu tiên ilà để tổng hợp các yếu tố và 1 cuối cùng iđược dành riêng để kiểm tra xem một số có phải là một yếu tố hay không i.
(?=(.+)\1{2}$) được sử dụng để nắm bắt số lượng mà chúng tôi đang kiểm tra.
((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+phù hợp với các yếu tố của số lượng. Lặp lại sau sẽ phù hợp với một yếu tố nhỏ hơn so với lần lặp trước đó.
- Chúng ta có thể thấy rằng 2 phần này
(.+)và (?=.*(?=\1$)\3+$)cùng nhau chọn một yếu tố của số được kiểm tra.
(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$)) đảm bảo rằng hệ số được chọn nhỏ hơn số được kiểm tra trong lần lặp đầu tiên và nhỏ hơn hệ số trước trong các lần lặp tiếp theo.
Regex cố gắng khớp nhiều yếu tố của số có thể trong giới hạn 2 i. Nhưng chúng tôi không quan tâm đến giá trị thực của tổng các ước, chúng tôi chỉ quan tâm xem số lượng có nhiều không.
Sau đó, regex thứ 2, là regex đầu tiên \1{2}$được thêm vào. Do đó, biểu thức chính quy đảm bảo tổng (một số) yếu tố của số được kiểm tra bằng chính số đó:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+\1{2}$
Ràng buộc được thêm vào sẽ khiến công cụ regex thực hiện tìm kiếm quay lui trên tất cả các tập hợp con của các yếu tố có thể, vì vậy nó sẽ cực kỳ chậm.