Created
June 2, 2024 12:52
-
-
Save infibrocco/dd52b3c796bdb519409bca2dc386cb8e to your computer and use it in GitHub Desktop.
Converts a given name into chemical elements format (example: name2chem("calvin") -> "CaLvIn")
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
with open("ptable.json") as f: | |
elements = json.loads(f.read()) | |
def name2chem(name: str): | |
"""Converts a given name into chemical elements""" | |
possible = [] # Initialize a list to store possible matches | |
contcount = 0 # Initialize a variable to keep track of continue count | |
# Iterate over the characters in the input name | |
for i, ch in enumerate(name): | |
if contcount > 0: # Check if there are unresolved continues | |
contcount -= 1 # Decrement the continue count | |
continue | |
# Add all elements in the dictionary keys that start with the current character to the possible matches | |
possible.append( | |
list( | |
k.lower() | |
for k in elements.keys() | |
if k.lower().startswith(ch.lower()) | |
) | |
) | |
# Check if the next character is a possible continuation of the current match | |
if (i + 1) < len(name) and any( | |
k.endswith(name[i + 1]) for k in possible[-1] | |
): | |
# Combine the characters and update the continue count | |
possible[-1] = ch.lower() + name[i + 1] | |
contcount += 1 | |
continue | |
elif ch.lower() in possible[-1]: | |
# Update the match if the current character is a valid match | |
possible[-1] = ch.lower() | |
# If there are lists within the possible matches | |
if any(isinstance(i, list) for i in possible): | |
possible = [] # Reset the possible matches list | |
# Iterate over the characters in the input name again | |
for i, ch in enumerate(name): | |
if contcount > 0: # Check for continue count | |
contcount -= 1 # Decrement the continue count | |
continue | |
# Find elements in the dictionary keys that start with the current character | |
possible.append( | |
list( | |
k.lower() | |
for k in elements.keys() | |
if k.lower().startswith(ch.lower()) | |
) | |
) | |
# Note: The following code is similar to the previous code block | |
# However, the conditions are switched around to make sure that we can properly convert the input name to chemical elements format | |
if ch.lower() in possible[-1]: | |
# Update the match if the current character is a valid match | |
possible[-1] = ch.lower() | |
elif (i + 1) < len(name) and any( | |
k.endswith(name[i + 1]) for k in possible[-1] | |
): | |
# Combine the characters and update the continue count | |
possible[-1] = ch.lower() + name[i + 1] | |
contcount += 1 | |
continue | |
if any(isinstance(i, list) for i in possible) or "".join(possible) != name: | |
return "NaN" | |
# Return "NaN" if there are unresolved matches or if the match doesn't match the input name | |
# Return the name in chemical elements format | |
return "".join(p.capitalize() for p in possible) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"H": { | |
"number": 1, | |
"group": 1, | |
"period": 1 | |
}, | |
"He": { | |
"number": 2, | |
"group": 18, | |
"period": 1 | |
}, | |
"Li": { | |
"number": 3, | |
"group": 1, | |
"period": 2 | |
}, | |
"Be": { | |
"number": 4, | |
"group": 2, | |
"period": 2 | |
}, | |
"B": { | |
"number": 5, | |
"group": 13, | |
"period": 2 | |
}, | |
"C": { | |
"number": 6, | |
"group": 14, | |
"period": 2 | |
}, | |
"N": { | |
"number": 7, | |
"group": 15, | |
"period": 2 | |
}, | |
"O": { | |
"number": 8, | |
"group": 16, | |
"period": 2 | |
}, | |
"F": { | |
"number": 9, | |
"group": 17, | |
"period": 2 | |
}, | |
"Ne": { | |
"number": 10, | |
"group": 18, | |
"period": 2 | |
}, | |
"Na": { | |
"number": 11, | |
"group": 1, | |
"period": 3 | |
}, | |
"Mg": { | |
"number": 12, | |
"group": 2, | |
"period": 3 | |
}, | |
"Al": { | |
"number": 13, | |
"group": 13, | |
"period": 3 | |
}, | |
"Si": { | |
"number": 14, | |
"group": 14, | |
"period": 3 | |
}, | |
"P": { | |
"number": 15, | |
"group": 15, | |
"period": 3 | |
}, | |
"S": { | |
"number": 16, | |
"group": 16, | |
"period": 3 | |
}, | |
"Cl": { | |
"number": 17, | |
"group": 17, | |
"period": 3 | |
}, | |
"Ar": { | |
"number": 18, | |
"group": 18, | |
"period": 3 | |
}, | |
"K": { | |
"number": 19, | |
"group": 1, | |
"period": 4 | |
}, | |
"Ca": { | |
"number": 20, | |
"group": 2, | |
"period": 4 | |
}, | |
"Sc": { | |
"number": 21, | |
"group": 3, | |
"period": 4 | |
}, | |
"Ti": { | |
"number": 22, | |
"group": 4, | |
"period": 4 | |
}, | |
"V": { | |
"number": 23, | |
"group": 5, | |
"period": 4 | |
}, | |
"Cr": { | |
"number": 24, | |
"group": 6, | |
"period": 4 | |
}, | |
"Mn": { | |
"number": 25, | |
"group": 7, | |
"period": 4 | |
}, | |
"Fe": { | |
"number": 26, | |
"group": 8, | |
"period": 4 | |
}, | |
"Co": { | |
"number": 27, | |
"group": 9, | |
"period": 4 | |
}, | |
"Ni": { | |
"number": 28, | |
"group": 10, | |
"period": 4 | |
}, | |
"Cu": { | |
"number": 29, | |
"group": 11, | |
"period": 4 | |
}, | |
"Zn": { | |
"number": 30, | |
"group": 12, | |
"period": 4 | |
}, | |
"Ga": { | |
"number": 31, | |
"group": 13, | |
"period": 4 | |
}, | |
"Ge": { | |
"number": 32, | |
"group": 14, | |
"period": 4 | |
}, | |
"As": { | |
"number": 33, | |
"group": 15, | |
"period": 4 | |
}, | |
"Se": { | |
"number": 34, | |
"group": 16, | |
"period": 4 | |
}, | |
"Br": { | |
"number": 35, | |
"group": 17, | |
"period": 4 | |
}, | |
"Kr": { | |
"number": 36, | |
"group": 18, | |
"period": 4 | |
}, | |
"Rb": { | |
"number": 37, | |
"group": 1, | |
"period": 5 | |
}, | |
"Sr": { | |
"number": 38, | |
"group": 2, | |
"period": 5 | |
}, | |
"Y": { | |
"number": 39, | |
"group": 3, | |
"period": 5 | |
}, | |
"Zr": { | |
"number": 40, | |
"group": 4, | |
"period": 5 | |
}, | |
"Nb": { | |
"number": 41, | |
"group": 5, | |
"period": 5 | |
}, | |
"Mo": { | |
"number": 42, | |
"group": 6, | |
"period": 5 | |
}, | |
"Tc": { | |
"number": 43, | |
"group": 7, | |
"period": 5 | |
}, | |
"Ru": { | |
"number": 44, | |
"group": 8, | |
"period": 5 | |
}, | |
"Rh": { | |
"number": 45, | |
"group": 9, | |
"period": 5 | |
}, | |
"Pd": { | |
"number": 46, | |
"group": 10, | |
"period": 5 | |
}, | |
"Ag": { | |
"number": 47, | |
"group": 11, | |
"period": 5 | |
}, | |
"Cd": { | |
"number": 48, | |
"group": 12, | |
"period": 5 | |
}, | |
"In": { | |
"number": 49, | |
"group": 13, | |
"period": 5 | |
}, | |
"Sn": { | |
"number": 50, | |
"group": 14, | |
"period": 5 | |
}, | |
"Sb": { | |
"number": 51, | |
"group": 15, | |
"period": 5 | |
}, | |
"Te": { | |
"number": 52, | |
"group": 16, | |
"period": 5 | |
}, | |
"I": { | |
"number": 53, | |
"group": 17, | |
"period": 5 | |
}, | |
"Xe": { | |
"number": 54, | |
"group": 18, | |
"period": 5 | |
}, | |
"Cs": { | |
"number": 55, | |
"group": 1, | |
"period": 6 | |
}, | |
"Ba": { | |
"number": 56, | |
"group": 2, | |
"period": 6 | |
}, | |
"La": { | |
"number": 57, | |
"group": 3, | |
"period": 6 | |
}, | |
"Ce": { | |
"number": 58, | |
"group": 3, | |
"period": 6 | |
}, | |
"Pr": { | |
"number": 59, | |
"group": 3, | |
"period": 6 | |
}, | |
"Nd": { | |
"number": 60, | |
"group": 3, | |
"period": 6 | |
}, | |
"Pm": { | |
"number": 61, | |
"group": 3, | |
"period": 6 | |
}, | |
"Sm": { | |
"number": 62, | |
"group": 3, | |
"period": 6 | |
}, | |
"Eu": { | |
"number": 63, | |
"group": 3, | |
"period": 6 | |
}, | |
"Gd": { | |
"number": 64, | |
"group": 3, | |
"period": 6 | |
}, | |
"Tb": { | |
"number": 65, | |
"group": 3, | |
"period": 6 | |
}, | |
"Dy": { | |
"number": 66, | |
"group": 3, | |
"period": 6 | |
}, | |
"Ho": { | |
"number": 67, | |
"group": 3, | |
"period": 6 | |
}, | |
"Er": { | |
"number": 68, | |
"group": 3, | |
"period": 6 | |
}, | |
"Tm": { | |
"number": 69, | |
"group": 3, | |
"period": 6 | |
}, | |
"Yb": { | |
"number": 70, | |
"group": 3, | |
"period": 6 | |
}, | |
"Lu": { | |
"number": 71, | |
"group": 3, | |
"period": 6 | |
}, | |
"Hf": { | |
"number": 72, | |
"group": 4, | |
"period": 6 | |
}, | |
"Ta": { | |
"number": 73, | |
"group": 5, | |
"period": 6 | |
}, | |
"W": { | |
"number": 74, | |
"group": 6, | |
"period": 6 | |
}, | |
"Re": { | |
"number": 75, | |
"group": 7, | |
"period": 6 | |
}, | |
"Os": { | |
"number": 76, | |
"group": 8, | |
"period": 6 | |
}, | |
"Ir": { | |
"number": 77, | |
"group": 9, | |
"period": 6 | |
}, | |
"Pt": { | |
"number": 78, | |
"group": 10, | |
"period": 6 | |
}, | |
"Au": { | |
"number": 79, | |
"group": 11, | |
"period": 6 | |
}, | |
"Hg": { | |
"number": 80, | |
"group": 12, | |
"period": 6 | |
}, | |
"Tl": { | |
"number": 81, | |
"group": 13, | |
"period": 6 | |
}, | |
"Pb": { | |
"number": 82, | |
"group": 14, | |
"period": 6 | |
}, | |
"Bi": { | |
"number": 83, | |
"group": 15, | |
"period": 6 | |
}, | |
"Po": { | |
"number": 84, | |
"group": 16, | |
"period": 6 | |
}, | |
"At": { | |
"number": 85, | |
"group": 17, | |
"period": 6 | |
}, | |
"Rn": { | |
"number": 86, | |
"group": 18, | |
"period": 6 | |
}, | |
"Fr": { | |
"number": 87, | |
"group": 1, | |
"period": 7 | |
}, | |
"Ra": { | |
"number": 88, | |
"group": 2, | |
"period": 7 | |
}, | |
"Ac": { | |
"number": 89, | |
"group": 3, | |
"period": 7 | |
}, | |
"Th": { | |
"number": 90, | |
"group": 3, | |
"period": 7 | |
}, | |
"Pa": { | |
"number": 91, | |
"group": 3, | |
"period": 7 | |
}, | |
"U": { | |
"number": 92, | |
"group": 3, | |
"period": 7 | |
}, | |
"Np": { | |
"number": 93, | |
"group": 3, | |
"period": 7 | |
}, | |
"Pu": { | |
"number": 94, | |
"group": 3, | |
"period": 7 | |
}, | |
"Am": { | |
"number": 95, | |
"group": 3, | |
"period": 7 | |
}, | |
"Cm": { | |
"number": 96, | |
"group": 3, | |
"period": 7 | |
}, | |
"Bk": { | |
"number": 97, | |
"group": 3, | |
"period": 7 | |
}, | |
"Cf": { | |
"number": 98, | |
"group": 3, | |
"period": 7 | |
}, | |
"Es": { | |
"number": 99, | |
"group": 3, | |
"period": 7 | |
}, | |
"Fm": { | |
"number": 100, | |
"group": 3, | |
"period": 7 | |
}, | |
"Md": { | |
"number": 101, | |
"group": 3, | |
"period": 7 | |
}, | |
"No": { | |
"number": 102, | |
"group": 3, | |
"period": 7 | |
}, | |
"Lr": { | |
"number": 103, | |
"group": 3, | |
"period": 7 | |
}, | |
"Rf": { | |
"number": 104, | |
"group": 4, | |
"period": 7 | |
}, | |
"Db": { | |
"number": 105, | |
"group": 5, | |
"period": 7 | |
}, | |
"Sg": { | |
"number": 106, | |
"group": 6, | |
"period": 7 | |
}, | |
"Bh": { | |
"number": 107, | |
"group": 7, | |
"period": 7 | |
}, | |
"Hs": { | |
"number": 108, | |
"group": 8, | |
"period": 7 | |
}, | |
"Mt": { | |
"number": 109, | |
"group": 9, | |
"period": 7 | |
}, | |
"Ds": { | |
"number": 110, | |
"group": 10, | |
"period": 7 | |
}, | |
"Rg": { | |
"number": 111, | |
"group": 11, | |
"period": 7 | |
}, | |
"Cn": { | |
"number": 112, | |
"group": 12, | |
"period": 7 | |
}, | |
"Nh": { | |
"number": 113, | |
"group": 13, | |
"period": 7 | |
}, | |
"Fl": { | |
"number": 114, | |
"group": 14, | |
"period": 7 | |
}, | |
"Mc": { | |
"number": 115, | |
"group": 15, | |
"period": 7 | |
}, | |
"Lv": { | |
"number": 116, | |
"group": 16, | |
"period": 7 | |
}, | |
"Ts": { | |
"number": 117, | |
"group": 17, | |
"period": 7 | |
}, | |
"Og": { | |
"number": 118, | |
"group": 18, | |
"period": 7 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment