module StringMap = Map.Make(String) let periodic_table = StringMap.empty |> StringMap.add "H" 1.008 (* Hydrogen *) |> StringMap.add "He" 4.0026 (* Helium *) |> StringMap.add "Li" 6.941 (* Lithium *) |> StringMap.add "Be" 9.0122 (* Beryllium *) |> StringMap.add "B" 10.811 (* Boron *) |> StringMap.add "C" 12.011 (* Carbon *) |> StringMap.add "N" 14.007 (* Nitrogen *) |> StringMap.add "O" 15.999 (* Oxygen *) |> StringMap.add "F" 18.998 (* Fluorine *) |> StringMap.add "Ne" 20.180 (* Neon *) |> StringMap.add "Na" 22.990 (* Sodium *) |> StringMap.add "Mg" 24.305 (* Magnesium *) |> StringMap.add "Al" 26.982 (* Aluminum *) |> StringMap.add "Si" 28.085 (* Silicon *) |> StringMap.add "P" 30.974 (* Phosphorus *) |> StringMap.add "S" 32.06 (* Sulfur *) |> StringMap.add "Cl" 35.45 (* Chlorine *) |> StringMap.add "K" 39.098 (* Potassium *) |> StringMap.add "Ar" 39.948 (* Argon *) |> StringMap.add "Ca" 40.078 (* Calcium *) |> StringMap.add "Sc" 44.956 (* Scandium *) |> StringMap.add "Ti" 47.867 (* Titanium *) |> StringMap.add "V" 50.942 (* Vanadium *) |> StringMap.add "Cr" 51.996 (* Chromium *) |> StringMap.add "Mn" 54.938 (* Manganese *) |> StringMap.add "Fe" 55.845 (* Iron *) |> StringMap.add "Ni" 58.693 (* Nickel *) |> StringMap.add "Co" 58.933 (* Cobalt *) |> StringMap.add "Cu" 63.546 (* Copper *) |> StringMap.add "Zn" 65.38 (* Zinc *) |> StringMap.add "Ga" 69.723 (* Gallium *) |> StringMap.add "Ge" 72.63 (* Germanium *) |> StringMap.add "As" 74.922 (* Arsenic *) |> StringMap.add "Se" 78.971 (* Selenium *) |> StringMap.add "Br" 79.904 (* Bromine *) |> StringMap.add "Kr" 83.798 (* Krypton *) |> StringMap.add "Rb" 85.468 (* Rubidium *) |> StringMap.add "Sr" 87.62 (* Strontium *) |> StringMap.add "Y" 88.906 (* Yttrium *) |> StringMap.add "Zr" 91.224 (* Zirconium *) |> StringMap.add "Nb" 92.906 (* Niobium *) |> StringMap.add "Mo" 95.95 (* Molybdenum *) |> StringMap.add "Tc" 98.0 (* Technetium *) |> StringMap.add "Ru" 101.07 (* Ruthenium *) |> StringMap.add "Rh" 102.91 (* Rhodium *) |> StringMap.add "Pd" 106.42 (* Palladium *) |> StringMap.add "Ag" 107.87 (* Silver *) |> StringMap.add "Cd" 112.41 (* Cadmium *) |> StringMap.add "In" 114.82 (* Indium *) |> StringMap.add "Sn" 118.71 (* Tin *) |> StringMap.add "Sb" 121.76 (* Antimony *) |> StringMap.add "I" 126.90 (* Iodine *) |> StringMap.add "Te" 127.60 (* Tellurium *) |> StringMap.add "Xe" 131.29 (* Xenon *) |> StringMap.add "Cs" 132.91 (* Cesium *) |> StringMap.add "Ba" 137.33 (* Barium *) |> StringMap.add "La" 138.91 (* Lanthanum *) |> StringMap.add "Ce" 140.12 (* Cerium *) |> StringMap.add "Pr" 140.91 (* Praseodymium *) |> StringMap.add "Nd" 144.24 (* Neodymium *) |> StringMap.add "Pm" 145.0 (* Promethium *) |> StringMap.add "Sm" 150.36 (* Samarium *) |> StringMap.add "Eu" 151.96 (* Europium *) |> StringMap.add "Gd" 157.25 (* Gadolinium *) |> StringMap.add "Tb" 158.93 (* Terbium *) |> StringMap.add "Dy" 162.50 (* Dysprosium *) |> StringMap.add "Ho" 164.93 (* Holmium *) |> StringMap.add "Er" 167.26 (* Erbium *) |> StringMap.add "Tm" 168.93 (* Thulium *) |> StringMap.add "Yb" 173.05 (* Ytterbium *) |> StringMap.add "Lu" 174.97 (* Lutetium *) |> StringMap.add "Hf" 178.49 (* Hafnium *) |> StringMap.add "Ta" 180.95 (* Tantalum *) |> StringMap.add "W" 183.84 (* Tungsten *) |> StringMap.add "Re" 186.21 (* Rhenium *) |> StringMap.add "Os" 190.23 (* Osmium *) |> StringMap.add "Ir" 192.22 (* Iridium *) |> StringMap.add "Pt" 195.08 (* Platinum *) |> StringMap.add "Au" 196.97 (* Gold *) |> StringMap.add "Hg" 200.59 (* Mercury *) |> StringMap.add "Tl" 204.38 (* Thallium *) |> StringMap.add "Pb" 207.2 (* Lead *) |> StringMap.add "Bi" 208.98 (* Bismuth *) |> StringMap.add "Po" 209.0 (* Polonium *) |> StringMap.add "At" 210.0 (* Astatine *) |> StringMap.add "Rn" 222.0 (* Radon *) |> StringMap.add "Fr" 223.0 (* Francium *) |> StringMap.add "Ra" 226.0 (* Radium *) |> StringMap.add "Ac" 227.0 (* Actinium *) |> StringMap.add "Pa" 231.04 (* Protactinium *) |> StringMap.add "Th" 232.04 (* Thorium *) |> StringMap.add "Np" 237.0 (* Neptunium *) |> StringMap.add "U" 238.03 (* Uranium *) |> StringMap.add "Am" 243.0 (* Americium *) |> StringMap.add "Pu" 244.0 (* Plutonium *) |> StringMap.add "Cm" 247.0 (* Curium *) |> StringMap.add "Bk" 247.0 (* Berkelium *) |> StringMap.add "Cf" 251.0 (* Californium *) |> StringMap.add "Es" 252.0 (* Einsteinium *) |> StringMap.add "Fm" 257.0 (* Fermium *) |> StringMap.add "Md" 258.0 (* Mendelevium *) |> StringMap.add "No" 259.0 (* Nobelium *) |> StringMap.add "Lr" 262.0 (* Lawrencium *) |> StringMap.add "Rf" 267.0 (* Rutherfordium *) |> StringMap.add "Db" 268.0 (* Dubnium *) |> StringMap.add "Sg" 269.0 (* Seaborgium *) |> StringMap.add "Bh" 270.0 (* Bohrium *) |> StringMap.add "Hs" 269.0 (* Hassium *) |> StringMap.add "Mt" 278.0 (* Meitnerium *) |> StringMap.add "Ds" 281.0 (* Darmstadtium *) |> StringMap.add "Rg" 282.0 (* Roentgenium *) |> StringMap.add "Cn" 285.0 (* Copernicium *) |> StringMap.add "Nh" 286.0 (* Nihonium *) |> StringMap.add "Fl" 289.0 (* Flerovium *) |> StringMap.add "Mc" 289.0 (* Moscovium *) |> StringMap.add "Lv" 293.0 (* Livermorium *) |> StringMap.add "Ts" 294.0 (* Tennessine *) |> StringMap.add "Og" 294.0 (* Oganesson *) let element_find_closest s : string list = StringMap.filter (fun k _ -> String.get k 0 = String.get s 0) periodic_table |> StringMap.to_list |> List.map (fun x -> fst x)