अल्कनेस की लुईस संरचनाएं खींचना


17

मुझे स्कूल में अल्कनों के बारे में एक सबक मिला और यह पता चला कि यह शायद एक महान कोड गोल्फ चुनौती के लिए बना देगा! चिंता मत करो, यह उतना जटिल नहीं है जितना यह दिख सकता है!

ए क्विक रेहश

(कृपया ध्यान दें: इसे संक्षिप्त रखने के लिए, सभी जानकारी 100% सही नहीं है।)

अल्केन्स कार्बन और हाइड्रोजन के तार हैं। हर कार्बन परमाणु में 4 बांड होते हैं, और हर हाइड्रोजन परमाणु 1 बांड होता है। एल्केन के सभी कार्बन परमाणु एक स्ट्रिंग बनाते हैं जहां प्रत्येक सी-परमाणु 2 अन्य सी-परमाणुओं (लेविस संरचना में बाएं और दाएं) और 2 एच-परमाणुओं (ऊपर और नीचे) से जुड़ा होता है, सिवाय स्ट्रिंग के सिरों के , जहां C-atom केवल 1 अन्य C से जुड़ा है, लेकिन 3 Hs है। पेंटेन के लिए एक मूल उदाहरण (5 सी-परमाणुओं और 12 एच-परमाणुओं के साथ एक एल्केन) है:

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

अलकनियों की भी शाखाएँ हो सकती हैं। लेकिन चिंता मत करो, इस चुनौती में सभी alkanes को केवल 1 स्तर की शाखा के साथ व्यक्त किया जा सकता है। उदाहरण:

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

इस चुनौती को पूरा करने के लिए आपको ब्रुकल अल्केन्स के लिए आईयूपीएसी नामकरण सम्मेलन को भी समझना चाहिए। सबसे पहले रूट अल्केन है। हमारे पिछले उदाहरण में, यह "सीसीसीसीसी" हिस्सा होगा। यह श्रृंखला कितनी लंबी है, इसके आधार पर इसका एक अलग नाम है। 1 सी को मीथेन, 2 सी इथेन, 3 सी प्रोपेन, फिर ब्यूटेन, पेंटेन, हेक्सेन, हेप्टेन, ओकटाइन, नॉन और डिकेन कहा जाता है। फिर, प्रत्येक शाखा के लिए, उस के लिए एक निश्चित उपसर्ग है: सबसे पहले, सी-एटम की अनुक्रमणिका (ऑफसेट) शाखा से जुड़ी हुई है (बाईं ओर से गिनती)। उदाहरण में, यह 4 होगा (उर्फ यह बाईं ओर से 4 वां सी-परमाणु है)। फिर एक हाइफ़न है (यह प्रतीक: "-") और उसके बाद एक और नाम शाखा के आकार को दर्शाता है। शाखा के आकार का नामकरण लगभग जड़ के आकार के नामकरण जैसा है, "एई" के बजाय आप "वाईएल" को जोड़ते हैं। इसके साथ ही उदाहरण का पूरा नाम होगा

4-methylpentane

यदि आपके पास कई शाखाएं हैं, तो वे एक और हाइफ़न द्वारा अलग होने के साथ-साथ पूर्वनिर्मित हैं। उदाहरण:

2-butyl-5-methylhexane

एक आखिरी बात: यदि आपके पास एक ही आकार की कई शाखाएँ हैं, तो वे समूहीकृत हो जाती हैं; उनकी संतानों को अल्पविराम द्वारा अलग कर दिया जाता है और वे उसी आकार-नाम को साझा करते हैं, जो अतिरिक्त शाखाओं द्वारा प्रीपेलेबल हो जाता है, जिसके आधार पर कितनी शाखाओं को समूहीकृत किया जाता है: 2 शाखाओं के लिए "दी", 3 के लिए "त्रि", 4 के लिए "टेट्रा" (आप इस चुनौती के लिए और अधिक की जरूरत नहीं है)। उदाहरण:

2-ethyl-2,4,6-trimethyldecane

FYI करें, यह कुछ इस तरह दिख सकता है :

   |
  -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

नियम

एक प्रोग्राम लिखें जो एसटीडीआईएन से ऐसे IUPAC नाम में पढ़ता है, प्रोग्राम तर्क या समतुल्य है और इसे ASCII- आर्ट लिविस स्ट्रक्चर के रूप में STDOUT (या समतुल्य) के रूप में आकर्षित करता है।

  • सादगी के लिए, आपको H-atoms को आकर्षित करने की आवश्यकता नहीं है (इसके अलावा आप रिक्ति संबंधी मुद्दों में भाग लेंगे)
  • आपको किसी भी खाली अग्रणी या अनुलंब क्षैतिज रेखाओं को प्रिंट करने की अनुमति नहीं है
  • आपके द्वारा पार्स की जाने वाली श्रृंखलाएं 10 से अधिक लंबी नहीं होंगी, और एक "समूह" में अधिकतम शाखाएं 4 तक सीमित हैं।
  • एक शाखा की अधिकतम "ऑफसेट" 9 है (जिसका अर्थ है कि आपको 1 अंक से अधिक पार्स करने की आवश्यकता नहीं है)
  • आपकी शाखाओं को हर नई शाखा के बाद ऊपर और नीचे जाने के बीच वैकल्पिक करना होगा। यदि यह स्थान पहले से ही एक और शाखा द्वारा एक ही ऑफसेट पर लिया जाता है, तो आपको इसे रूट के दूसरी तरफ खींचना होगा। (ऊपर-> नीचे, नीचे-> ऊपर)
  • भ्रष्ट, सही-सही-स्वरूपित या अन्यथा न होने योग्य इनपुट पर, आपका कार्यक्रम अनिर्दिष्ट हो सकता है।

यह कोड गोल्फ है, बाइट्स जीत में सबसे छोटा कोड!

हैप्पी गोल्फिंग! :)


4-methylpropaneकहना चाहिए 4-methylpentane? 4-<anything>propaneजब तक मैं पूरी तरह से कुछ गलत समझा है, संभावना नहीं है।
पीटर टेलर

हाँ तुम सही हो। इसे संपादित किया!
थॉमस ओल्टमैन

4
आपके पास अंतिम अणु है 3-3-5-7-methyldodecaneक्योंकि सबसे लंबी निरंतर कार्बन श्रृंखला 12 लंबी है। इसके अलावा, आपने कहा था कि प्रश्न की सभी जानकारी सटीक नहीं थी, लेकिन मुझे लगता है कि यह इस बात की ओर इशारा करता है कि दूसरा अणु है 2-methylpentane, 4-methylpentaneइसलिए नहीं कि आप निकटतम शाखा में कार्बन से शुरू करते हैं।
आर्कटुरस

मुझे पता है, लेकिन यह बिल्कुल अशुद्धि थी जिसे मैं अस्वीकार कर रहा था। यह सिर्फ एक कोड गोल्फ चुनौती के लिए इसे कम रखने के लिए व्यापार बंद है! :)
थॉमस ओल्टमैन

1
1. Your branches have to alternate between going up and down after every new branch.आपका उदाहरण इस नियम का उल्लंघन करता है। 2. हमें जो अधिकतम श्रृंखला लंबाई का समर्थन करना है (उपसर्गों को पार्स करना चुनौती का हिस्सा होगा।) आपको नामकरण की सूची को लिंक (या अधिमानतः कॉपी) करना चाहिए।
लेवल रिवर सेंट

जवाबों:


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]]

And वाम ’और Left राइट’ ( L,R) और 'रूट ’( C) स्ट्रिंग शाखाएँ आरंभीकृत हैं।

प्रत्येक शाखा को फिर इसी 'स्ट्रिंग' शाखा (बिग लूप) में जोड़ा जाता है।

अंत में दो पक्ष और केंद्र मुद्रित हैं:

   |   |             
  -C- -C-            
 | | | | | | | | | | 
-C-C-C-C-C-C-C-C-C-C-
 | | | | | | | | | | 
  -C-     -C-        
   |       |         
  -C-                
   |                 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.