আলকানেসের লুইস স্ট্রাকচারগুলি অঙ্কন


17

আমি স্কুলে অ্যালেকনেস সম্পর্কে কেবল একটি পাঠ পেয়েছি এবং এটি সম্ভবত একটি দুর্দান্ত কোড গল্ফ চ্যালেঞ্জের জন্য তৈরি করতে পারে! চিন্তা করবেন না, এটি যতটা জটিল দেখায় তেমন জটিল নয়!

কুইক রিহ্যাশ

(দয়া করে নোট করুন: এই সংক্ষিপ্ত রাখার জন্য, সমস্ত তথ্য 100% সঠিক নয়))

অ্যালক্যানস হ'ল কার্বন এবং হাইড্রোজেনের স্ট্রিং। প্রতিটি কার্বন পরমাণুর 4 টি বন্ধন এবং প্রতিটি হাইড্রোজেন পরমাণুর 1 টি বন্ধন রয়েছে। অ্যালকেনের সমস্ত কার্বন পরমাণু একটি স্ট্রিং তৈরি করে যেখানে প্রতিটি সি-পরমাণু স্ট্রিংয়ের শেষগুলি ব্যতীত 2 টি সি-পরমাণু (লুইস কাঠামোর বাম এবং ডানদিকে) এবং 2 এইচ-পরমাণু (উপরে এবং নীচে) এর সাথে সংযুক্ত থাকে , যেখানে সি-পরমাণুটি কেবলমাত্র 1 টি সি তবে 3 এইচএসের সাথে যুক্ত। পেন্টেনের জন্য এখানে একটি মৌলিক উদাহরণ (5 সি-পরমাণু এবং 12 এইচ-পরমাণু সহ একটি অ্যালকেন):

  H H H H H
  | | | | |
H-C-C-C-C-C-H
  | | | | |
  H H H H H

অ্যালকনেসগুলিরও শাখা থাকতে পারে। তবে চিন্তা করবেন না, এই চ্যালেঞ্জের সমস্ত অ্যালকেন কেবলমাত্র 1 স্তরের শাখা দিয়ে প্রকাশ করা যেতে পারে। উদাহরণ:

        H
        |
      H-C-H
  H H H | H
  | | | | |
H-C-C-C-C-C-H
  | | | | |
  H H H H H

এই চ্যালেঞ্জটি সম্পন্ন করার জন্য আপনাকে অবশ্যই ব্রাঞ্চযুক্ত অ্যালকেনেসের IUPAC নামকরণ কনভেনশন বুঝতে হবে। প্রথমটি মূল অ্যালকেনে আছে। আমাদের পূর্ববর্তী উদাহরণে এটি "সিসিসিসিসি" অংশ হবে। এই চেইনটি কত দীর্ঘ তার উপর নির্ভর করে এর আলাদা নাম রয়েছে। 1 সেন্টিমিটারকে মিথেন, 2 ডিগ্রি ইথেন, 3 ডি প্রোপেন, তারপরে বুটেন, পেন্টেন, হেক্সেন, হেপাটেন, অক্টেন, নোনেন এবং ডেকেন (10 সি) বলা হয়। তারপরে, প্রতিটি শাখার জন্য এটির একটি নির্দিষ্ট উপসর্গ রয়েছে: প্রথমে, শাখাটিতে সি-পরমাণুর সূচক (অফসেট) যুক্ত করা হয় (বাম দিক থেকে গণনা)। উদাহরণস্বরূপ, এটি 4 হবে (ওরফে এটি বাম দিক থেকে 4 র্থ সি-পরমাণু)। তারপরে একটি হাইফেন রয়েছে (এই প্রতীক: "-") এবং এর পরে আরেকটি নাম শাখার আকার নির্দেশ করে। শাখার আকারের নামকরণ প্রায় মূলের আকারের নামকরণের মতো, "ane" এর পরিবর্তে আপনি "yl" যুক্ত করুন। সেই সাথে উদাহরণের পুরো নাম হবে

4-methylpentane

আপনার যদি একাধিক শাখা থাকে তবে সেগুলি পাশাপাশি চাপ দেওয়া হয়, অন্য হাইফেন দ্বারা পৃথক। উদাহরণ:

2-butyl-5-methylhexane

একটি শেষ কথা: আপনার যদি একই আকারের একাধিক শাখা থাকে তবে সেগুলি গোষ্ঠীভুক্ত করা হবে; তাদের অফসেটগুলি কমা দ্বারা পৃথক করা হয়েছে এবং তারা একই আকারের নামটি ভাগ করে, যা কতগুলি শাখাকে গোষ্ঠীভুক্ত করে তার উপর নির্ভর করে অতিরিক্ত শব্দের দ্বারা প্রপেন্ড করা হয়: 2 টি শাখার জন্য "ডি", 3 টির জন্য "ত্রি", 4 টির জন্য "আপনি" এই চ্যালেঞ্জের জন্য আরও বেশি প্রয়োজন নেই)। উদাহরণ:

2-ethyl-2,4,6-trimethyldecane

এফওয়াইআই, এটি কিছুটা এরকম দেখতে পারে : (এইচ-পরমাণুগুলি নিষ্ক্রিয়)

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

নাম চিটশিট

Prefixes indicating numbers:
| Num  | Prefix |
|------|--------|
| 1    | meth   |
| 2    | eth    |
| 3    | prop   |
| 4    | but    |
| 5    | pent   |
| 6    | hex    |
| 7    | hept   |
| 8    | oct    |
| 9    | non    |
| 10   | dec    |
Suffix root:   ane
Suffix branch: yl
Prefixes grouping: di, tri, tetra

নিয়ম

এমন একটি প্রোগ্রাম লিখুন যা STDIN, প্রোগ্রাম আর্গুমেন্ট বা সমতুল্য থেকে এই জাতীয় IUPAC নাম পড়ে এবং এটি ASCII- আর্ট লুইস কাঠামো হিসাবে STDOUT (বা সমমানের) এ আঁকবে।

  • সরলতার জন্য, আপনাকে এইচ-পরমাণু আঁকতে হবে না (অন্যথায় আপনি ব্যবধানের সমস্যাগুলিতে চলে যাবেন)
  • আপনাকে কোনও খালি নেতৃস্থানীয় বা পিছনে অনুভূমিক লাইনগুলি মুদ্রণের অনুমতি নেই
  • আপনার যে শৃঙ্খাগুলি বিশ্লেষণ করতে হবে সেগুলি 10 এর বেশি হবে না এবং "গোষ্ঠী" এর সর্বোচ্চ শাখা 4 এর মধ্যে সীমাবদ্ধ।
  • একটি শাখার সর্বাধিক "অফসেট" 9 (যার অর্থ আপনাকে 1 ডিজিটের বেশি পার্স করতে হবে না)
  • আপনার শাখাগুলি প্রতিটি নতুন শাখার পরে উপরে ও নীচে যেতে হবে। যদি এই স্থানটি ইতিমধ্যে একই অফসেটে অন্য কোনও শাখা দ্বারা নেওয়া হয় তবে আপনাকে এটিকে মূলের অন্য দিকে আঁকতে হবে। (উপরে-> নিচে, নীচে-> উপরে)
  • দুর্নীতিগ্রস্থ, সঠিকরূপে ফর্ম্যাট করা হয়নি বা অন্যথায় আঁকতে সক্ষম ইনপুটটিতে আপনার প্রোগ্রামটি অনির্দিষ্ট আচরণ করতে পারে।

এটি কোড গল্ফ, বাইট জেতে সংক্ষিপ্ততম কোড!

শুভ গল্ফিং! :)


করা উচিত 4-methylpropaneবলে 4-methylpentane? 4-<anything>propaneঅসম্ভব বলে মনে হচ্ছে, যদি না আমি পুরোপুরি কিছু ভুল বুঝি।
পিটার টেলর

হ্যাঁ আপনি ঠিক. এটি সম্পাদিত!
থমাস অল্টম্যান

4
আপনার কাছে সর্বশেষ অণুটি 3-3-5-7-methyldodecaneকারণ দীর্ঘতম ক্রমাগত কার্বন চেইন দীর্ঘ হয়। এছাড়াও, আপনি বলেছিলেন যে প্রশ্নের সমস্ত তথ্য সঠিক ছিল না, তবে আমি মনে করি এটি উল্লেখ করার মতো যে দ্বিতীয় অণুটি 2-methylpentaneনয়, 4-methylpentaneকারণ আপনি কার্বনটি নিকটতম শাখা দিয়ে শুরু করেছিলেন।
আর্কটরাস

আমি জানি, তবে এটিই আমি অস্বীকার করছিলাম c একটি কোড গল্ফ চ্যালেঞ্জের জন্য এটি যথেষ্ট সংক্ষিপ্ত রাখার জন্য কেবল বাণিজ্য বন্ধ! :)
থমাস অল্টম্যান

1
১. Your branches have to alternate between going up and down after every new branch.আপনার উদাহরণটি এই বিধি লঙ্ঘন করে २. আমাদের সর্বাধিক চেইন দৈর্ঘ্য কতটি সমর্থন করতে হবে (উপসর্গগুলি পার্স করা চ্যালেঞ্জের একটি অংশ হবে)) আপনার নামের তালিকাটি (বা অগ্রাধিকারের অনুলিপি) লিঙ্ক করা উচিত।
স্তরের নদী সেন্ট

উত্তর:


3

পাইথন 2, 620 বাইট

import re
i=input()
s='m|e|pr|b|p|hex|h|o|n|de';d=dict(zip(s.split('|'),range(1,11)))
z=[[eval('['+a+']'),d[b]]for a,b in re.findall('(?:(\d[,\d]*).*?[\-ia]|l)('+s+')',i[:-3])]
v=z[-1][1]
l=[[0,0]for _ in range(v)]
c=0
for a,b in sorted([(i,b)for a,b in z[:-1]for i in a]):l[a-1][c]=b;c=~c
m=[max(x) for x in zip(*l)]
L,R=[[[' 'for _ in '_'*2*i]for _ in '_'*(2*v+1)]for i in m]
c=[' |'*v+' ']
C=c+['-C'*v+'-']+c
for i in range(len(l)):
 X=L;q=2*i+1
 for a in l[i]:
  if a>0:
   for j in range(0,2*a,2):
    X[q][j]='C'
    X[q-1][j]=X[q+1][j]='-'
    X[q][j+1]='|'
  X=R
for l in zip(*L)[::-1]+C+zip(*R):print ''.join(l)

ব্যাখ্যা

ইনপুট: '2-ethyl-2,4,6-trimethyldecane'

রেগেক্সের সাথে স্ট্রিংয়ের প্রথম পার্স (শেষ গ্রুপটি রুট):

[[[2], 2], [[2, 4, 6], 1], [[], 10]]

প্রতিটি শাখা দৈর্ঘ্যের অ্যারেতে লেখা হয় len(root)(পর্যায়ক্রমে উপরে / নীচে এখানে পরিচালনা করা হয়):

[[0, 0], [1, 2], [0, 0], [1, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 0], [0, 0]]

'বাম' এবং 'ডান' ( L,R) এবং 'রুট' ( C) স্ট্রিং শাখা সূচনা করা হয়েছে।

তারপরে প্রতিটি শাখা সংশ্লিষ্ট 'স্ট্রিং' শাখায় (বড় লুপ) যুক্ত করা হয়।

উভয় পক্ষ এবং কেন্দ্র শেষে মুদ্রিত:

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