নন-সাইক্লিক কার্বন চেইনের নামকরণ


30

(আমি কোনও রসায়নবিদ নই! কোনও কিছুতে আমার ভুল হতে পারে, আমি হাইস্কুলে যা শিখেছি তা লিখছি)

কার্বন পরমাণুর একটি বিশেষ বৈশিষ্ট্য রয়েছে: এগুলি 4 টি অন্যান্য পরমাণুর সাথে আবদ্ধ হতে পারে (যা এটি বিশেষ নয়) এবং তারা দীর্ঘ শিকলগুলিতে স্থির থাকে, যা খুব অনন্য। যেহেতু এগুলি বিভিন্নভাবে বেঁধে রাখা যায় এবং একত্রিত করা যায়, তাদের নামকরণের জন্য আমাদের এক ধরণের নামকরণের সম্মেলন প্রয়োজন।

এটি আমরা তৈরি করতে পারি এমন ক্ষুদ্রতম অণু:

CH4

একে মিথেন বলা হয়। এটিতে কেবল একটি কার্বন এবং 4 টি হাইড্রোজেন পরমাণু রয়েছে। পরেরটি হ'ল:

CH3 - CH3

একে বলা হয় ইথেন। এটি 2 কার্বন এবং 6 হাইড্রোজেন পরমাণু নিয়ে গঠিত।

পরের 2 টি হ'ল:

CH3 - CH2 - CH3
CH3 - CH2 - CH2 - CH3

তারা প্রোপেন এবং বুটেন হয়। 4 টি কার্বন পরমাণু দিয়ে চেইনগুলি দিয়ে সমস্যাগুলি শুরু হয়, কারণ এটি 2 বিভিন্ন উপায়ে তৈরি করা যায়। এর একটি উপরে দেখানো হয়েছে এবং অন্যটি হ'ল:

CH3 - CH - CH3
       |
      CH3

এটি অবশ্যই অন্যটির মতো নয় as পরমাণুর সংখ্যা এবং বাইন্ডিংগুলি আলাদা। অবশ্যই কেবল বাইন্ডিংগুলি ভাঁজ করা এবং অণু ঘোরানো এটিকে আলাদা করে তোলে না! আমার স্নাতকের:

CH3 - CH2 - CH2 - CH3

এবং এই:

CH3 - CH2
       |
CH3 - CH2

একই (যদি আপনি গ্রাফ তত্ত্বের মধ্যে থাকেন তবে আপনি বলতে পারেন যে 2 অণুগুলির মধ্যে আইসোমর্ফিজম থাকলে; তারা একই)) এখন থেকে আমি হাইড্রোজেন পরমাণুগুলি লিখব না কারণ তারা এই চ্যালেঞ্জের জন্য প্রয়োজনীয় নয়।

আপনি যেমন জৈব রসায়নকে ঘৃণা করেন এবং নামকরণের জন্য আপনার কাছে প্রচুর কার্বন পরমাণু রয়েছে, আপনি এমন একটি প্রোগ্রাম লেখার সিদ্ধান্ত নিয়েছেন যা এটি আপনার জন্য করে। আপনার হার্ড-ড্রাইভটিতে আপনার খুব বেশি জায়গা নেই, সুতরাং প্রোগ্রামটি যতটা সম্ভব ছোট হওয়া উচিত।

চ্যালেঞ্জ

একটি প্রোগ্রাম লিখুন যা বহু-লাইনের পাঠ্যকে ইনপুট (একটি কার্বন চেইন) হিসাবে গ্রহণ করে এবং কার্বন শৃঙ্খলার নাম আউটপুট করে। ইনপুটটিতে কেবল ফাঁকা স্থান, বড় হাতের 'সি' অক্ষর এবং '|' থাকবে এবং '-' যা একটি বাধ্যতামূলক প্রতিনিধিত্ব করে। ইনপুট চেইনে কখনই চক্র থাকবে না! উদাহরণ:

ইনপুট:

C-C-C-C-C-C
  |   |
  C   C-C

আউটপুট:

4-ইথাইল-2-methylhexane

যেকোন আউটপুট যতক্ষণ না এটি মানব-পঠনযোগ্য এবং মূলত একই (যতক্ষণ না আপনি চাইলে বিভিন্ন বিভাজক ব্যবহার করতে পারেন) হিসাবে গ্রহণযোগ্য।

নামকরণের সম্মেলন:

(দেখুন: আইইউপিএসি বিধি )

  1. দীর্ঘতম কার্বন চেইন সনাক্ত করুন। এই চেইনকে প্যারেন্ট চেইন বলে called

  2. সমস্ত বিকল্প চিহ্নিত করুন (প্যারেন্ট চেইন থেকে সংযোজন গ্রুপ)।

  3. শেষ থেকে প্যারেন্ট চেইনের কার্বনগুলি সংখ্যায়িত করুন যা বিকল্পগুলি সর্বনিম্ন সংখ্যা দেয়। সংখ্যার একটি সিরিজের তুলনা করার সময়, সর্বনিম্ন "সিরিজটি এমন একটি যা প্রথম পার্থক্য উপলক্ষে সর্বনিম্ন সংখ্যা ধারণ করে। যদি দুটি বা ততোধিক দিকের চেইনগুলি সমতুল্য পজিশনে থাকে তবে নামটিতে প্রথম আসবে এমন ব্যক্তিকে সর্বনিম্ন সংখ্যা নির্ধারণ করুন।

  4. যদি একই পদার্থ একাধিকবার দেখা দেয় তবে প্রতিটি পয়েন্টের অবস্থানের পরিবর্তে প্রতিস্থাপকটি দেওয়া হয়। এছাড়াও, বিকল্প গ্রুপটি কতবার সংঘটিত হয় তা একটি উপসর্গ দ্বারা চিহ্নিত করা হয় (ডি, ত্রি, তেত্রা ইত্যাদি)।

  5. যদি দুটি বা ততোধিক পৃথক বিকল্প থাকে তবে সেগুলি বেসের নামটি ব্যবহার করে বর্ণমালা অনুসারে তালিকাভুক্ত করা হয় (উপসর্গগুলি উপেক্ষা করুন)। বর্ণানুক্রমিক ক্রমে বিকল্পগুলি রাখার সময় একমাত্র উপসর্গটি আইসোপ্রোপাইল বা আইসোবোটিলের মতো আইসো। একে অপরের সাথে তুলনা করা বাদে সেকেন্ড- এবং Tert- উপসর্গ বর্ণানুক্রমিক ক্রম নির্ধারণে ব্যবহৃত হয় না।

  6. যদি সমান দৈর্ঘ্যের চেইনগুলি প্যারেন্ট চেইন হিসাবে নির্বাচনের জন্য প্রতিযোগিতা করে, তবে পছন্দটি ধারাবাহিকভাবে চলে:

    • চেইনটি সাইড চেইনের সর্বাধিক সংখ্যক রয়েছে।
    • চেইনের যার বিকল্পগুলির সংখ্যা সবচেয়ে কম।
    • ক্ষুদ্রতম সাইড চেইনে কার্বন পরমাণুর সর্বাধিক সংখ্যক চেইন রয়েছে।
    • সর্বনিম্ন ব্রাঞ্চযুক্ত চেইনযুক্ত চেইন (কমপক্ষে পাতার সংখ্যাযুক্ত একটি গ্রাফ)।

প্যারেন্ট চেইনের জন্য নামকরণটি হ'ল:

Number of carbons   Name
1                  methane
2                  ethane
3                  propane
4                  butane
5                  pentane
6                  hexane
7                  heptane
8                  octane
9                  nonane
10                 decane
11                 undecane
12                 dodecane

কোনও চেইন 12 বছরের বেশি হবে না, সুতরাং এটি যথেষ্ট। সাব-চেইনের ক্ষেত্রে এটি একই তবে শেষে 'এনি' এর পরিবর্তে আমাদের 'ইয়েল' রয়েছে।

আপনি ধরে নিতে পারেন যে Cগুলিগুলি বিজোড় কলামগুলিতে রয়েছে এবং কার্বন পরমাণুর মধ্যে বাইন্ডিংগুলি ( |এবং -অক্ষরগুলি) 1 দীর্ঘ।

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

ইনপুট:

C-C-C-C

আউটপুট:

রাসায়নিক যৌগ

ইনপুট:

C-C-C
  |
  C

আউটপুট:

2-methylpropane

ইনপুট:

C-C-C-C
  |
  C
  |
  C-C

আউটপুট:

3-methylhexane

ইনপুট:

C-C-C-C-C
  |
  C
  |
  C

আউটপুট:

3-methylhexane

ইনপুট:

    C
    |
    C
    |
C-C-C-C
  |
  C-C-C
  |
  C-C

আউটপুট:

3,4-ডিমেঠিল-5-ethylheptane

সম্পাদনা: ভুল উদাহরণের জন্য দুঃখিত। আমি ভাল ছাত্র ছিলাম না :( তাদের এখনই ঠিক করা উচিত।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

2
এই নিয়ম অনুসারে, If the same substituent occurs more than once, the location of each point on which the substituent occurs is given. In addition, the number of times the substituent group occurs is indicated by a prefix (di, tri, tetra, etc.).শেষ উদাহরণটিকে 3,4- ডি মিথাইল-5-ইথাইলহেপটেন বলা উচিত নয় ? (আমরা কেবল জৈব রসায়ন শুরু করছি, আমি ভুল হতে পারি: পি)
NieDzejkob

@ নাইডেজেককোব আমি সম্মত হব, কারণ এখানে দুটি মিথাইল চেইন রয়েছে।
জোনাথন ফ্রেচ

@ নিডজেজেকোব প্রকৃতপক্ষে, স্থির
পিটার লেনকেফি

উত্তর:


18

পাইথন 2 , 1876 1871 1870 1859 1846 1830 1826 1900 1932 1913 1847 1833 1635 1613 1596 বাইট

s=input().split('\n')
W=enumerate
J=len
Y=sorted
l=J(s[0])
s=''.join(s)
S=set
M=max
A=min
p=map
f=lambda k:[(x/l,x%l)for x,V in W(s)if V==k]
g=lambda x,i,h=lambda x,i,j:x[:i]+(x[i]+j,)+x[i+1:]:[(h(q,i,-1),h(q,i,1))for q in x]
v=f('C');e=g(f('-'),1)+g(f('|'),0)
E=[V for V in v if sum(e,()).count(V)==1]
o=lambda v:[E[~E.index(v)]for E in e if v in E]
T=lambda a:lambda b:z((a,b))
Z=lambda a:p(T(a[0]),a[1])
n=lambda R:'mepbphhondudetrueeeco nothotnxptn ddh p t t'[R-1::12].strip()+(R>9)*'ec'
G=lambda K:[H[i]for i,V in W(K)if V==A(K)]
q=lambda x:[`k[0]`for k in H if k[1]==x]
B='-'.join
def z(n,c=[]):k=[x for x in S(o(n[0]))-S(c)];p=[z((j,n[1]),c+k)for j in k];return 1-~-(n[0]==n[1])*(p and A(p)or J(v))
C=[(a,b)for a in E for b in E]
a=p(z,C)
s=[(k,[E for E in v if~-z((k[0],E))+z((k[1],E))==z((k[0],k[1]))])for k in[C[x]for x,V in W(a)if V==M(a)]]
H=[]
R=0
for k,_ in s:R=M(J(_),R);_.sort(key=T(k[0]));a=sum([list(S(o(k))-S(_))for k in _],[]);H+=zip(p(lambda a:Z((a,_)).index(2),a),p(Z,[(O,[x for x in S(v)-S(_)if z((x,O),_)<J(v)])for O in a])),
X=n(R)
U=any(H)
if U:H=G([[h[0]for h in Q]for Q in H if J(Q)==M(p(J,H))]);K=[[J(Q[1])for Q in j]for j in H];H=[H[i]for i,V in W(K)if A(V)==A(sum(K,[]))];K=[J([Q[1]for Q in j if J(S(Q[1]))-J(Q[1])])for j in H];H=[[p[0]+1,n(M(p[1]))+[['isopropyl','butyl-tert','butyl-sec','isobutyl'][J(p[1])+p[1].count(3)-3],'yl'][Y(p[1])==range(1,1+M(p[1]))]]for p in G(K)[0]]
print(U and B([','.join(q(x))+'-'+'dttphhondireeeecoe itnxptnc  rtataaa  aa a '[J(q(x))-2::9].strip()+B(x.split('-')[::-1])for x in Y(list(S(zip(*H)[1])))])+X or[X,'meth']['t'==X])+'ane'

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

আচ্ছা আপনি সেখানে যান। অবশ্যই গল্ফিয়াস্ট না তবে এটি কাজ করে (আমি আশা করি): ডি

আমাকে প্রায় 10 ঘন্টা সময় নিয়েছে, সম্ভবত? সম্ভবত আকার এবং সময় উভয় ক্ষেত্রেই আমার দীর্ঘতম গল্ফ, এবং আমি জাভা ডি ব্যবহার করার বিষয়টি বিবেচনা করে কিছু বলছিলাম:

লজিক:

  1. প্রতিটি কার্বন পরমাণুর সাথে নোড হিসাবে এবং প্রতিটি বন্ডকে সংলগ্ন আকারে উপস্থাপন করা প্রান্ত হিসাবে ASCII উপস্থাপনা থেকে গ্রাফ উপস্থাপনায় রূপান্তর করুন।
  2. সমস্ত পাতা সন্ধান করুন; যা কেবল একটি বন্ড সহ নোড। দীর্ঘতম চেইন এগুলির মধ্যে একটি থেকে অন্যটিতে যাওয়ার গ্যারান্টিযুক্ত।
  3. পাতার ডায়াডিক পণ্যটি সন্ধান করুন; এটি হ'ল সমস্ত প্রান্তের নোড। তারপরে, এই চেইনের সমস্ত দৈর্ঘ্য নিন।
  4. প্রতিটি চেইনের জন্য, এর সাবচেইনগুলি সন্ধান করুন।
  5. ডান চেইন বাছাই করতে স্টাফ করুন। যদি বন্ধন হয়, তবে এটি আসলে কিছু যায় আসে না। মজাদার ঘটনা: সর্বদা একটি টাই থাকবে কারণ প্রতিটি চেইন দুবার গণনা করা হয়, একবার বিপরীতে।
  6. এটি সঠিকভাবে মুদ্রণ করুন।

সম্পাদনা : ফিক্সড বাগ যেখানে কোনও সাইড চেইন না থাকলে ত্রুটি ঘটায় to

সম্পাদনা : কয়েকটি অতিরিক্ত স্পেস (লুপের জন্য ইন্ডেন্টেশন) লক্ষ্য করার জন্য এমডি এক্সএফকে ধন্যবাদ।

সম্পাদনা : একই বিকল্পটি থাকার জন্য আমি উপসর্গটি সম্পর্কে সম্পূর্ণ ভুলে গেছি।

দ্রষ্টব্য : এটি কাজ করার জন্য প্রতিটি লাইনের সমান প্রস্থ হওয়া দরকার। যে, পিছনে স্থান প্রয়োজন হয়।

মজাদার ঘটনা: বেশিরভাগ চক্রীয় হাইড্রোকার্বনগুলি "মিথেন" হিসাবে নির্ধারিত হবে

মজাদার ঘটনা: যদি আপনি C-C-...-C-C13 সেন্টিগ্রেড করেন ethaneতবে এটি thane14 এর ropaneজন্য, 15 এর জন্য দেবে etc.

-79 বাইট জনাথন Frech ধন্যবাদ
-119 NieDzejkob ধন্যবাদ বাইট
-17 ovs ধন্যবাদ বাইট

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