অসন্তুষ্টির ডিগ্রি


11

অসন্তুষ্টির ডিগ্রি

এটি কোনও বিশেষ কোডের ধাঁধা নয় - তবে আপনার এটি সমাধানের একাধিক উপায়গুলি দেখতে আমি আগ্রহী।

আনস্যাচুরেশন ডিগ্রি হ'ল পরমাণুর মধ্যে দ্বৈত রাসায়নিক বন্ধনের সংখ্যা এবং / বা রাসায়নিক যৌগের সংখ্যাটি বেজে যায়।

আপনাকে XaYbZc আকারে রাসায়নিক যৌগের আণবিক সূত্র দেওয়া হবে (যেখানে a, b এবং c যৌগের X, Y বা Z এর পরমাণুর সংখ্যা) - সূত্রটি কোনও দৈর্ঘ্যের হতে পারে এবং কোনও রাসায়নিক উপাদান থাকতে পারে পর্যায় সারণীতে (যদিও সি, এইচ, এন, এফ, সি, বি, এল বাদে অন্যান্য উপাদানগুলিতে সূত্রের বৈশিষ্ট্য না থাকায় আমি উপেক্ষিত হতে পারি)। যৌগটিতে কমপক্ষে একটি কার্বন থাকবে। আপনাকে অবশ্যই এটির অসম্পৃক্তির ডিগ্রি গণনা করতে হবে এবং প্রদর্শন করতে হবে।

উদাহরণস্বরূপ, যৌগিক বেনজিনের (নীচে চিত্রযুক্ত) 4 টির একটি ডিউইউ রয়েছে কারণ এটিতে তিনটি ডাবল বন্ড রয়েছে (পরমাণুর মধ্যে ডাবল লাইনের দ্বারা দেখানো হয়), এবং একটি একক রিং (একটি লুপের সাথে সংযুক্ত বেশ কয়েকটি পরমাণু):

বেনজিন রিং

যেমন LibreTexts দ্বারা সংজ্ঞায়িত :

ডুউ = (2 সি + 2 + এন - এক্স - এইচ) / 2

কোথায়:

  • C কার্বন পরমাণুর সংখ্যা
  • N নাইট্রোজেন পরমাণুর সংখ্যা
  • X হয় হ্যালোজেন পরমাণুর সংখ্যা ( F, Cl, Br, I)
  • H হাইড্রোজেন পরমাণুর সংখ্যা

পরীক্ষার কেস:

C6H6 --> 4
C9H2O1 --> 0
C9H9N1O4 --> 6
U1Pt1 --> Not a valid input, no carbon
Na2O1 --> Not a valid input, no carbon
C1H1 --> 1.5, although in practice this would be one, but is a part of a compound rather than a compound in entirety. 
N1H3 would return 0 - though in practice it isn't an organic compound (in other words it contains no carbon) so the formula wouldn't apply and it isn't a valid input

CH এর ব্যাখ্যার জন্য এখানে দেখুন

সংক্ষেপে, আপনাকে অবশ্যই যৌগের উপরের উপাদানগুলির (সি, এইচ, এন, এফ, ক্লা, ব্রা, আই) কোনও আছে কিনা এবং যদি সেখানে কতগুলি থাকে তা আপনাকে অবশ্যই সনাক্ত করতে হবে। তারপরে উপরের সূত্রটি ব্যবহার করে আনস্যাচুরেশন ডিগ্রি গণনা করুন।

কেবলমাত্র সি, এইচ, এন, এফ, ক্লি, ব্র, এবং আমি ডু সূত্রের বৈধ ইনপুট। এই ধাঁধার উদ্দেশ্যগুলির জন্য, অন্য যে কোনও উপাদান সম্পূর্ণ উপেক্ষা করা হতে পারে (উদাহরণস্বরূপ যদি যৌগটি C6H6 হত তবে ফলাফলটি 4 হবে)। উপরের যৌগগুলির মধ্যে কোনওটি না থাকলে উত্তরটি শূন্য হবে।

আপনি ধরে নিতে পারেন যে সমস্ত যৌগিক ইনপুট রাসায়নিকভাবে সম্ভব, কমপক্ষে একটি কার্বনের পরমাণু ধারণ করে এবং এটি বিদ্যমান বলে জানা যায়। যদি ইনপুটটি অবৈধ হয়, প্রোগ্রামটি 0 বা -1 আউটপুট দিতে পারে বা কোনও ফল দিতে পারে।

বিধি

স্ট্যান্ডার্ড আইও নিয়ম এবং ফাঁকগুলি প্রয়োগ হয়। ইনপুট অবশ্যই স্ট্যান্ডার্ড স্ট্রিং হওয়া উচিত এবং আপনি ধরে নিতে পারেন ইনপুটটি খালি হবে না। এটি কোডগল্ফ - তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


প্রস্তাবিত পরীক্ষার কেসগুলি: সোডিয়াম অক্সাইড: Na2Oএবং মিথাইলিডিন: CHএবং CCl4He। এগুলি এমন কয়েকটি কর্নার কেস যা কয়েকটি সমাধান ভঙ্গ করতে পারে। যাইহোক, এটি ম্যাথমেটিকা ​​(সম্ভবত) ব্যতীত অন্য কারও পক্ষে গুরুত্বপূর্ণ নয়, তবে আমরা কী ধরে নিতে পারি যে যৌগগুলি (থাকতে পারে) বিদ্যমান?
স্টিভি গ্রিফিন

আমি বুঝতে পারছি না C9H2O1 --> 0। এটি 9 হওয়া উচিত নয়? (2*9+2+0-0-2)/2
DLosc

শেষ অনুচ্ছেদ অনুসারে, আপনার অর্থ কোডটি অবশ্যই অবৈধ ইনপুটগুলি মোকাবেলা করতে সক্ষম হবে? যাইহোক, এটি কি নিশ্চিত যে যৌগের প্রতিটি একক উপাদানের সি 1 এইচ 1 এর মতো '1' পিছনে রয়েছে?
কিউ গান

@ কেয়ুগান হ্যাঁ এবং হ্যাঁ
আর্কি রোকস

উত্তর:


2

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

0অবৈধ ইনপুটগুলির জন্য ফেরত দেয় ।

s=>s.split(/(\d+)/).reduce((p,c,i,a)=>p+[0,k=a[i+1]/2,2*k,-k][n='NCFHIClBr'.search(c||0)+1,s|=n==2,n>2?3:n],1)*s

পরীক্ষার মামলা

বিকল্প সংস্করণ, 103 বাইট

যদি ইনপুটটি বৈধ হওয়ার গ্যারান্টিযুক্ত ছিল - যেহেতু চ্যালেঞ্জের ভূমিকা বিভ্রান্তিকরভাবে প্রস্তাব দিচ্ছে - আমরা কেবল এটি করতে পারি:

s=>s.split(/(\d+)/).reduce((p,c,i,a)=>p+[0,k=a[i+1]/2,2*k,-k][n='NCFHIClBr'.search(c||0)+1,n>2?3:n],1)

ডেমো


2

পাইথন 3 , 142 151 148 বাইট

import re
l=dict(re.findall("(\D+)(\d+)",input()))
m=lambda k:int(l.get(k,0))
print(m("C")and m("C")+1+(m("N")-sum(map(m,"F I H Cl Br".split())))/2)

ত্রুটিতে 0 প্রদান করে।

@ হাইপারনিট্রিনোকে ধন্যবাদ বাইটগুলি নামিয়ে আনতে।

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


উফ - পরীক্ষার মামলা আপডেট!
আর্কি রোকেস


@ হাইপার নিউট্রিনো পরীক্ষার মামলাগুলি কিছুটা অস্পষ্ট ছিল। অবৈধ ইনপুটটিতে এখন কোনও আউটপুট নেই।
মুসঅন দ্য রকস


dictসেখানে দুর্দান্ত ব্যবহার !
DLosc

0

পিপ , 70 67 বাইট

`C\d`Na&1+/2*VaR+XDs._R['C'NC`H|F|I|Cl|Br`].s["+2*"'+'-]RXU.XX"+0*"

কমান্ড-লাইন আর্গুমেন্ট হিসাবে রাসায়নিক সূত্র গ্রহণ করে। 0অবৈধ ইনপুটগুলির আউটপুট । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

রাসায়নিক সূত্রকে গাণিতিক সূত্রে পরিণত করতে রেগেক্স রিপ্লেসমেন্টের একটি সিরিজ ব্যবহার করে, এটিকে ব্যাখ্যা করে এবং চূড়ান্ত মান পেতে একটি দম্পতি টুইট করে।

প্রতিস্থাপনগুলি (সামান্য অবারিত সংস্করণ):

aR+XDs._R"C ""+2*"R"N "'+R`(H|F|I|Cl|Br) `'-RXU.XX"+0*"

a                    Cmdline arg
 R+XD                 Replace runs of 1 or more digits (\d+)
     s._               with a callback function that prepends a space
                       (putting a space between each element and the following number)
 R"C "                Replace carbon symbol
      "+2*"            with +2* (add 2* the number of carbon atoms to the tally)
 R"N "                Replace nitrogen symbol
      '+               with + (add the number of nitrogen atoms to the tally)
 R`(H|F|I|Cl|Br) `    Replace hydrogen or halogen symbol
                  '-   with - (subtract the number of atoms from the tally)
 RXU.XX               Replace uppercase letter followed by another char ([A-Z].)
       "+0*"           with +0* (cancel out numbers of all other kinds of atoms)

আমরা ফলস্বরূপ স্ট্রিং এর সাথে বিভক্ত V। এটি আমাদের দেয় 2C + N − X − H। সঠিক মান পেতে, আমরা নিম্নলিখিত সামঞ্জস্য করি:

`C\d`Na&1+/2*V...

             V...  Value of expression calculated above
          /2*      multiplied by 1/2
        1+         plus 1
`C\d`Na            Is carbon in the original formula? (i.e. C followed by a digit)
       &           Logical AND: if no carbon, return 0, otherwise return the formula value

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