Avviso: a seguito della richiesta popolare ho leggermente allentato le regole:
- La dimensione massima di regex aumenta di 1 byte ogni 5 risposte . La risposta N può usare fino a 29 + ⌈N / 5⌉ byte.
- Il punteggio di ciascuna risposta sarà (M / (30 + N / 5)) N
Nel golf regex, ti vengono dati due set di stringhe e ti viene chiesto di creare il regex più corto che corrisponde a tutte le stringhe del primo set, ma fallisce su tutte le stringhe del secondo set.
Questo è ciò che faremo, ma ogni volta che qualcuno risponde, la sua regex stessa verrà aggiunta a una delle due serie di stringhe (di propria scelta). Pertanto, esiste un ordine rigoroso per rispondere a questa sfida.
Facciamo un esempio:
- Di 'che inizio con
abc
(che non lo farò) e lo inserisco nel set di match . - Quindi una seconda risposta valida sarebbe
a
, poiché corrisponde a quanto sopra (e non ci sono ancora stringhe che devono ancora fallire). Di 'che questa risposta va nel set fallito . - Ora la terza risposta deve corrispondere
abc
ma fallirea
. Una possibile terza risposta è quindib
. Mettiamolo nel set di partite . - La quarta risposta ora deve corrispondere
abc
eb
, ma fallirea
. Non consentiremo risposte duplicate, quindi sarebbe una regex validac|b
.
L'importante è che la tua risposta sia la più breve possibile. Questo può essere banale per le prime risposte, ma una volta ottenute alcune risposte, dovrebbe essere sempre più difficile ottenere la corrispondenza desiderata nel minor numero di caratteri possibile.
Per la vera sfida, inizialmente il set di match contiene PPCG
e il set di fallimenti contiene [PPCG]
e ho già fornito la prima risposta.
Rispondere
La cosa chiave da capire su questa sfida è che solo una persona può rispondere alla volta e ogni risposta dipende da quella precedente .
Non dovrebbero mai esserci due risposte con lo stesso N
. Se due persone rispondono contemporaneamente per alcuni N
, quello che ha risposto in seguito (anche se è una differenza di pochi secondi) dovrebbe eliminare gentilmente la propria risposta.
Per rendere questo processo un po 'più fluido, prova a seguire i seguenti passaggi quando pubblichi la tua risposta:
- Assicurati che qualcuno abbia verificato in modo indipendente la correttezza della risposta precedente (e lasciato un commento corrispondente).
- Prendi i due set di test trovati nella risposta precedente e scrivi una regex che corrisponde a tutte le stringhe in un set e nessuna nell'altro.
Pubblica la tua risposta nel seguente formato:
# 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]
dov'è
N
il numero della tua risposta. Copia[match set]
e[fail set]
dalla risposta precedente e aggiungi la tua regex a una di esse.Questo è assolutamente vitale per la sfida! Ho fornito uno strumento di dashboard per la sfida per aiutare con la contabilità e si basa sul modello sopra. (Vedi in fondo al post.)
- Un altro utente dovrebbe ora rivedere la tua richiesta e lasciare un commento "Verifica della correttezza" se la tua risposta segue tutte le regole (vedi sotto). In caso contrario, dovrebbero lasciare un commento sottolineando eventuali difetti. Hai quindi 15 minuti per risolvere questi problemi. In caso contrario, la risposta verrà considerata non valida, dovrebbe essere eliminata e qualcun altro potrebbe pubblicare una risposta di follow-up alla precedente. (In questo caso, sei libero di inviare una nuova risposta in qualsiasi momento.)
Queste normative possono sembrare piuttosto rigide, ma sono necessarie per evitare risposte non valide da qualche parte nella catena.
Regole
- Un utente può inviare una sola risposta ogni 4 ore. (Questo per impedire agli utenti di osservare costantemente la domanda e di rispondere il più possibile.)
- Un utente non può inviare due risposte di seguito. (ad es. da quando ho inviato la risposta 1 non posso fare la risposta 2, ma potrei fare 3.)
- Non modificare le risposte che sono state verificate. (Anche se trovi un modo per accorciarlo!)
- Se un errore viene scoperto in precedenza nella catena (ovvero dopo che sono state pubblicate le risposte di follow-up), la risposta offensiva deve essere eliminata e rimossa dall'insieme di stringhe su cui i nuovi invii dovrebbero fallire. Tuttavia , tutte le risposte che sono state pubblicate da allora non devono essere modificate per riflettere.
- Indica chiaramente un sapore in cui il regex è valido. Puoi scegliere qualsiasi sapore liberamente testabile online. C'è un buon elenco di tester online su StackOverflow . In particolare, Regex101 e RegexPlanet dovrebbero essere utili, poiché supportano un'ampia varietà di sapori. Includi un link al tester che hai scelto nella tua risposta. Con l'accensione delle
g
lobal em
modificatori ultiline nel tester, è possibile verificare tutte le stringhe in una sola volta, una su ogni riga (questi modificatori non sono conteggiati verso la dimensione regex, perché non sono necessari su qualsiasi stringa individuale). - La tua regex non deve essere vuota.
- Il regex per la risposta N non deve essere più lungo di 29 + ⌈N / 5⌉ byte. Vale a dire le risposte da 1 a 5 possono utilizzare fino a 30 byte (incluso), le risposte da 6 a 10 possono utilizzare fino a 31 byte ... le risposte da 31 a 35 possono utilizzare fino a 36 byte. Controlla la dashboard per vedere quanti caratteri può usare la risposta successiva.
- Il tuo regex non deve essere identico a nessuna stringa in nessuno dei set di test.
- Non includere delimitatori nell'invio o nel conteggio dei byte, anche se la lingua host pertinente li utilizza. Se il tuo regex utilizza modificatori, aggiungi un byte per modificatore alla dimensione del regex. Ad esempio
/foo/i
sarebbe 4 byte.
punteggio
Il punteggio di ogni risposta è calcolato come (M / (30 + N / 5)) N , dove M è la dimensione della regex in byte e N è il suo numero. Il punteggio di ogni utente è il prodotto di tutte le risposte. Vince l'utente con il punteggio complessivo più basso. Nel caso improbabile di un pareggio, vince l'utente con l' ultimo invio. Accetterò l'ultima risposta di quell'utente.
Se si preferiscono i punteggi sommatori, è possibile calcolare il punteggio di ciascuna risposta come N * (log (M) - log (30)) e sommarli su tutte le risposte. Ciò darà lo stesso ordine di classifica.
Non v'è alcuna necessità di includere il punteggio di una risposta nella risposta, solo segnalare M . La dashboard della sfida nella parte inferiore della domanda calcolerà i punteggi e, nel caso di due punteggi molto vicini, ricontrollerò i risultati usando tipi di precisione arbitraria.
Tieni presente che il punteggio di ciascuna risposta è inferiore a 1, quindi puoi migliorare il tuo punteggio complessivo fornendo una nuova risposta. Tuttavia, più breve è ogni tuo invio, più efficacemente puoi abbassare il tuo punteggio. Inoltre, le risposte successive possono ottenere un punteggio più basso sebbene siano più lunghe, a causa del crescente esponente.
Cruscotto
Ho scritto un piccolo strumento Dashboard, usando Stack Snippet, basato sul lavoro di Optimizer qui . Spero che ciò ci aiuti a ottenere un certo ordine in queste sfide dipendenti dalla risposta.
Questo mostrerà lo stato attuale della sfida - in particolare, se ci sono risposte contrastanti, se una risposta deve essere verificata o se la risposta successiva può essere pubblicata.
Produce anche un elenco di tutte le risposte con punteggi, nonché una classifica di tutti gli utenti. Attenersi al formato della sfida sopra riportato, in modo che la dashboard possa leggere le stringhe pertinenti dalle risposte. Altrimenti potresti non essere incluso nella classifica.
Per favore fatemi sapere ( idealmente in chat ) se individuate qualche bug o avete idee su come migliorare l'utilità dello strumento.