আয়নিক যৌগিক গল্ফ


12

চ্যালেঞ্জ

দুটি ইনপুট, একটি ধনাত্মক আয়ন এবং negativeণাত্মক আয়ন প্রদত্ত, আপনাকে আয়নিক যৌগের সূত্রটি আউটপুট করতে হবে যা দুটি আয়ন থেকে তৈরি হবে। এর মূল অর্থ চার্জগুলি ভারসাম্যপূর্ণ করা যাতে তারা শূন্যের সমান হয়।

সাবস্ক্রিপ্ট সংখ্যার সাথে সূত্রটি ফর্ম্যাট করতে বিরক্ত করবেন না, তবে আপনার অবশ্যই মাল্টি-অ্যাটম আয়নগুলির (যেমন NO3) জন্য বন্ধনী রাখতে হবে ।

আপনার কোনও ত্রুটির জন্য অ্যাকাউন্ট করতে হবে না (উদাহরণস্বরূপ, কেউ যদি দুটি নেতিবাচক আয়ন স্থাপন করে তবে আপনি কেবল প্রোগ্রামটি ব্যর্থ হতে পারেন)।

দ্রষ্টব্য: 3+ এর চার্জ নিতে Fe নিন

আয়ন

যে সমস্ত আয়নগুলির জন্য অ্যাকাউন্টিং করা দরকার সেগুলির সবগুলিই একিউএ জিসিএসই কেমিস্ট্রি ডেটা শীটের দ্বিতীয় অংশে তাদের চার্জের সাথে পাওয়া যায় ।

ইতিবাচক আয়নগুলি

  • এইচ +

  • না +

  • আগ +

  • কে +

  • লি +

  • এনএইচ 4 +

  • বা 2+

  • Ca 2+

  • 2+

  • এমজি 2+

  • জেডএন 2+

  • পিবি 2+

  • ফে 3+

  • আল 3+

নেতিবাচক আয়নগুলি

  • সিএল -

  • বিআর -

  • -

  • আমি -

  • ওহ -

  • কোন 3 -

  • 2-

  • এস 2-

  • এসও 4 2-

  • সিও 3 2-

উদাহরণ

কিছু উদাহরণ:

এইচ এবং ফিরে:H2O

Ca এবং CO 3 রিটার্ন: -CaCO3

আল এবং এসও 4 রিটার্ন দেয়: -Al2(SO4)3

নিম্নলিখিত ক্ষেত্রে নোট করুন যার জন্য আপনার অবশ্যই অ্যাকাউন্ট করতে হবে:

এইচ এবং ওএইচ ফিরে: - H2O না H(OH)


ইতিবাচক আয়নটি কি সর্বদা প্রথম তালিকাভুক্ত থাকে?
xnor

Fe2+ বা 3+ এর চার্জ কি আছে?
ডোরকনবব

@ এক্সনর না, তারা স্যুইচ করতে পারে
বিটা

এটি আমার এক বছর আগে আমার রসায়ন ক্লাসটির কথা মনে করিয়ে দেয়। জিনিসগুলিতে ভারসাম্য বজায় রাখা ...
স্পিক্যাট্রিক্স

আমি ধরে নিলাম বন্ধুর প্রয়োজন যখন প্রয়োজন হয় এবং শুধুমাত্র যখন প্রয়োজন হয়। সঠিক?
স্তর নদী সেন্ট

উত্তর:


0

সিজেম, 176 বাইট

"O S SO4 CO3 ""Cl Br F I OH NO3 """"H Na Ag K Li NH4 ""Ba Ca Cu Mg Zn Pb ""Fe Al "]_2{r\1$S+f#Wf=0#((z@}*_2$*_4=2*-_@/\@/@\]2/{~_({1$1>_el={'(@@')\}|0}&;}/]s"HOHH"1$#){;"H2O"}&

এটি অনলাইনে চেষ্টা করুন

এটি কিছুটা বেদনাদায়ক ছিল, বিশেষত বন্ধনীগুলির জন্য সমস্ত বিশেষ ক্ষেত্রে, গণনাগুলি, H2O ইত্যাদি দেখানো with

ডেটা একটি সুপার কমপ্যাক্ট ফর্ম্যাটে নেই। এটি আরও ছাঁটাই করা যেতে পারে, তবে এটির ব্যাখ্যা করার জন্য প্রয়োজনীয় কোডটি সম্ভবত সঞ্চয়টির ক্ষতিপূরণ করবে। সুতরাং আমি স্ট্রিংগুলির একটি অ্যারে নিয়ে গেলাম, যেখানে প্রতিটি স্ট্রিং-এ একই চার্জযুক্ত অণু থাকে, -2 থেকে +3 (যেখানে 0 এর স্ট্রিং ফাঁকা থাকে) অর্ডার করা হয়।

ব্যাখ্যা:

[..]  Data, as explained above.
_     Duplicate data, will need it for both inputs.
2{    Loop over two inputs.
  r     Get input.
  \     Swap data to top.
  1$    Copy input to top (keep original for later).
  S+    Add a space to avoid ambiguity when searching in data.
  f#    Search for name in all strings of data.
  Wf=   Convert search results to truth values by comparing them to -1.
  0#    Find the 0 entry, which gives the index of the matching string.
  ((    Subtract 2, to get charge in range [-2, 3] from index.
  z     Absolute value, we don't really care about sign of charge.
  @     Swap second copy of data table to proper position for next input.
}*    End loop over two inputs.
_2$*  Multiply the two charges.
_4=   We need the LCM. But for the values here, only product 4 is not the LCM.
2*-   So change it to 2.
_@/   Divide LCM by first charge to get first count.
\@/   Divide LCM by second charge to get second count.
@\]2/ Make pairs of name/count for both ions...
{     ... and loop over the pairs.
  ~     Unpack the pair.
  _(    Check if count is > 1.
  {       Handle count > 1.
    1$    Get copy of name to top of stack.
    1>    Slice off first character to check if rest contains upper case.
    _el   Create lower case copy.
    =     If they are different, there are upper case letters.
    {       Handle case where parentheses are needed.
      '(    Opening parentheses.
      @@    Some stack shuffling to get values in place.
      ')    Closing parentheses.
      \     And one more swap to place count after parentheses.
    }|    End parentheses handling.
    0     Push dummy value to match stack layout of other branch.
  }&    End count handling.
  ;     Pop unused count off stack.
}/    End loop over name/count pairs.
]s    Pack stack content into single string, for H2O handling.
"HOHH"  String that contains both HOH and OHH, which need to be H2O.
1$#)  Check if output is in that string.
{     If yes, replace with H2O.
  ;     Drop old value.
  "H2O" And make it H2O instead.
}&    End of H2O handling.

2

লুয়া , 174 242 বাইট

আমি বন্ধনীগুলি ভুলে গেছি '-_-, যা আমাকে ২৪২ পর্যন্ত পেয়েছে Oh

i,c,a={Ba=2,Ca=2,Cu=2,Mg=2,Zn=2,Pb=2,Fe=3,Al=3,O=2,S=2,SO4=2,CO3=2},io.read(),io.read()
p,d=i[c]~=i[a],{SO4=1,NO3=1,OH=1,CO3=1}
k,m=p and i[c]or'',p and i[a]or''
a=k==m and a or (d[a]and'('..a..')'or a)
print(c..a=='HOH'and'H2O'or c..m..a..k)

এটি অনলাইন চেষ্টা করুন!

পুরনো সংস্করণ:

i,c,a={Ba=2,Ca=2,Cu=2,Mg=2,Zn=2,Pb=2,Fe=3,Al=3,O=2,S=2,SO4=2,CO3=2},io.read(),io.read()
p=i[c]~=i[a]
k,m=p and i[c]or'',p and i[a]or''
print(c..a=='HOH'and'H2O'or c..m..a..k)

লুয়ার প্রবণতা অপব্যবহার করে নীল মান দিয়ে সবকিছু শুরু করার জন্য আমরা স্টোরেজ ব্যয় হ্রাস করতে পারি। তবুও লুয়া এখনও খানিকটা আড়ষ্ট :(


আপনার আউটপুট এটিতে প্রথম বন্ধনী থাকার সমর্থন করা উচিত। সুতরাং Alএবং SO4আউটপুট করা উচিত Al2(SO4)3, কিন্তু আপনি আউটপুট Al2SO43অনলাইনে এটি ব্যবহার করে দেখুন
mbomb007

হ্যাঁ, কেবল বুঝতে পেরেছিলাম যে আমি পাঠানোর জন্য 5 মিনিটের পরে। '-_-। এটি এখন কাজ করা উচিত।
সার্জেন্ট

যখন এটির প্রয়োজন হয় না তখন এটি পেরেনকে আউটপুট করে। চেষ্টা করুন Caএবং CO3। এছাড়াও, আপনার উত্তরের সাথে টিআইও লিঙ্কটি যুক্ত করা উচিত।
mbomb007

সেখানে! দুঃখিত, আমি টিআইও জিনিস সম্পর্কে জানতাম না। আমার খারাপ।
সার্জেন্ট

2
এটি আপনার কোডটি চালানো ব্যবহারকারীদের পক্ষে কেবল সহায়ক।
mbomb007

1

জাভা ( 619 647 667 বাইট)

[স্থির] আপডেট: এইচ + ওএইচটি এইচওএইচ প্রদান করে যদিও আমি এটিকে কঠোরভাবে কোডড না করে .... এতে কাজ করে

[স্থির] আপডেট: কখনও কখনও প্যারেন্টেসিস যখন উপস্থিত না হয় তখন উপস্থিত হয়

কোড

String f(String[]a){if(Arrays.equals(a,new String[]{"H","OH"})|Arrays.equals(a,new String[]{"OH","H"}))return "H2O";List<String>b=Arrays.asList(new String[]{"H","Na","Ag","K","Li","NH4","Ba","Ca","Cu","Mg","Zn","Pb","Fe","Al","Cl","Br","F","I","OH","NO3","O","S","SO4","CO3"});Integer[]c={1,1,1,1,1,1,2,2,2,2,2,2,3,3,1,1,1,1,1,1,2,2,2,2},d={5,18,19,22,23};List<Integer>j=Arrays.asList(d);int e=b.indexOf(a[0]),f=b.indexOf(a[1]),g=c[e],h=c[f],i;if(f<e){String p=a[0];a[0]=a[1];a[1]=p;i=g;g=h;h=i;i=e;e=f;f=i;}boolean k=j.contains(e),l=j.contains(f),m=g==h,n=g==1,o=h==1;return (k&!m&!o?"("+a[0]+")":a[0])+(m?"":h==1?"":h)+(l&!m&!n?"("+a[1]+")":a[1])+(m?"":g==1?"":g);}

প্রতিটি আয়ন চার্জে কঠোর কোডিং না করে কীভাবে এটি করবেন তা নিশ্চিত ছিলাম না, তাই এটি দীর্ঘ হওয়া পর্যন্ত শেষ হয়েছিল। ভাগ্যবান কারণ হিসাবে সমস্ত চার্জ 1, 2 বা 3 হয় তাই প্রতিটি আয়নটির পরিমাণ সন্ধান করা সহজ।

সম্প্রসারিত

import java.util.Arrays;
import java.util.List;
public class Compound {
    public static void main(String[]a){
        //System.out.println(f(a));
        String[] pos = new String[]{"H","Na","Ag","K","Li","NH4","Ba","Ca","Cu","Mg","Zn","Pb","Fe","Al"};
        String[] neg = new String[]{"Cl","Br","F","I","OH","NO3","O","S","SO4","CO3"};
        for(int i = 0; i < pos.length; i++){
            for(int j = 0; j < neg.length; j++){
                System.out.println(pos[i] + " + " + neg[j] + " = " + f(new String[]{pos[i],neg[j]}));
                System.out.println(neg[j] + " + " + pos[i] + " = " + f(new String[]{neg[j],pos[i]}));
            }
        }
    }
    static String f(String[]a){
        if(Arrays.equals(a,new String[]{"H","OH"})|Arrays.equals(a,new String[]{"OH","H"}))
            return "H2O";
        List<String>b=Arrays.asList(new String[]{"H","Na","Ag","K","Li","NH4","Ba","Ca","Cu","Mg","Zn","Pb","Fe","Al","Cl","Br","F","I","OH","NO3","O","S","SO4","CO3"});
        Integer[]c={1,1,1,1,1,1,2,2,2,2,2,2,3,3,1,1,1,1,1,1,2,2,2,2},d={5,18,19,22,23};
        List<Integer>j=Arrays.asList(d);
        int e=b.indexOf(a[0]),f=b.indexOf(a[1]),g=c[e],h=c[f],i;
        if(f<e){String p=a[0];a[0]=a[1];a[1]=p;i=g;g=h;h=i;i=e;e=f;f=i;}
        boolean k=j.contains(e),l=j.contains(f),m=g==h,n=g==1,o=h==1;
        return (k&!m&!o?"("+a[0]+")":a[0])+(m?"":o?"":h)+(l&!m&!n?"("+a[1]+")":a[1])+(m?"":n?"":g);
    }
}

এখানে চেষ্টা করুন

উপাত্ত

তাদের কোনওটি ভুল হলে আমাকে জানান

H + Cl = HCl
Cl + H = HCl
H + Br = HBr
Br + H = HBr
H + F = HF
F + H = HF
H + I = HI
I + H = HI
H + OH = H2O
OH + H = H2O
H + NO3 = HNO3
NO3 + H = HNO3
H + O = H2O
O + H = H2O
H + S = H2S
S + H = H2S
H + SO4 = H2SO4
SO4 + H = H2SO4
H + CO3 = H2CO3
CO3 + H = H2CO3
Na + Cl = NaCl
Cl + Na = NaCl
Na + Br = NaBr
Br + Na = NaBr
Na + F = NaF
F + Na = NaF
Na + I = NaI
I + Na = NaI
Na + OH = NaOH
OH + Na = NaOH
Na + NO3 = NaNO3
NO3 + Na = NaNO3
Na + O = Na2O
O + Na = Na2O
Na + S = Na2S
S + Na = Na2S
Na + SO4 = Na2SO4
SO4 + Na = Na2SO4
Na + CO3 = Na2CO3
CO3 + Na = Na2CO3
Ag + Cl = AgCl
Cl + Ag = AgCl
Ag + Br = AgBr
Br + Ag = AgBr
Ag + F = AgF
F + Ag = AgF
Ag + I = AgI
I + Ag = AgI
Ag + OH = AgOH
OH + Ag = AgOH
Ag + NO3 = AgNO3
NO3 + Ag = AgNO3
Ag + O = Ag2O
O + Ag = Ag2O
Ag + S = Ag2S
S + Ag = Ag2S
Ag + SO4 = Ag2SO4
SO4 + Ag = Ag2SO4
Ag + CO3 = Ag2CO3
CO3 + Ag = Ag2CO3
K + Cl = KCl
Cl + K = KCl
K + Br = KBr
Br + K = KBr
K + F = KF
F + K = KF
K + I = KI
I + K = KI
K + OH = KOH
OH + K = KOH
K + NO3 = KNO3
NO3 + K = KNO3
K + O = K2O
O + K = K2O
K + S = K2S
S + K = K2S
K + SO4 = K2SO4
SO4 + K = K2SO4
K + CO3 = K2CO3
CO3 + K = K2CO3
Li + Cl = LiCl
Cl + Li = LiCl
Li + Br = LiBr
Br + Li = LiBr
Li + F = LiF
F + Li = LiF
Li + I = LiI
I + Li = LiI
Li + OH = LiOH
OH + Li = LiOH
Li + NO3 = LiNO3
NO3 + Li = LiNO3
Li + O = Li2O
O + Li = Li2O
Li + S = Li2S
S + Li = Li2S
Li + SO4 = Li2SO4
SO4 + Li = Li2SO4
Li + CO3 = Li2CO3
CO3 + Li = Li2CO3
NH4 + Cl = NH4Cl
Cl + NH4 = NH4Cl
NH4 + Br = NH4Br
Br + NH4 = NH4Br
NH4 + F = NH4F
F + NH4 = NH4F
NH4 + I = NH4I
I + NH4 = NH4I
NH4 + OH = NH4OH
OH + NH4 = NH4OH
NH4 + NO3 = NH4NO3
NO3 + NH4 = NH4NO3
NH4 + O = (NH4)2O
O + NH4 = (NH4)2O
NH4 + S = (NH4)2S
S + NH4 = (NH4)2S
NH4 + SO4 = (NH4)2SO4
SO4 + NH4 = (NH4)2SO4
NH4 + CO3 = (NH4)2CO3
CO3 + NH4 = (NH4)2CO3
Ba + Cl = BaCl2
Cl + Ba = BaCl2
Ba + Br = BaBr2
Br + Ba = BaBr2
Ba + F = BaF2
F + Ba = BaF2
Ba + I = BaI2
I + Ba = BaI2
Ba + OH = Ba(OH)2
OH + Ba = Ba(OH)2
Ba + NO3 = Ba(NO3)2
NO3 + Ba = Ba(NO3)2
Ba + O = BaO
O + Ba = BaO
Ba + S = BaS
S + Ba = BaS
Ba + SO4 = BaSO4
SO4 + Ba = BaSO4
Ba + CO3 = BaCO3
CO3 + Ba = BaCO3
Ca + Cl = CaCl2
Cl + Ca = CaCl2
Ca + Br = CaBr2
Br + Ca = CaBr2
Ca + F = CaF2
F + Ca = CaF2
Ca + I = CaI2
I + Ca = CaI2
Ca + OH = Ca(OH)2
OH + Ca = Ca(OH)2
Ca + NO3 = Ca(NO3)2
NO3 + Ca = Ca(NO3)2
Ca + O = CaO
O + Ca = CaO
Ca + S = CaS
S + Ca = CaS
Ca + SO4 = CaSO4
SO4 + Ca = CaSO4
Ca + CO3 = CaCO3
CO3 + Ca = CaCO3
Cu + Cl = CuCl2
Cl + Cu = CuCl2
Cu + Br = CuBr2
Br + Cu = CuBr2
Cu + F = CuF2
F + Cu = CuF2
Cu + I = CuI2
I + Cu = CuI2
Cu + OH = Cu(OH)2
OH + Cu = Cu(OH)2
Cu + NO3 = Cu(NO3)2
NO3 + Cu = Cu(NO3)2
Cu + O = CuO
O + Cu = CuO
Cu + S = CuS
S + Cu = CuS
Cu + SO4 = CuSO4
SO4 + Cu = CuSO4
Cu + CO3 = CuCO3
CO3 + Cu = CuCO3
Mg + Cl = MgCl2
Cl + Mg = MgCl2
Mg + Br = MgBr2
Br + Mg = MgBr2
Mg + F = MgF2
F + Mg = MgF2
Mg + I = MgI2
I + Mg = MgI2
Mg + OH = Mg(OH)2
OH + Mg = Mg(OH)2
Mg + NO3 = Mg(NO3)2
NO3 + Mg = Mg(NO3)2
Mg + O = MgO
O + Mg = MgO
Mg + S = MgS
S + Mg = MgS
Mg + SO4 = MgSO4
SO4 + Mg = MgSO4
Mg + CO3 = MgCO3
CO3 + Mg = MgCO3
Zn + Cl = ZnCl2
Cl + Zn = ZnCl2
Zn + Br = ZnBr2
Br + Zn = ZnBr2
Zn + F = ZnF2
F + Zn = ZnF2
Zn + I = ZnI2
I + Zn = ZnI2
Zn + OH = Zn(OH)2
OH + Zn = Zn(OH)2
Zn + NO3 = Zn(NO3)2
NO3 + Zn = Zn(NO3)2
Zn + O = ZnO
O + Zn = ZnO
Zn + S = ZnS
S + Zn = ZnS
Zn + SO4 = ZnSO4
SO4 + Zn = ZnSO4
Zn + CO3 = ZnCO3
CO3 + Zn = ZnCO3
Pb + Cl = PbCl2
Cl + Pb = PbCl2
Pb + Br = PbBr2
Br + Pb = PbBr2
Pb + F = PbF2
F + Pb = PbF2
Pb + I = PbI2
I + Pb = PbI2
Pb + OH = Pb(OH)2
OH + Pb = Pb(OH)2
Pb + NO3 = Pb(NO3)2
NO3 + Pb = Pb(NO3)2
Pb + O = PbO
O + Pb = PbO
Pb + S = PbS
S + Pb = PbS
Pb + SO4 = PbSO4
SO4 + Pb = PbSO4
Pb + CO3 = PbCO3
CO3 + Pb = PbCO3
Fe + Cl = FeCl3
Cl + Fe = FeCl3
Fe + Br = FeBr3
Br + Fe = FeBr3
Fe + F = FeF3
F + Fe = FeF3
Fe + I = FeI3
I + Fe = FeI3
Fe + OH = Fe(OH)3
OH + Fe = Fe(OH)3
Fe + NO3 = Fe(NO3)3
NO3 + Fe = Fe(NO3)3
Fe + O = Fe2O3
O + Fe = Fe2O3
Fe + S = Fe2S3
S + Fe = Fe2S3
Fe + SO4 = Fe2(SO4)3
SO4 + Fe = Fe2(SO4)3
Fe + CO3 = Fe2(CO3)3
CO3 + Fe = Fe2(CO3)3
Al + Cl = AlCl3
Cl + Al = AlCl3
Al + Br = AlBr3
Br + Al = AlBr3
Al + F = AlF3
F + Al = AlF3
Al + I = AlI3
I + Al = AlI3
Al + OH = Al(OH)3
OH + Al = Al(OH)3
Al + NO3 = Al(NO3)3
NO3 + Al = Al(NO3)3
Al + O = Al2O3
O + Al = Al2O3
Al + S = Al2S3
S + Al = Al2S3
Al + SO4 = Al2(SO4)3
SO4 + Al = Al2(SO4)3
Al + CO3 = Al2(CO3)3
CO3 + Al = Al2(CO3)3

বিঃদ্রঃ

আমি পাইথ থেকে শুরু করেছিলাম, কিন্তু তারপরে আমি আদেশ এবং প্রথম বন্ধনে বিরক্ত হয়েছি, যদি কেউ এটি শেষ করতে চায় তবে আমার কাছে যা ছিল তা এখানে

=G["H" "Na" "Ag" "K" "Li" "NH4" "Ba" "Ca" "Cu" "Mg" "Zn" "Pb" "Fe" "Al" "Cl" "Br" "F" "I" "OH" "NO3" "O" "S" "SO4" "CO3" 1 1 1 1 1 1 2 2 2 2 2 2 3 3 1 1 1 1 1 1 2 2 2 2)J@G+24xG@QZK@G+24xG@Q1@QZ?kqJKK@Q1?kqJKJ

কি সমস্যা ছিলো Hএবং OH?
বিটা ক্ষয়

এটি ঠিক আছে, এটি H + OH =
HOH

আমার অর্থ এটি কী ছিল যা এইচ 20 এর পরিবর্তে এইচওএইচ ফিরিয়েছিল?
বিটা ক্ষয়

দেখে মনে হচ্ছে কিছু নিয়মবিহীন বন্ধনী রয়েছে, আমি যেভাবে নিয়মগুলি পড়ি। উদাহরণস্বরূপ, মধ্যে H + SO4, আমি মনে করি ফলাফলটি প্রথম H2SO4বন্ধনী ছাড়াই হওয়া উচিত ।
রেটো কোরাাদি

@ রিটোকোরাদি আপনার মন্তব্যটি পড়ার আগে আমি লক্ষ্য করেছি, তবে এটি এখনই ঠিক করা হয়েছে। ধন্যবাদ।
সেএমএক্সসু

0

জাভাস্ক্রিপ্ট (ES6), 316 277 বাইট

আমি বিশ্বায়িত থাকেন pএবং nসহজ পরীক্ষার জন্য ভেরিয়েবল (ঠিক মত CoffeeScript করেছিল)। ভেরিয়েবল স্থানীয়করণ অক্ষর গণনায় একটি পার্থক্য করতে পারে না।

f=(x,y)=>{i='indexOf',d='~NH4KNaAgLiBa~CaCuMgZnPbFeAlSO4CO3ClBrFIOHNO3',k=d[i](x),l=d[i](y),a=k<28?x:y,b=k<28?y:x,r=Math.ceil(k/11)-1,s=b=='F'?0:l<32;if(r==s)r=s=0;a=s&&a=='NH4'?'(NH4)':a;b=r&&/[A-Z]{2}/.test(b)?`(${b})`:b;return'H'==a&&b=='OH'?'H2O':a+(s?s+1:'')+b+(r?r+1:'')}


// Original attempt, 316 bytes
p={H:1,Na:1,Ag:1,K:1,Li:1,NH4:1,Ba:2,Ca:2,Cu:2,Mg:2,Zn:2,Pb:2,Fe:3,Al:3},n={Cl:1,Br:1,F:1,I:1,OH:1,NO3:1,O:2,S:2,SO4:2,CO3:2},f=(x,y)=>{a=p[x]?x:y,b=p[x]?y:x,z=p[a]==2&&n[b]==2,r=+z||n[b],s=+z||p[a];a=--r&&a=='NH4'?'(NH4)':a;b=--s&&/[A-Z]{2}/.test(b)?`(${b})`:b;return'H'==a&&b=='OH'?'H2O':a+(r?r+1:'')+b+(s?s+1:'')}

ES5 ভেরিয়েন্ট, 323 284 বাইট

তীর ফাংশন এবং টেম্পলেট স্ট্রিং থেকে মুক্তি পাওয়ার চেয়ে খুব বেশি পরিবর্তন নয়:

f=function(x,y){i='indexOf',d='~NH4KNaAgLiBa~CaCuMgZnPbFeAlSO4CO3ClBrFIOHNO3',k=d[i](x),l=d[i](y),a=k<28?x:y,b=k<28?y:x,r=Math.ceil(k/11)-1,s=b=='F'?0:l<32;if(r==s)r=s=0;a=s&&a=='NH4'?'(NH4)':a;b=r&&/[A-Z]{2}/.test(b)?'('+b+')':b;return'H'==a&&b=='OH'?'H2O':a+(s?s+1:'')+b+(r?r+1:'')}


// Original attempt, 323 bytes
p={H:1,Na:1,Ag:1,K:1,Li:1,NH4:1,Ba:2,Ca:2,Cu:2,Mg:2,Zn:2,Pb:2,Fe:3,Al:3},n={Cl:1,Br:1,F:1,I:1,OH:1,NO3:1,O:2,S:2,SO4:2,CO3:2},f=function(x,y){a=p[x]?x:y,b=p[x]?y:x,z=p[a]==2&&n[b]==2,r=+z||n[b],s=+z||p[a];a=--r&&a=='NH4'?'(NH4)':a;b=--s&&/[A-Z]{2}/.test(b)?'('+b+')':b;return'H'==a&&b=='OH'?'H2O':a+(r?r+1:'')+b+(s?s+1:'')}


0

কফিস্ক্রিপ্ট, 371 333 বাইট

এই গণনায় নিউলাইনগুলি অন্তর্ভুক্ত রয়েছে (কিছু নিউলাইনগুলি সেমিকোলনগুলির সাথে প্রতিস্থাপন করা যেতে পারে তবে এটি চরিত্রের গণনায় প্রভাব ফেলবে না)

f=(x,y)->(i='indexOf';d='~NH4KNaAgLiBa~CaCuMgZnPbFeAlSO4CO3ClBrFIOHNO3';k=d[i] x;r=-1+Math.ceil k/11;l=d[i] y;a=if k<28then x else y
b=if k<28then y else x
s=if b=='F'then 0else 32>l
r=s=0if r==s;a='(NH4)'if'NH4'==a&&s;b='('+b+')'if/[A-Z]{2}/.test(b)&&r;if'H'==a&&b=='OH'then'H2O'else a+(if!s then''else 1+s)+b+(if!r then''else 1+r))

# Original attempt, 371 bytes
p={H:1,Na:1,Ag:1,K:1,Li:1,NH4:1,Ba:2,Ca:2,Cu:2,Mg:2,Zn:2,Pb:2,Fe:3,Al:3}
n={Cl:1,Br:1,F:1,I:1,OH:1,NO3:1,O:2,S:2,SO4:2,CO3:2}
f=(x,y)->(a=if p[x]then x else y
b=if p[x]then y else x
z=p[a]==n[b]==2;r=+z||n[b];s=+z||p[a];if--r&&a=='NH4'then a='(NH4)'
if--s&&/[A-Z]{2}/.test(b)then b='('+b+')'
if'H'==a&&b=='OH'then'H2O'else a+(if!r then''else r+1)+b+(if!s then''else s+1))

0

সিজেএম (137 বাইট)

{{"SO4CO3ClBrFINO3OHNaAgKLiNH4BaCaCuMgZnPbFeAl":I\#~}$_s"HOH"="HO"1/@?_{I\#G-_0<B*-B/_W>+z}%_~1$=\1?f/W%[.{:T1>{_{'a<},,1>{'(\')}*T}*}]s}

এটি একটি বেনামে ব্লক (ফাংশন) যা তালিকায় মোড়ানো দুটি স্ট্রিং হিসাবে দুটি আয়ন নেয় এবং একটি স্ট্রিং প্রদান করে।

অনলাইন ডেমো

ব্যবচ্ছেদ

{                        e# Begin a block
  {                      e#   Sort the input list
    "SO4...Al"           e#     Ions in ascending order of charge
    :I                   e#     Stored as I for future reuse
    \#~                  e#     Index and bit-invert to sort descending
  }$

  _s"HOH"="HO"1/@?       e#   Special case for water: replace ["H" "OH"] with ["H" "O"]

  _{I\#G-_0<B*-B/_W>+z}% e#   Copy the list and hash index in I to find the charges
  _~1$=\1?f/             e#   Replace [2 2] by [1 1]
  W%                     e#   Reverse the charges
  [                      e#   Gather in an array
    .{                   e#   Pairwise for each ion and its opponent's reduced charge...
      :T1>{              e#     If the charge (copied to T) is greater than 1
        _{'a<},,         e#       Count the characters in the ion which are before 'a'
        1>{'(\')}*       e#       If there's more than one, add some parentheses
        T                e#       Append T
      }*
    }
  ]
  s                      e#   Flatten the list to a single string
}

0

পাইথন 3 , 364 বাইট

আয়নগুলিকে index+12-ডি অ্যারে হিসাবে তাদের চার্জের নিখুঁত মান দ্বারা সঞ্চয় করে (0-সূচক উপাদানগুলিতে + - 1 চার্জ ইত্যাদি থাকে)। সেখানে কয়েকটি অক্ষর সংরক্ষণ করতে স্ট্রিং.স্প্লিট () ব্যবহার করে। H + OH = H2Oপ্রথমটির বিশেষ কেস পরিচালনা করে , তারপরে এটি চার্জের LCM হিসাবে তার চার্জের দ্বারা বিভাজন করে প্রতিটি ধরণের কত আয়ন প্রয়োজন তা গণনা করে। তারপরে আধিগুলির আসল সংখ্যার পাশাপাশি প্রয়োজনে প্রথম বন্ধনী যুক্ত করুন।

from math import*
o=["NH4 NO3 H Na Ag K Li OH I F Br Cl".split(),"CO3 SO4 Ba Ca Cu Mg Zn Pb S O".split(),["Fe","Al"]]
p=["H","OH"]
def c(i):
 for h,k in enumerate(o):
  if i in k:return-~h
def b(x,y):
 if x in p and y in p:return"H20"
 i,j=c(x),c(y);g=gcd(i,j);i//=g;j//=g;return((x,"(%s)"%x)[x[-1]in"34"]+str(j),x)[j==1]+((y,"(%s)"%y)[y[-1]in"34"]+str(i),y)[i==1]

এটি অনলাইন চেষ্টা করুন!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.