Đặt tên các hợp chất ion


8

Một hợp chất ion được đặt tên như vậy : (metal name) (non-metal suffixed with -ide). Dưới đây là danh sách tất cả các hậu tố cần được thay thế bằng -ide:

-on -ogen -ygen -ine -orus -ur -ic -ium

Số lượng nguyên tử của mỗi nguyên tố trong hợp chất không được sử dụng trong việc đặt tên các hợp chất ion. Bỏ qua các quy tắc đặt tên kim loại đa trị.

NaCl -> sodium + chlorine -> sodium chloride.
K2S -> potassium + sulphur -> potassium sulphide (or sulfide).
Yb2P3 -> ytterbium + phosphorus -> ytterbium phosphide.
PbTe2 -> lead + tellurium -> lead telluride.

Một chuỗi có chứa một hợp chất ion ( NaCl, K2S, Yb2P3) sẽ được cung cấp như là đầu vào. Không có ion đa nguyên tử sẽ được đưa ra. Chương trình phải xuất tên của hợp chất này.

Vì không ai muốn tự biên dịch dữ liệu bảng tuần hoàn, nên đây là một dán có tên, ký hiệu và liệu nó có phải là kim loại của mỗi thành phần hay không, theo thứ tự này : (name) (symbol) (is metal?). Bạn có thể lưu tệp này vào tệp bên ngoài (độ dài của tệp sẽ không được tính) hoặc bạn có thể lưu trữ dữ liệu trong chương trình của mình (chỉ cần giảm giá độ dài của chuỗi đó từ đó.) Bạn có thể không cần tất cả thông tin được cung cấp. Mỗi yếu tố được ngăn cách bởi một dòng mới.

Như mọi khi với các thử thách golf mã, mã ngắn nhất sẽ thắng.


1
Có phải "Bỏ qua các quy tắc đặt tên cho kim loại đa hóa trị" có nghĩa là bỏ qua "(II)" trong "clorua đồng (II)" không?
Xin vui lòng và

2
Các đặc điểm kỹ thuật và các ví dụ mâu thuẫn. Sau spec, tên sẽ được sodium chloride, potassium sulide, ytterbium phosphoridelead telluriide.
Peter Taylor

Ngoài ra, bạn chưa chỉ định định dạng đầu vào.
Peter Taylor

1
Đây thậm chí không phải là các quy tắc chính xác để đặt tên các hợp chất ion! Giáo viên hóa học của tôi sẽ không bao giờ phê duyệt.
PhiNotPi

1
Chà, câu hỏi của bạn dường như chỉ giới hạn ở các hợp chất ion có chứa hai nguyên tử, nhưng bạn không chỉ rõ điều đó. Các hợp chất ion được tạo thành từ hai loại ion độc đáo, theo tỷ lệ làm cho hợp chất trung tính. Các ion này có thể có một nguyên tử mỗi nguyên tử, hoặc chúng có thể (và thường là) các ion đa nguyên tử. Nếu bạn trộn ion amoni (NH4 +) với ion sunfat (SO4 2-), bạn sẽ nhận được amoni sunfat ((NH4) 2SO4). Tôi đoán điểm chính của tôi là bạn đang quên cả một nhóm các hợp chất ion, ngay cả khi loại trừ các tên kim loại đa hóa trị.
PhiNotPi

Câu trả lời:


1

Ruby, 114

f,s=$*[0].split /\d*(?=[A-Z]|\Z)/
puts (n=Hash[*<<X.split-%w[0 1]].invert)[f]+" "+n[s].sub(/(i..|.gen|..)\Z/,"ide")
Hydrogen H 0
Helium He 0
Lithium Li 1
Beryllium Be 1
Boron B 0
Carbon C 0
Nitrogen N 0
Oxygen O 0
Fluorine F 0
Neon Ne 0
Sodium Na 1
Magnesium Mg 1
Aluminium Al 1
Silicon Si 0
Phosphorus P 0
Sulfur S 0
Chlorine Cl 0
Argon Ar 0
Potassium K 1
Calcium Ca 1
Scandium Sc 1
Titanium Ti 1
Vanadium V 1
Chromium Cr 1
Manganese Mn 1
Iron Fe 1
Cobalt Co 1
Nickel Ni 1
Copper Cu 1
Zinc Zn 1
Gallium Ga 1
Germanium Ge 1
Arsenic As 0
Selenium Se 0
Bromine Br 0
Krypton Kr 0
Rubidium Rb 1
X

Sử dụng một đoạn dán của văn bản phần tử mà tôi chưa tính vào điểm số. Tôi xóa thẻ kim loại (vì tôi giả sử các hợp chất luôn được cung cấp cùng với kim loại trước, vì vậy tôi thực sự không cần nó) và xây dựng một từ điển với nó. Tôi xác định phần để thay thế bằng "ide" bằng cách kiểm tra phần cuối của chuỗi cho ba chữ cái bắt đầu bằng i, bốn chữ cái kết thúc bằng gen, hoặc nếu không chỉ là hai ký tự cuối cùng.


Nó làm gì của clo và phốt pho chẳng hạn?
Graham

NaCl => Natri Clorua (đáp ứng thông số kỹ thuật). Yb2P3 => Ytterbium Phosphoride (không đáp ứng thông số kỹ thuật hiện tại). Nó cũng ám chỉ Nitrogen là Nitrogide chứ không phải Nitride. Bây giờ phần "âm tiết" của thông số kỹ thuật đã biến mất, có lẽ tôi sẽ phải đánh cắp danh sách mã hóa cứng của bạn.
lịch sử

Được rồi, nên gặp lại thông số kỹ thuật.
lịch sử

1

Con trăn, 134 ký tự.

#T is a string containing the provided information on the elements
from re import*
print sub('(orus|[oy]ge|i?..)$','ide',' '.join(split(r'(\w+) %s '%e,T)[1]for e in findall('[A-Z][a-z]?',raw_input())))

T = """Hydrogen H 0
Helium He 0
Lithium Li 1
Beryllium Be 1
Boron B 0
Carbon C 0
Nitrogen N 0
Oxygen O 0
Fluorine F 0
Neon Ne 0
Sodium Na 1
Magnesium Mg 1
Aluminium Al 1
Silicon Si 0
Phosphorus P 0
Sulfur S 0
Chlorine Cl 0
Argon Ar 0
Potassium K 1
Calcium Ca 1
Scandium Sc 1
Titanium Ti 1
Vanadium V 1
Chromium Cr 1
Manganese Mn 1
Iron Fe 1
Cobalt Co 1
Nickel Ni 1
Copper Cu 1
Zinc Zn 1
Gallium Ga 1
Germanium Ge 1
Arsenic As 0
Selenium Se 0
Bromine Br 0
Krypton Kr 0
Rubidium Rb 1
Strontium Sr 1
Yttrium Y 1
Zirconium Zr 1
Niobium Nb  1
Molybdenum Mo 1
Technetium Tc 1
Ruthenium Ru 1
Rhodium Rh 1
Palladium Pd 1
Silver Ag 1
Cadmium Cd 1
Indium In 1
Tin Sn 1
Antimony Sb 1
Tellurium Te 0
Iodine I 0
Xenon Xe 0
Cesium Cs 1
Barium Ba 1
Lanthanum La 1
Cerium Ce 1
Praseodymium Pr 1
Neodymium Nd 1
Promethium Pm 1
Samarium Sm 1
Europium Eu 1
Gadolinium Gd 1
Terbium Tb 1
Dysprosium Dy 1
Holmium Ho 1
Erbium Er 1
Thulium Tm 1
Ytterbium Yb 1
Lutetium Lu 1
Hafnium Hf 1
Tantalum Ta 1
Tungsten W 1
Rhenium Re 1
Osmium Os 1
Iridium Ir 1
Platinum Pt 1
Gold Au 1
Mercury Hg 1
Thallium Tl 1
Lead Pb 1
Bismuth Bi 1
Polonium Po 1
Astatine At 0
Radon Rn 0
Francium Fr 1
Radium Ra 1
Actinium Ac 1
Thorium Th 1
Protactinium Pa 1
Uranium U 1
Neptunium Np 1
Plutonium Pu 1
Americium Am 1
Curium Cm 1
Berkelium Bk 1
Californium Cf 1
Einsteinium Es 1
Fermium Fm 1
Mendelevium Md 1
Nobelium No 1
Lawrencium Lr 1
Rutherfordium Rf 1
Dubnium Db 1
Seaborgium Sg 1
Bohrium Bh 1
Hassium Hs 1
Meitnerium Mt 1
Darmstadtium Ds 1
Roentgenium Rg 1
Copernicium Cp 1
Ununtrium Uut 0
Flerovium Fl 0
Ununpentium Uup 0
Livermorium Lv 0
Ununseptium Uus 0
Ununoctium Uuo 0"""

0

APL 142 150

Nếu tôi được phép lưu trữ các tên phần tử và ký hiệu trong một cặp mảng lồng nhau trong không gian làm việc APL thì đoạn mã sau sẽ làm điều đó:

(e[s⍳c[1]]),((∊¯1×((+/¨⍳¨i)=+/¨(¯1×i)↑¨t⍳¨⊂n)/i←⍴¨t←'ic' 'on' 'ur' 'ine' 'ium' 'ogen' 'ygen' 'orus')↓n←∊e[s⍳(c←(98>⎕av⍳c)⎕penclose c←⍞~⍕⍳9)[2]]),'ide'

Nó hoạt động đại khái như sau:

c←(98>⎕av⍳c)⎕penclose c←⍞~⍕⍳9

Đưa đầu vào từ màn hình qua và chia tên hóa học thành các ký hiệu và loại bỏ bất kỳ số nào

e [s⍳c [1]]

Tra cứu tên phần tử đầu tiên từ biểu tượng của nó. Tương tự cho c [2]

(∊¯1×((+/¨⍳¨i)=+/¨(¯1×i)↑¨t⍳¨⊂n)/i←⍴¨t←'ic' 'on' 'ur' 'ine' 'ium' 'ogen' 'ygen' 'orus')↓n

Xác định cái nào trong số tám kết thúc có thể mà phi kim có và loại bỏ nó và sau đó thay thế nó bằng ide thông qua:

,'ide'

Không có bẫy lỗi vì vậy chỉ hoạt động đối với các hợp chất hợp lệ được xác định thông qua định danh một hoặc không trong danh sách các yếu tố được cung cấp.


không oxygen -> oxidehay hydrogen -> hydridelàm việc
beary605

@ gấu605. Họ đã không làm nhưng họ làm bây giờ - cảm ơn.
Graham

0

Toán học 252 267 254

ElementData[]chứa thông tin về các yếu tố; nó có nguồn gốc từ Mathicala.

d=ElementData; a=Reverse@SortBy[d[#,"Abbreviation"]&/@d[],StringLength[#]&];
g[e_]:=Row[{e," \[RightArrow] ", p=Row[z=(d[#,"StandardName"] &/@StringCases[e,a]),
  " + " ] , " \[RightArrow] ",p[[1,1]]<> " "<>StringReplace[p[[1,2]],
  f__~~z:"on"|"ogen"|"ygen"|"ine"|"orus"|"ur"|"ic"|"ium":> f~~"ide"] }]

Ví dụ

g["NaCl"]
g["K2S"]
g["Yb2P3"]
g["PbTe2"]

Các hợp chất


Giải trình

Mã này loại bỏ các chữ số khỏi hợp chất, sau đó phân tách các thành phần bằng tên viết tắt của chúng. Sau đó, nó chuyển đổi các chữ viết tắt thành tên tiêu chuẩn của các yếu tố. Cuối cùng, nó thay thế phi kim bằng thuật ngữ bằng hậu tố chính xác.


Bạn không cần các kim loại đa trị trong đầu ra PbTe2, lead telluridesẽ đủ.
beary605
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.