Wie auch beim echten Golfen muss man beim Regex-Golf versuchen Dinge zu treffen. Der Unterschied ist nur das Ziel. Wohingegen ein einfaches Loch beim normalen Golf das Ziel ist, gilt es beim Regex-Golf möglichst viele Wörter/Zeichen zu treffen, und zwar die richtigen!Wie, die Richtigen? Tja, es gibt nämlich auch Wörter, die man nicht matchen sollte, tut man es trotzdem gibt es Punktabzug.
Neugierig geworden? Das Spiel gibt es hier: regex-golf
Und für alle, die wie ich davor noch nie etwas von RegEx gehört haben, gibt es hier noch ein paar gute Tutorials: danielfett und regular-expressions
Natürlich könnt ihr euch mit mir messen und eure RegEx mit meinen vergleichen. Ihr wart besser? Dann postet doch darunter, was ihr verwendet habt 🙂
- Warmup: (207) foo
- Anchors: (206) (k)$
- Ranges: (202) [a-f]{4}
- Backrefs: (199) (\w{3}).*\1
- Abba: (11) (\w).(\1)
- A man, a plan: (166) (\w)(\w).?\2\
- Prime: (-)
- Four: (196) .*(.).\1.\1.\1
- Order: (168) ^a*b*c*d*e*f*g*h*i*l*m*n*o*p*r*s*t*w*y*z*$
- Triples: (-)
- Glob: (-)
- Balance:(26) (<>)
- Powers: (-)
- Long count: (-)
- Alphabetical: (-)
- Powers 2: (-)
Ich finde den Fehler nicht für Euklid:
^(?=.* (x*)$).*\((?!(\1{2,})+, \2+\))\1+, \1+\)
Warum sind diese REGEX nicht perfekt?
gefunden: Euklid (151)
^(?=.* (x*)$).*\((?!(\1{2,})\2*, \2+\))\1+, \1+\)
Ziemlich einsam hier zu posten…
Subtraction (173)
Typist (122)
Addition (97)
Anyway (149)
Tic-tac-toe (151)
Vor den Lösungen hätte ich gerne mal Vorschläge gelesen. 🙂
Powers (56):
^((((((((((x)\10?)\9?)\8?)\7?)\6?)\5?)\4?)\3?)\2?)\1?$
Powers 2 (15):
^((((((((((x)(\10\10)?)(\9\9)?)(\8\8)?)(\7\7)?)(\6\6)?)(\5\5)?)(\4\4)?)(\3\3)?)(\2\2)?)(\1\1)?$
Powers 2 (35):
^(x|x{3}|x{9}|x{27}|x{81}|x{243}|x{729}|x{2187}|x{6561}|x{19683}|x{59049}
Da fehlt das Ende:
)$
Powers 2 (49):
^(x|x{3}|x{9}|x{27,81}|x{243,729}|x{2187}|x{6561}|x{19683,})$
Alphabetical (224):
(?!.*(ast.*ass|asses.*assen|\brest.*\bres|\ber.*\ben|star.*sen))^(a.{5} ?)*(e.{5} ?)*(r.{5} ?)*(s.{5} ?)*(t.{5} ?)*$
Balance (428):
(?!^>|.*<$|^>|^<>>|.*(<|<<>>>>)$)^(..)*$
Glob (378):
^(\*(er|f|i|p|t|v)|b|c[^a]|do|l|mi|p|re|w)
Glob (365): \*(er|f|i|ta|v)|(a|er|dl|n|m|t|wi|pe)\*|(^[^*]*) .* \3$
(ist bestimmt noch optimierbar)
Warmup (207)
Anchors (208)
Ranges (202)
Backrefs (201)
Abba (191)
A man, a plan (176)
Prime (284)
Four (198)
Order (191)
Abba (193)
Balance (322) (aber leider nicht perfekt)
sehr stark! deine Lösungen?
Backrefs (201):
(…).*\1
Abba (193):
^(?!.*(.)(.)\2\1)
A man, a plan (176):
^(.)(.).*\2\1$
Prime (284):
^(?!(x{2,})\1+$
Four (198):
(.).\1\1\1
noch kürzer ist (.)(.\1){3} (199), bin ich aber nicht selbst drauf gekommen
Order (191):
^[a-m][c-o].*[m-z]$
Triples (566):
(^(9[^7]|8[^5]|71|74|4[^7]|3[^38]|173|14|06)|00([369]|12|15|0)$)
Balance (322, nicht perfekt!):
(^$|^([^>]){2}|^()+$)
Glob (358):
\*(er|f|i|p|ta|v)|(a|er|dl|n|m|t|wi|pe)\*|(^[^*]*) matches \3$
Triples (568): wie oben ohne äußere Klammern
Long count (252):
^(?!.*(\d{4}).*\1)