Uyarı: Popüler talebin ardından kuralları biraz gevşettim:
- Maksimum regex boyutu 5 cevapta 1 bayt büyür . Cevap N , 29 + ⌈N / 5⌉ bayta kadar kullanabilir .
- Her cevabın puanı (M / (30 + N / 5)) N olacaktır.
Regex golfta, size iki dizge verilir ve ilk dizideki tüm dizelerle eşleşen en kısa regex'i yaratmanız istenir, ancak ikinci dizideki tüm dizelerde başarısız olur.
Yapacağımız şey budur, ancak ne zaman birisi cevap verirse, regex'in kendisi iki dizi diziden birine (kendi tercihine göre) eklenecektir. Bu nedenle, bu zorluğa cevap verebilmek için katı bir emir var.
Bir örnek üzerinden gidelim:
- Bunu başlatacağımı
abc
(ki yapmayacağım) ve maç setine yerleştirdiğimi söyle . - O halde geçerli bir ikinci cevap
a
, yukarıdakiyle eşleştiği için olacaktır (ve henüz başarısız olması gereken hiçbir dize yoktur). Diyelim ki bu cevap başarısız setine giriyor . - Şimdi üçüncü cevap eşleşmek zorunda
abc
ama başarısıza
. Bu nedenle olası bir üçüncü cevap budurb
. Bunu maç setine koyalım . - Dördüncü cevap şimdi uyuşmalı
abc
veb
başarısız olmalıa
. Yinelenen cevaplara izin vermeyiz, bu nedenle geçerli bir regex olurc|b
.
Önemli olan, cevabınızın mümkün olduğu kadar kısa olması gerektiği. Bu ilk birkaç cevap için önemsiz olabilir, ancak birkaç cevap aldığımızda, istenen eşleşmeyi olabildiğince az karakterle elde etmek zorlaşır ve zorlaşır.
Asıl zorluk için, başlangıçta eşleşme seti PPCG
ve başarısızlık seti içerir [PPCG]
ve ben zaten ilk cevabı verdim.
cevaplama
Bu zorlukla ilgili anlaşılması gereken en önemli şey , bir kerede yalnızca bir kişinin yanıt verebilmesi ve her bir cevabın öncekine göre değişmesidir .
Aynı şekilde iki cevap asla olmamalıdır N
. İki kişi aynı anda bazılarına cevap N
veriyorsa, daha sonra cevap veren (birkaç saniye fark olsa bile) cevaplarını nazikçe silmelisiniz.
Bu çalışmayı biraz daha pürüzsüz hale getirmek için, cevabınızı gönderirken aşağıdaki adımlara uymaya çalışın:
- Birisinin önceki cevabın doğruluğunu bağımsız olarak doğruladığından emin olun (ve ilgili bir yorum bıraktı).
- Önceki cevapta bulunan iki test setini alın ve bir setteki tüm karakter dizileriyle eşleşen ve diğerinde olmayan bir regex yazın.
Cevabınızı aşağıdaki biçimde gönderin:
# 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
cevabın numarası nerede ? Lütfen önceki cevabınızdaki metni kopyalayın[match set]
ve[fail set]
regex'inizi bunlardan birine ekleyin .Bu kesinlikle meydan okuma için hayatidir! Muhasebecilikle mücadelede yardımcı olacak bir gösterge panosu aracı sundum ve yukarıdaki şablona dayanıyor. (Gönderinin altına bakın.)
- Başka bir kullanıcı şimdi gönderinizi gözden geçirmeli ve cevabınız tüm kuralları takip ediyorsa (aşağıya bakınız), "Doğrulama doğrulandı" şeklinde bir yorum bırakmalıdır. Olmazsa, kusurları gösteren bir yorum bırakmalıdırlar. Daha sonra bu sorunları çözmek için 15 dakikanız var . Bunu yapmazsanız, cevabınız geçersiz sayılır, silinir ve bir başkası bir önceki cevap için bir takip mesajı gönderebilir. (Bu olursa, istediğiniz zaman yeni bir cevap göndermekte özgürsünüz.)
Bu düzenlemeler oldukça katı görünebilir, ancak zincirdeki bir yerde geçersiz cevapları önlemek için gereklidir.
kurallar
- Bir kullanıcı 4 saatlik süre için sadece bir cevap verebilir. (Bu, kullanıcıların soruyu sürekli izlemesini ve mümkün olduğunca cevap vermesini engellemek içindir.)
- Bir kullanıcı arka arkaya iki cevap gönderemez. (örneğin, 1. cevabı gönderdiğimden beri 2. cevabı yapamam, ancak 3. yapabilirim.)
- Doğrulanmış cevapları düzenlemeyin. (Kısaltmanın bir yolunu bulsanız bile!)
- Eğer zincirde daha önce bir hata keşfedilirse (yani takip cevapları kaydedildikten sonra), rahatsız edici cevap silinmeli ve yeni gönderilerin başarısız olması gereken dizelerden silinecektir. Ancak , sonra yayınlanan tüm cevapları gerekir değil yansıtacak şekilde değiştirilmelidir.
- Açıkçası, regex'inizin geçerli olduğu bir lezzeti belirtin. Çevrimiçi olarak serbestçe test edilebilen herhangi bir lezzeti seçebilirsiniz. StackOverflow'ta çevrimiçi test edicilerin iyi bir listesi var . Özellikle, Regex101 ve RegexPlanet , çok çeşitli tatları desteklediklerinden faydalı olmalıdır. Lütfen cevabınız için seçtiğiniz test cihazına bir link ekleyin. Üzerinde geçiş yaparak
g
lobal vem
test cihazında ultiline değiştiricileri, tek seferde tüm dizeleri test edebilirsiniz, her satırda bir (onlar herhangi bir bireysel ipe gerekli değildir, çünkü bu değiştiricileri, senin regex boyutu doğru sayılmaz). - Regex'iniz boş olmamalıdır.
- N cevabı için regex'iniz 29 + ⌈N / 5⌉ bayttan uzun olmamalıdır . Başka bir deyişle, 1'den 5'e kadar olan cevaplar 30 bayta kadar (dahil), 6'dan 10'a kadar olan cevaplar 31 byte'a kadar kullanabilir ... 31'den 35'e kadar cevaplar 36 byte'a kadar kullanabilir. Bir sonraki yanıtın kaç karakter kullanabileceğini görmek için gösterge tablosunu kontrol edin.
- Regex'iniz her iki test setindeki herhangi bir dizeyle aynı olmamalıdır.
- İlgili ana bilgisayar dili kullanıyor olsa da, göndericinize veya bayt sayınıza sınırlayıcıları dahil etmeyin. Regex'iniz değiştiriciler kullanıyorsa, regex boyutuna değiştirici başına bir bayt ekleyin. Örneğin
/foo/i
4 bayt olurdu.
puanlama
Her bir cevabın puanı (M / (30 + N / 5)) N olarak hesaplanır , burada M , bayt cinsinden regex boyutundadır ve N , sayıdır. Her kullanıcının puanı, tüm cevaplarının ürünüdür. Genel puanı en düşük olan kullanıcı kazanır. Beklenmedik bir bağlanma durumunda, son gönderime sahip olan kullanıcı kazanır. Bu kullanıcının son cevabını kabul edeceğim.
Eğer puanları toplamayı tercih ederseniz, her bir cevaplayıcının puanını N * (log (M) - log (30)) olarak hesaplayabilir ve tüm cevapların üzerine toplayabilirsiniz. Bu aynı afiş sırasını verecek.
Cevabın bir cevabını puanlamasına gerek yok, sadece M'yi rapor et . Sorunun altındaki zorluk kontrol paneli puanları hesaplayacak ve iki çok yakın puan olması durumunda, rasgele kesinlikli türler kullanarak sonuçları iki kez kontrol edeceğim.
Her yanıtın puanının 1'den az olduğunu, bu nedenle yeni bir cevap vererek genel puanınızı artırabileceğinizi unutmayın. Ancak, gönderimlerinizin her biri ne kadar kısa olursa, puanınızı o kadar verimli bir şekilde düşürebilirsiniz. Ayrıca, daha sonra cevaplar artan üs nedeniyle daha uzun olmasına rağmen daha düşük bir puan alabilir.
Gösterge Paneli
Doktor’un buradaki çalışmasına dayanarak Stack Snippets’i kullanarak küçük bir Dashboard aracı yazdım . Umarım bu, bu cevaba bağlı zorluklarda bir düzen almamıza yardımcı olur.
Bu, özellikle çatışan cevaplar varsa, bir cevabın doğrulanması gerekiyorsa veya bir sonraki cevabın gönderilip gönderilemeyeceğini belirtir.
Ayrıca puanları olan tüm cevapların bir listesini ve tüm kullanıcıların lider tablosunu oluşturur. Lütfen yukarıdaki meydan okuma formatına uyun, böylece gösterge paneli yanıtlarınızı ilgili dizeleri okuyabilir. Aksi takdirde, lider panosuna dahil olmayabilir.
Herhangi bir hata tespit ederseniz veya aletin kullanışlılığının nasıl geliştirilebileceğine dair bazı fikirleriniz varsa lütfen bana bildirin ( ideal olarak sohbette ).