10
\$\begingroup\$

Find the shortest regex that matches all radioactive elements and nothing else in the Periodic Table of Elements.

Radioactive Elements

'Technetium','Promethium','Polonium','Astatine','Radon','Francium','Radium','Actinium','Thorium','Protactinium','Uranium','Neptunium','Plutonium','Americium','Curium','Berkelium','Californium','Einsteinium','Fermium','Mendelevium','Nobelium','Lawrencium','Rutherfordium','Dubnium','Seaborgium','Bohrium','Hassium','Meitnerium','Darmstadtium','Roentgenium','Copernicium','Ununtrium','Flerovium','Ununpentium','Livermorium','Ununseptium','Ununoctium'

Non-radioactive Elements

'Hydrogen','Helium','Lithium','Beryllium','Boron','Carbon','Nitrogen','Oxygen','Fluorine','Neon','Sodium','Magnesium','Aluminium','Silicon','Phosphorus','Sulphur','Chlorine','Argon','Potassium','Calcium','Scandium','Titanium','Vanadium','Chromium','Manganese','Iron','Cobalt','Nickel','Copper','Zinc','Gallium','Germanium','Arsenic','Selenium','Bromine','Krypton','Rubidium','Strontium','Yttrium','Zirconium','Niobium','Molybdenum','Ruthenium','Rhodium','Palladium','Silver','Cadmium','Indium','Tin','Antimony','Tellurium','Iodine','Xenon','Caesium','Barium','Lanthanum','Cerium','Praseodymium','Neodymium','Samarium','Europium','Gadolinium','Terbium','Dysprosium','Holmium','Erbium','Thulium','Ytterbium','Lutetium','Hafnium','Tantalum','Tungsten','Rhenium','Osmium','Iridium','Platinum','Gold','Mercury','Thallium','Lead','Bismuth'
  • Scored by character count in the regex.
  • Use standard Perl regex (just no specialized functions).
  • Assume all lower case.
  • You only need to count the characters of the regex itself.

Note if you used a program to get you started and maybe post how well it did. I'll post my best attempt as an answer to get started/show an example.

\$\endgroup\$
  • \$\begingroup\$ Can you quote a regex standard, such as POSIX regular, POSIX extended, PCRE…? Otherwise "language agnostic" doesn't really mean much. \$\endgroup\$ – Tobia Jan 8 '14 at 21:55
  • \$\begingroup\$ Sorry, I have only had to use regex in java and javascript and don't really know all the differences. The goal is to create a regex that would work in most common languages without relying on language specific feature. \$\endgroup\$ – qw3n Jan 8 '14 at 22:02
  • \$\begingroup\$ There is an ongoing discussion as to whether we want regex golf on this site. Please contribute. \$\endgroup\$ – Peter Taylor Jan 8 '14 at 23:48
  • \$\begingroup\$ @qw3n You could say “regular expression describing a regular language” to exclude all the language specific things. \$\endgroup\$ – FUZxxl Mar 8 '15 at 11:58
3
\$\begingroup\$

Char count 59

e.+[hktv]|oh?r.+m|p...?o|r.*ci|be?.i|^c?u|rad|sta|has|ct|fe

Found via a mix of manually selecting good parts and running Peter Norvig's golfer on the remaining items.

Regex101 link

\$\endgroup\$
  • \$\begingroup\$ LOL accepted answer after over 2 years! Imagine that @drjimbob's answer was the previous accepted answer. 3 characters better than accepted answer! \$\endgroup\$ – Erik the Outgolfer May 31 '16 at 18:28
  • \$\begingroup\$ For pete's sake! I've had the best answer for more than a year, and then I make it even better, and then you come along and do even better and get accepted! \$\endgroup\$ – EMBLEM Jun 1 '16 at 1:30
10
\$\begingroup\$

Char Count 61

lon|ct|oh|^ra|...t.+i|^c?u|or.+u|r.+c.|e..+e|f.?e|^h?as|be*.i

One 3 characters better than accepted answer!

63-character solution found with Peter Norvig's Regex golf solver. 61-character improvement found by a personal rewrite of that program in Go.

\$\endgroup\$
4
\$\begingroup\$

Char count 64

^(c?u|ra|no)|e.[kht]|[^l][gecv]i|[^c]oh?[rn]iu|f.r|ac|sta|bn|has

Should note, used parts of qw3n solution to reduce down my solution. Also used Peter Taylor's suggestion to trim two characters.

\$\endgroup\$
  • \$\begingroup\$ I have a feeling this is pretty near if not an optimal solution. Wish I'd seen that f.r part. :) \$\endgroup\$ – qw3n Jan 10 '14 at 1:05
  • 1
    \$\begingroup\$ There's an easy 1-char saving by grouping everything anchored on ^, and another by changing ^(u|cu|...) into ^(c?u|...) \$\endgroup\$ – Peter Taylor Jan 10 '14 at 9:46
3
\$\begingroup\$

Char count 69

^u|e.[kht]|[^l][gecv]i|[^c]oh?[rn]iu|^cu|f[oe]|a[cds]t|has|nob|rad|du

Curium/Cerium are a pain to deal with

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.