Lưu ý: Theo nhu cầu phổ biến, tôi đã nới lỏng các quy tắc:
- Kích thước regex tối đa tăng thêm 1 byte cứ sau 5 câu trả lời . Trả lời N có thể sử dụng tối đa 29 + N / 5⌉ byte.
- Điểm của mỗi câu trả lời sẽ là (M / (30 + N / 5)) N
Trong regex golf, bạn được cung cấp hai bộ dây và được yêu cầu tạo regex ngắn nhất phù hợp với tất cả các chuỗi trong bộ thứ nhất, nhưng thất bại trên tất cả các chuỗi trong bộ thứ hai.
Đó là những gì chúng ta sẽ làm, nhưng mỗi khi ai đó trả lời, chính regex của họ sẽ được thêm vào một trong hai bộ chuỗi (theo lựa chọn của riêng họ). Do đó, có một trật tự nghiêm ngặt để trả lời trong thử thách này.
Chúng ta hãy đi qua một ví dụ:
- Nói rằng tôi bắt đầu điều này với
abc
(mà tôi sẽ không) và đặt nó vào bộ khớp . - Sau đó, một câu trả lời thứ hai hợp lệ sẽ là
a
, vì nó phù hợp với câu trả lời ở trên (và không có chuỗi nào cần phải thất bại). Nói câu trả lời này đi trong tập thất bại . - Bây giờ câu trả lời thứ ba phải khớp
abc
nhưng thất bạia
. Một câu trả lời thứ ba có thể là do đób
. Hãy đặt điều này trong tập hợp trận đấu . - Câu trả lời thứ tư bây giờ phải khớp
abc
vàb
, nhưng thất bạia
. Chúng tôi sẽ không cho phép các câu trả lời trùng lặp, vì vậy một regex hợp lệ sẽ làc|b
.
Điều quan trọng là câu trả lời của bạn nên càng ngắn càng tốt. Điều này có thể là tầm thường đối với một vài câu trả lời đầu tiên, nhưng một khi chúng ta nhận được một vài câu trả lời, sẽ càng ngày càng khó hơn để có được trận đấu mong muốn trong càng ít ký tự càng tốt.
Đối với thử thách thực tế, ban đầu bộ khớp chứa PPCG
và bộ thất bại chứa [PPCG]
, và tôi đã cung cấp câu trả lời đầu tiên.
Trả lời
Điều quan trọng để hiểu về thách thức này là chỉ có một người có thể trả lời tại một thời điểm và mỗi câu trả lời phụ thuộc vào câu hỏi trước nó .
Không bao giờ nên có hai câu trả lời giống nhau N
. Nếu hai người tình cờ trả lời đồng thời cho một số người N
, thì người trả lời sau (ngay cả khi đó chỉ là một vài giây) nên xóa câu trả lời của họ.
Để làm cho điều này chạy trơn tru hơn một chút, hãy thử làm theo các bước sau khi đăng câu trả lời của bạn:
- Hãy chắc chắn rằng ai đó đã xác minh độc lập tính chính xác của câu trả lời trước đó (và để lại nhận xét tương ứng).
- Lấy hai bộ kiểm tra được tìm thấy trong câu trả lời trước và viết một biểu thức chính phù hợp với tất cả các chuỗi trong một bộ và không có bộ nào trong bộ kia.
Gửi câu trả lời của bạn ở định dạng sau:
# N. [regex flavour] - [regex size in bytes] [regex] [link to online regex tester] [notes, explanation, observations, whatever] ### The next answer has to match the following strings: [match set] ### And fail on these strings: [fail set]
nơi
N
là số câu trả lời của bạn. Vui lòng sao chép[match set]
và[fail set]
từ câu trả lời trước đó và nối regex của bạn vào một trong số chúng.Điều này là hoàn toàn quan trọng đối với các thách thức! Tôi đã cung cấp một công cụ bảng điều khiển cho thử thách để giúp ghi sổ và nó phụ thuộc vào mẫu trên. (Xem dưới cùng của bài viết.)
- Một người dùng khác bây giờ nên xem lại bài đăng của bạn và để lại nhận xét "Xác minh chính xác" nếu câu trả lời của bạn tuân theo tất cả các quy tắc (xem bên dưới). Nếu không, họ nên để lại một bình luận chỉ ra bất kỳ sai sót nào. Sau đó, bạn đã có 15 phút để khắc phục những vấn đề đó. Nếu bạn không, câu trả lời của bạn sẽ bị coi là không hợp lệ, nên bị xóa và người khác có thể đăng câu trả lời tiếp theo cho câu trả lời trước đó. (Nếu điều này xảy ra, bạn có thể gửi câu trả lời mới bất cứ lúc nào.)
Các quy định này có vẻ khá nghiêm ngặt, nhưng chúng là cần thiết để tránh các câu trả lời không hợp lệ ở đâu đó trong chuỗi.
Quy tắc
- Một người dùng chỉ có thể gửi một câu trả lời trong mỗi khoảng thời gian 4 giờ. (Điều này là để ngăn người dùng liên tục xem câu hỏi và trả lời nhiều nhất có thể.)
- Một người dùng không thể gửi hai câu trả lời liên tiếp. (ví dụ: kể từ khi tôi gửi câu trả lời 1, tôi không thể trả lời 2, nhưng tôi có thể làm 3.)
- Không chỉnh sửa câu trả lời đã được xác minh. (Ngay cả khi bạn tìm cách rút ngắn nó!)
- Nếu một lỗi được phát hiện sớm hơn trong chuỗi (tức là sau khi các câu trả lời tiếp theo đã được đăng), câu trả lời vi phạm sẽ bị xóa và sẽ bị xóa khỏi bộ chuỗi mà các bài nộp mới sẽ thất bại. Tuy nhiên , tất cả các câu trả lời đã được đăng từ đó không nên được thay đổi để phản ánh.
- Rõ ràng nêu rõ một hương vị regex của bạn là hợp lệ. Bạn có thể chọn bất kỳ hương vị nào có thể tự do kiểm tra trực tuyến. Có một danh sách tốt những người thử nghiệm trực tuyến trên StackOverflow . Đặc biệt, Regex101 và RegexPlanet nên hữu ích, vì chúng hỗ trợ rất nhiều hương vị. Vui lòng bao gồm một liên kết đến người kiểm tra bạn đã chọn trong câu trả lời của bạn. Bằng cách bật công cụ sửa đổi
g
lobal vàm
ultiline trong trình kiểm tra, bạn có thể kiểm tra tất cả các chuỗi cùng một lúc, mỗi chuỗi trên mỗi dòng (các công cụ sửa đổi này không được tính vào kích thước regex của bạn, vì chúng không cần trên bất kỳ chuỗi riêng lẻ nào). - Regex của bạn không được để trống
- Regex của bạn cho câu trả lời N không được dài hơn 29 + ⌈N / 5⌉ byte. Tức là câu trả lời 1 đến 5 có thể sử dụng tối đa 30 byte (bao gồm), câu trả lời 6 đến 10 có thể sử dụng tối đa 31 byte ... câu trả lời 31 đến 35 có thể sử dụng tối đa 36 byte. Kiểm tra bảng điều khiển để xem có bao nhiêu ký tự mà câu trả lời tiếp theo có thể sử dụng.
- Regex của bạn không được trùng với bất kỳ chuỗi nào trong cả hai bộ kiểm tra.
- Không bao gồm các dấu phân cách trong trình gửi hoặc số byte của bạn, ngay cả khi ngôn ngữ máy chủ có liên quan sử dụng chúng. Nếu regex của bạn sử dụng công cụ sửa đổi, hãy thêm một byte cho mỗi công cụ sửa đổi vào kích thước regex. Ví dụ
/foo/i
sẽ là 4 byte.
Chấm điểm
Điểm của mỗi câu trả lời được tính là (M / (30 + N / 5)) N , trong đó M là kích thước của biểu thức chính quy theo byte và N là số của nó. Mỗi điểm số của người dùng là sản phẩm của tất cả các câu trả lời của họ. Người dùng có tổng điểm thấp nhất sẽ thắng. Trong trường hợp không thể xảy ra sự ràng buộc, người dùng có bài nộp mới nhất sẽ thắng. Tôi sẽ chấp nhận câu trả lời mới nhất của người dùng đó.
Nếu bạn thích tổng điểm, bạn có thể tính điểm của từng câu trả lời là N * (log (M) - log (30)) và tổng hợp các điểm đó trên tất cả các câu trả lời. Điều đó sẽ đưa ra thứ tự bảng xếp hạng tương tự.
Không cần phải bao gồm điểm của một câu trả lời trong câu trả lời, chỉ cần báo cáo M . Bảng điều khiển thử thách ở cuối câu hỏi sẽ tính điểm và trong trường hợp có hai điểm rất gần, tôi sẽ kiểm tra lại kết quả bằng các loại chính xác tùy ý.
Lưu ý rằng điểm của mỗi câu trả lời nhỏ hơn 1, vì vậy bạn có thể cải thiện điểm tổng thể của mình bằng cách cung cấp câu trả lời mới. Tuy nhiên, mỗi bài nộp của bạn càng ngắn, bạn càng có thể hạ thấp điểm số của mình một cách hiệu quả hơn. Hơn nữa, các câu trả lời sau này có thể đạt được điểm thấp hơn mặc dù dài hơn, do số mũ tăng dần.
bảng điều khiển
Tôi đã viết một công cụ Bảng điều khiển nhỏ, sử dụng Stack Snippets, dựa trên công việc của Trình tối ưu hóa ở đây . Tôi hy vọng điều này sẽ giúp chúng tôi có được một số thứ tự vào những thách thức phụ thuộc vào câu trả lời này.
Điều này sẽ hiển thị trạng thái hiện tại của thử thách - đặc biệt, nếu có câu trả lời mâu thuẫn, nếu câu trả lời cần được xác minh hoặc nếu câu trả lời tiếp theo có thể được đăng.
Nó cũng tạo ra một danh sách tất cả các câu trả lời với điểm số, cũng như bảng xếp hạng của tất cả người dùng. Vui lòng tuân theo định dạng thử thách ở trên, để bảng điều khiển có thể đọc các chuỗi có liên quan từ câu trả lời của bạn. Nếu không, bạn có thể không được bao gồm trong bảng thành tích.
Vui lòng cho tôi biết ( lý tưởng nhất là trong trò chuyện ) nếu bạn phát hiện ra bất kỳ lỗi nào hoặc có một số ý tưởng về tính hữu ích của công cụ có thể được cải thiện.