पागल केमिस्ट और चतुर प्रोग्रामर


12

पृष्ठभूमि की कहानी

आप एक रसायन विज्ञान प्रयोगशाला में चक्कर जगाते हैं, और आपको लगता है कि आपको एक पुराने पागल रसायनज्ञ द्वारा अपहरण कर लिया गया है। चूंकि वह अपनी उम्र के कारण बहुत अच्छी तरह से नहीं देख सकता है, वह चाहता है कि आप उसके लिए काम करें और उसके बाद ही आप प्रयोगशाला से बच सकते हैं।

कार्य

अणुओं के संरचनात्मक सूत्रों को वापस करना आपका काम है जिसका रासायनिक सूत्र इनपुट के रूप में दिया जाएगा। ध्यान दें कि इनपुट के रूप में केवल कार्बन ( C), ऑक्सीजन ( O) और हाइड्रोजन ( H) परमाणुओं का उपयोग किया जाएगा। रासायनिक सूत्रों के विपरीत, 0यह एक मान्य परिमाणक है और 1छोड़ा नहीं जा सकता (जैसे C1H4O0वैध इनपुट है, लेकिन CH4ऐसा नहीं है)।

अस्पष्टता को रोकने के लिए, हम मान लेते हैं कि डबल और ट्रिपल बांड अणुओं में दिखाई नहीं देते हैं। सभी कार्बन परमाणुओं को 4 एकल बांडों की आवश्यकता होती है, सभी ऑक्सीजन परमाणुओं को 2 की आवश्यकता होती है, और हाइड्रोजन परमाणुओं को एक की आवश्यकता होती है। हम यह भी मानते हैं कि O-Oबांड भी मौजूद नहीं हैं। अणु का न तो अस्तित्व है और न ही स्थिर होना।

3आउटपुट के डिस्प्ले में हल्कापन सुनिश्चित करने के लिए इनपुट में कार्बन परमाणुओं से अधिक नहीं होगा ।

आपको केवल उन अणुओं को प्रदर्शित करना चाहिए जिनके कार्बन परमाणुओं को बिना किसी रुकावट के एक सीधी रेखा में व्यवस्थित किया जाता है। अहंकार, कोई C-O-Cबंधन नहीं ।

आपको पिछले नियमों से बाहर नहीं किए गए सभी संभावित अणुओं को वापस करना होगा । आपको अमान्य इनपुट को संभालने की आवश्यकता नहीं है।

निम्नलिखित उदाहरण उन अणु के लिए आपके द्वारा प्रबंधित किए जाने वाले सभी समाधानों को प्रदर्शित करता है।

अणु के किसी एक सूत्र के पृष्ठ के तल में 180 डिग्री घूमने को अतिरेक माना जाता है और इसे प्रदर्शित करने की आवश्यकता नहीं होती है।

नीचे दिए गए उदाहरण में, मैं एक अणु के लिए सभी संभावित सूत्र दिखाऊंगा, फिर उन लोगों को इंगित करूँगा जिन्हें प्रदर्शित करने की आवश्यकता नहीं है।

उदाहरण

इनपुट: C2H6O2

सबसे पहले, इस इनपुट के लिए सभी संभावित सूत्र दिए गए हैं (@Jonathan Allan के लिए धन्यवाद)

01        H
          |
          O   H
          |   |
  H - O - C - C - H
          |   |
          H   H

02            H
              |
          H   O
          |   |
  H - O - C - C - H
          |   |
          H   H

03        H   H
          |   |
  H - O - C - C - O - H
          |   |
          H   H

04        H   H
          |   |
  H - O - C - C - H
          |   |
          H   O
              |
              H

05        H   H
          |   |
  H - O - C - C - H
          |   |
          O   H
          |
          H

12        H   H
          |   |
          O   O
          |   |
      H - C - C - H
          |   |
          H   H

13        H
          |
          O   H
          |   |
      H - C - C - O - H
          |   |
          H   H

14        H
          |
          O   H
          |   |
      H - C - C - H
          |   |
          H   O
              |
              H


15        H
          |
          O   H
          |   |
      H - C - C - H
          |   |
          O   H
          |
          H

23            H
              |
          H   O
          |   |
      H - C - C - O - H
          |   |
          H   H

24            H
              |
          H   O
          |   |
      H - C - C - H
          |   |
          H   O
              |
              H

25            H
              |
          H   O
          |   |
      H - C - C - H
          |   |
          O   H
          |
          H

34        H   H
          |   |
      H - C - C - O - H
          |   |
          H   O
              |
              H

35        H   H
          |   |
      H - C - C - O - H
          |   |
          O   H
          |
          H

45        H   H
          |   |
      H - C - C - H
          |   |
          O   O
          |   |
          H   H

और यहां सूत्र हैं जो आउटपुट में होने चाहिए यदि हम पृष्ठ के विमान में 180 ° के घुमाव को बाहर निकालते हैं:

01        H
          |
          O   H
          |   |
  H - O - C - C - H
          |   |
          H   H



03        H   H
          |   |
  H - O - C - C - O - H
          |   |
          H   H


12        H   H
          |   |
          O   O
          |   |
      H - C - C - H
          |   |
          H   H

13        H
          |
          O   H
          |   |
      H - C - C - O - H
          |   |
          H   H

14        H
          |
          O   H
          |   |
      H - C - C - H
          |   |
          H   O
              |
              H


 15      H
         |
         O   H      
         |   |
     H - C - C - H
         |   |
         O   H
         |
         H 

23            H
              |
          H   O
          |   |
      H - C - C - O - H
          |   |
          H   H



25            H
              |
          H   O
          |   |
      H - C - C - H
          |   |
          O   H
          |
          H



35        H   H
          |   |
      H - C - C - O - H
          |   |
          O   H
          |
          H

आपको सूत्रों के लेबल को आउटपुट करने की आवश्यकता नहीं है और दो के मौजूद होने पर आप दोनों में से किसी भी घुमाव को आउटपुट कर सकते हैं। उदाहरण के लिए आप 02 या 35 आउटपुट कर सकते हैं।

आपके कोड का परीक्षण करने के लिए यहां कुछ मान्य इनपुट दिए गए हैं:

C3H8O2 C1H4O0 C2H6O2 C1H4O1 C2H6O2

आपके काम को पूरा करने के लिए आपको जो केमिस्ट पीसी ने दिया है वह काफी पुराना है इसलिए आपके पास अपने कोड को सेव करने के लिए इस पर बहुत मेमोरी नहीं है, इस प्रकार यह और कम से कम बाइट जीतता है!


क्या हमें चक्रीय अणुओं को संभालने की आवश्यकता है?
ल्यूक

@ ल्यूक मैंने जो इनपुट दिए हैं वे चक्रीय नहीं हो सकते हैं इसलिए आपको इसे संभालने की आवश्यकता नहीं है। लेकिन अगर आप ऐसे अणुओं को संभालना चाहते हैं जिनमें 4 C या अधिक शामिल हैं, तो आप इसे कर सकते हैं और बोनस स्कोर कमा सकते हैं :) रास्ते में संपादन के लिए धन्यवाद! अंग्रेजी मेरी मूल भाषा नहीं है ^ ^

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

2
1. क्या एक ही कार्बन पर 2 OH समूह होना संभव है? आपको लगता है कि इसे उदाहरणों से बाहर रखा गया है, लेकिन मैं कहीं भी उस युक्ति को नहीं देखता हूं जो कहती है कि हमें इस पर विचार करने की आवश्यकता नहीं है (मैं वास्तव में इन यौगिकों में क्षार के साथ संतुलन में मौजूद हूं) 2. HOCH2CH2HOH क्यों है दोनों ओह समूह उदाहरण से गायब होने वाले डाउंस की ओर इशारा करते हैं? क्या यह एक आवश्यक आउटपुट नहीं है?
लेवल रिवर सेंट

1
3. क्या क्षैतिज के बजाय कार्बन श्रृंखला के साथ आउटपुट होना स्वीकार्य है?
लेवल रिवर सेंट

जवाबों:


3

रूबी, 275

->s{(k=4<<2*c=s[1].to_i).times{|i|z=" "*8
t=("  H|O|"[i%2*2,4]+"C|"*c+"O|H   "[i>>c&2^2,4]).chars.map{|j|z+j+z}
(c*2).times{|j|t[4+j&-2][j%2*10,7]="    H - O - H    "[[i>>j/2-1&4,-7-(i>>c*2-j/2-1&4)][j%2],7]}
i*(k+1)>>c+1&k-1<i||("%b"%i).sum%16!=s[5].to_i||i%7>c*3||puts(t)}}

बाएँ और दाएँ sidechains और समाप्त चर के लिए संयुक्त सूत्र h

रूबी, २, ९

->s{(k=1<<h=2+2*c=s[1].to_i).times{|i|t=("  H|O|"[i%2*2,4]+"C|"*c+"O|H   "[i>>c&2^2,4]).chars.map{|j|(z=" "*8)+j+z}
c.times{|j|t[4+j*2][0,7]="    H - O -"[i>>j-1&4,7]
t[4+j*2][10,7]="- O - H    "[i>>h-j-3&4^4,7]}
i*(k+1)>>h/2&k-1<i||("%b"%i).sum%16!=s[5].to_i||i%7>c*3||puts(t)}}

परीक्षण कार्यक्रम में अपराजित

f=->s{
  (k=1<<h=2+2*c=s[1].to_i).times{|i|                       #c=number of C atoms. h=number of H (calculated)
                                                           #iterate i from 0 to (k=1<<h)-1

  t=("  H|O|"[i%2*2,4]+"C|"*c+"O|H   "[i>>c&2^2,4]).       #compose a backbone string H-C...C-H. Insert O at the top where bit 0 of i set, and O at the bottom where bit c+1 of i set
  chars.map{|j|(z=" "*8)+j+z}                              #convert string to an array of characters, pad each character left and right with 8 spaces

  c.times{|j|t[4+j*2][0,7]="    H - O -"[i>>j-1&4,7]       #overwrite spaces on left with H or HO according to bits 1 up to c
             t[4+j*2][10,7]="- O - H    "[i>>h-j-3&4^4,7]} #overwrite spaces on right with H or OH according to bits h-1 down to c+1

  i*(k+1)>>h/2&k-1<i||                                     #rotate the bits of i by h/2. if this is less than i, do not output the structure (eliminates rotations by 180deg by outputtng the lexically highest)
  ("%b"%i).sum%16!=s[5].to_i||                             #if the number of 1's in i differs from the number of O's indicated in the input, do not output
  i%7>c*3||                                                #if i%7>c*3, do not output (empirical solution to avoid 90deg rotations for C=1)
  puts(t)                                                  #if the above are all false, output the current structure.
  }
}

f[gets]

उत्पादन

स्पेसिंग प्रश्न आउटपुट के अनुसार है। प्रति टिप्पणी क्षैतिज अनुमत के बजाय ऊर्ध्वाधर लंबवत। 90 या 180 डिग्री के माध्यम से पूरे प्रदर्शन के रोटेशन को समकक्ष माना जाता है।

C2H6O2
        H
        |
        O
        |
H - O - C - H
        |
    H - C - H
        |
        H



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





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



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



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



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



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





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





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

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