कोडियम गोल्फ


28

इस चुनौती में, आपका कार्य आयनों और एक कटियन लेना है, और यौगिक के रासायनिक सूत्र का उत्पादन करना है। इनपुट इन नियमों का पालन करता है:

  • 2 तार में (किसी भी क्रम में) आयनों और कटियन का प्रतिनिधित्व करते हैं, उदा F , NH_4या Al
  • प्रत्येक आयन के प्रभार में लेने के लिए, आप इसे या तो एक कैरेट (जैसे F^-1) द्वारा अलग किए गए स्ट्रिंग के हिस्से के रूप में ले सकते हैं या अतिरिक्त संख्यात्मक तर्कों में ले सकते हैं।
    • नोट: जब तक आपके संख्यात्मक इनपुट प्रकार पर हस्ताक्षर किए जाते हैं, तब तक आयनों का आवेश ऋणात्मक संख्या के रूप में पारित हो जाएगा।
  • प्रतीक हमेशा वास्तविक होंगे, और सटीक रूप से चार्ज होंगे।

आउटपुट को इन नियमों का पालन करना चाहिए:

  • _सदस्यता के लिए उपयोग करें : Fe 2 O 3 होगा Fe_2O_3
  • पहले उद्धरण: NaCl, ClNa नहीं।
  • तटस्थ अणु: Li 2 O, LiO या LiO - नहीं
  • सबसे कम संभव गुणांक: Fe 2 O 3 , न कि Fe 4 O 6
  • कोई सबस्क्रिप्ट नहीं: NaCl, Na 1 Cl नहीं 1
  • शिफ्टिंग नहीं: NH 4 OH, NH 5 नहीं O नहीं
  • सशर्त कोष्ठक:
    • एकल-परमाणु आयन पर कोष्ठक का उपयोग न करें: MgCl 2 , Mg (Cl) 2 नहीं
    • यदि प्रति अणु आयन में से केवल एक में कोष्ठक का प्रयोग न करें: KClO 3 , K नहीं (ClO 3) ) नहीं।
    • यदि दो या दो से अधिक पॉलिथैमिक आयन हों, तो कोष्ठक का उपयोग करें: Be 3 (PO 4 ) 2 , Be 3 PO 4 2 या Be 3 P 2 O 8

यहां कुछ अतिरिक्त नमूना इनपुट और आउटपुट दिए गए हैं:

Input               Output
Fe^+3, O^-2         Fe_2O_3
Fe^+2, O^-2         FeO
H^+1, SO_4^-2       H_2SO_4
Al^+3, SO_4^-2      Al_2(SO_4)_3
NH_4^+1, SO_4^-2    (NH_4)_2SO_4
Hg_2^+2, PO_4^-3    (Hg_2)_3(PO_4)_2
NH_4^+1, OH^-1      NH_4OH
Hg_2^+2, O_2^-2     Hg_2O_2

चूंकि यह , बाइट्स में सबसे कम जवाब जीतता है।


3
अनुशंसित परीक्षण मामला: Fe^+2, OH^-1: Fe(OH)_2प्रत्येक तत्व के 1 के साथ एक पॉलीएटोमिक आयन के लिए ( OH^-1)।
pizzapants184

1
@ Adám दूसरा आयन चार्ज किया जाता है NO_3^-1:। इसके अलावा एक और टेस्ट केस पहले वाला होना चाहिए ^-2, ताकि यह बन जाए (C(NH_2)_3)_2...। या ऐसा मामला जहां आयन को एक बार से अधिक जरूरत होती है, एक ब्रैकेट के साथ शुरू होता है।
हेमडाल

1
@ Fe_4(Fe(CN)_6)_3प्रशिया नीले रंग के लिए।
कोलेरा सु

3
यह इस वेबसाइट पर अब तक का सबसे मजेदार चैलेंज टाइटल हो सकता है, और यह एक ppcg सवाल के लिए बहुत कुछ कह रहा है। अच्छी हंसी के लिए धन्यवाद
osuka_

1
@osuka_ क्या आपने देखा है "अरकडे पर" मेरे परिवार को मारने का सबसे तेज़ तरीका क्या है? या मेरी अन्य पीपीसीजी चुनौती, "इलुमिनाती की पुष्टि करें"?
निसा

जवाबों:


4

एपीएल (डायलॉग) , 60 59 61 बाइट्स

+2 चूंकि आरोपों पर हस्ताक्षर किए जाने चाहिए।

अनाम शिशु फ़ंक्शन। बाएं तर्क के रूप में आयनों (आयनों, धनायनों) की सूची लेता है और सही तर्क के रूप में संबंधित आरोपों की सूची।

{∊(⍺{⍵∧1<≢⍺∩⎕D,⎕A:1')(',⍺⋄⍺}¨m),¨(ms1)/¨'_',∘⍕¨s←⍵÷⍨∧/⍵}∘|

इसे ऑनलाइन आज़माएं!

{... }∘| फ़ंक्शन जहां बाएं तर्क है और सही तर्क की परिमाण है:

∧/⍵ आरोपों के एलसीएम

⍵÷⍨ उस पर आरोपों को विभाजित करें

s← स्टोर में s( s cricripts के लिए)

'_',∘⍕¨ प्रारूप (स्ट्रिंग) और प्रत्येक के लिए अंडरबार प्रस्तुत करना

(... )/ प्रत्येक के प्रत्येक अक्षर को उसी मान से दोहराएं:

  s≠1 है sसे अलग 1? (1 या 0 देता है)

  m← में स्टोर करें m( एम अल्टुपर के लिए)

(),¨ उन लोगों के लिए क्रमशः निम्नलिखित प्रस्तुत करें:

  ⍺{... }¨m प्रत्येक के लिए, इस समारोह को आयनों के साथ और mतर्कों के रूप में कहें :

   ⎕D,⎕AD igits ने इसके बाद अपरकेस A lphabet किया

   ⍺∩ आयन और उस के प्रतिच्छेदन

    उस में वर्णों की संख्या टैली

   1< क्या उससे कम है? (यानी हमारे पास एक बहु-तत्व आयन है?)

   ⍵∧ और क्या हमें उस आयन के कई गुण चाहिए?

   : यदि ऐसा है, तो:

    ')(',⍺ आयन को स्ट्रिंग प्रीपेंड करें

    1⌽ चक्रवात एक कदम बाईं ओर घुमाता है ( )दाईं ओर डालता है )

    अन्य

     आयन unmodified लौटें

ϵ nlist (समतल)


6

C, 208 205 175 169 बाइट्स

argv[1]: कटियन
argv[2]: आयनों का
आरोप स्टड पर लिया जाता है।

#define z(b)for(i=*++v;*++i>95;);printf(b>1?*i?"(%s)_%d":"%s_%d":"%s",*v,b);
main(c,v,d,e,g,h,i)char**v,*i;{scanf("%d%d",&c,&d);for(e=c,h=-d;g=h;e=g)h=e%g;z(-d/e)z(c/e)}

ओपी निर्दिष्ट आयन किसी भी क्रम में दिए जा सकते हैं।
Heimdall

6

रेटिना , 86 80 बाइट्स

6 बाइट बचाने के लिए नील को धन्यवाद।

^
(
\^.+
)_$&$*
(1+)(\1|¶.+)+_(\1)+$
$#3$2_$#2
_1$

m)T`()``.+\)$|\(.[a-z]?\)
¶

इसे ऑनलाइन आज़माएं!

इनपुट लाइनफीड-सेपरेटेड है (टेस्ट सूट सुविधा के लिए कॉमा-सेपरेशन का उपयोग करता है)।

व्याख्या

^
(

हम (प्रत्येक अणु को एक से जोड़कर शुरू करते हैं। ^पर मैचों लाइन क्योंकि शुरुआत m)कार्यक्रम के अंत में सभी पूर्ववर्ती चरणों के लिए बहु मोड सेट।

\^.+
)_$&$*

हम उस ^[-+]nभाग को प्रतिस्थापित करते हैं )_, जिसकी nप्रतियों के द्वारा 1(अर्थात हम आवेशों को एकरूप में परिवर्तित करते हैं, संकेतों को छोड़ते हैं)।

(1+)(\1|¶.+)+_(\1)+$
$#3$2_$#2

यह चरण तीन काम करता है: यह दोनों आरोपों को उनके GCD द्वारा विभाजित करता है, उन्हें वापस दशमलव में परिवर्तित करता है और उन्हें स्वैप करता है। जीसीडी को रेगेक्स में काफी आसानी से पाया जा सकता है, सबसे लंबे समय तक मिलान करके 1+जो हमें केवल बैकरेक्शन का उपयोग करके दोनों चार्ज से मेल खाता है \1। इसे विभाजित करने के लिए, हम रेटिना की "कैप्चर काउंट" सुविधा का उपयोग करते हैं, जो हमें बताता है कि किसी समूह का कितनी बार उपयोग किया गया है। तो $#2GCD द्वारा विभाजित पहला शुल्क है और $#3GCD (दोनों दशमलव में) द्वारा विभाजित दूसरा प्रभार है।

_1$

हम _1दोनों हिस्सों के सिरों से एस हटाते हैं ।

m)T`()``.+\)$|\(.[a-z]?\)

और हम कोष्ठकों को उन रेखाओं से छोड़ते हैं जो अंत में होती हैं )(अर्थात जिनके पास _1वहाँ था), साथ ही साथ वे रेखाएँ जिनमें केवल एक एकल परमाणु होता है।

अंत में, हम लाइनफॉल को गिराकर दो अणुओं को मिलाते हैं।



2

पायथन 3 , 131 बाइट्स

lambda c,a,C,A:g(c,A/gcd(C,A))+g(a,C/gcd(C,A))
from math import*
g=lambda s,n:[s,[s,'(%s)'%s][sum(c<'`'for c in s)>1]+'_%d'%n][n>1]

इसे ऑनलाइन आज़माएं!

पायथन 2 , 196 174 170 155 149 140 136 बाइट्स

lambda c,a,C,A:g(c,A/gcd(C,A))+g(a,C/gcd(C,A))
from fractions import*
g=lambda s,n:[s,[s,'(%s)'%s][sum(c<'`'for c in s)>1]+'_'+`n`][n>1]

इसे ऑनलाइन आज़माएं!



2

पायथन 3 , 129 बाइट्स

lambda E,e,I,i,m=lambda e,i:(len(e)>2<=i)*"("+e+(len(e)>2<=i)*")"+"_%d"%i*(i>1):m(E,i/gcd(i,I))+m(e,I/gcd(i,I))
from math import*

इसे ऑनलाइन आज़माएं!


यदि हमें आयनों के ऋणात्मक आवेशों को संभालने की आवश्यकता है, तो 153 बाइट्स:

lambda E,e,I,i,a=abs,m=lambda e,i:(len(e)>2<=i)*"("+e+(len(e)>2<=i)*")"+"_%d"%i*(i>1):m(E,a(i)/gcd(a(i),a(I)))+m(e,a(I)/gcd(a(i),a(I)))
from math import*

इसे ऑनलाइन आज़माएं!


2

आरपीएल (एचपी 48 एस / एसएक्स), 294.5 बाइट्स

हां, हास्यास्पद रूप से बड़ी प्रस्तुति, सुनिश्चित नहीं है कि यह कितना प्रतिस्पर्धी होगा ...

DIR
  M
    « S ROT S SWAP ABS 4 PICK ABS
      DUP2 WHILE DUP2 REPEAT MOD SWAP END DROP2
      SWAP OVER / 4 ROLL J 3 ROLLD / ROT J
      ROT 0 > IF THEN SWAP END + »
  S
    « DUP "^" POS DUP2 1 + OVER SIZE SUB OBJ🡢
      3 ROLLD 1 - 1 SWAP SUB »
  J
    IF OVER 1 ==
    THEN SWAP DROP
    ELSE DUP SIZE DUP2 DUP SUB "Z" > - 1 >
      IF
      THEN "(" SWAP + ")" +
      END
      "_" + SWAP +
    END
END

3 दिनचर्या एक निर्देशिका में बड़े करीने से पैक। Mमुख्य है। यह उम्मीद करता है कि स्टैक पर 2 स्ट्रिंग्स आयनों के रूप में स्वरूपित होती हैं और स्टैक पर एक अणु स्ट्रिंग को धक्का देती हैं।

Sआयन को एक संख्या के रूप में और तत्व सूत्र को स्ट्रिंग के रूप में विभाजित करता है। उदाहरण के लिए, "PO_4^-3"ढेर से लिया और किया जाएगा -3और "PO_4"ढेर पर धक्का दे दिया।

Jसूत्र के साथ आयनों की संख्या को जोड़ता है और तय करता है कि सूत्र को कोष्ठक में लपेटना है या नहीं। पहले ELSE1 आयन के साथ बिट , स्ट्रिंग को छोड़ देता है जैसा कि यह है। उदाहरण के लिए, यदि वे स्टैक पर हैं 1और "PO_4"उन्हें बदल दिया गया है "PO_4"1और "H"देता है "H"

बाकी कई आयनों से संबंधित है; यदि यह एकल परमाणु है तो यह कोष्ठक में नहीं है, अन्यथा यह है। यह तय करने के लिए कि क्या यह है, मैं स्ट्रिंग की लंबाई की जांच करता हूं और जांचता हूं कि क्या अंतिम चरित्र है >"Z"। बूलियन अभिव्यक्तियाँ सत्य के लिए 1 और असत्य के लिए 0 वापस करती हैं। स्ट्रिंग की लंबाई से इस तुलना के परिणाम को घटाकर, मुझे 1 या उससे कम है जब यह एकल परमाणु है, अन्यथा अधिक: लंबाई 1 एक परमाणु है; लंबाई 2 में अंतिम वर्ण के रूप में एक पत्र होगा; एक परमाणु के लिए यह कम मामला है, इसलिए >"Z", परिणाम 1 बना, अन्यथा 2; लंबाई 3 या अधिक का मतलब है 1 से अधिक परमाणु और 0 या 1 के साथ लंबाई से घटाया गया परिणाम कम से कम 2. उदाहरण के लिए, 3और "PO_4"देता है "(PO_4)_3"3और "Al"देता है "Al_3"

Mपहले प्रत्येक आयन का उपयोग करके विभाजित करता है S। पहली पंक्ति के बाद स्टैक का स्तर 5 (इसलिए सबसे गहरी buries ऑब्जेक्ट) में दूसरा आयन का स्तर होता है, स्तर 4 सेकंड आयन का सूत्र, स्तर 3 पहले आयन का सूत्र, स्तर 2 पहले आयन का प्रभार और स्तर 1 का पूर्ण निरपेक्ष मान दूसरे आयन के आरोप के बाद। उदाहरण के लिए, यदि ढेर पर दिया आयनों हैं "Al^+3", "SO_4^-2"पर हम पाते हैं -2, "SO_4", "Al", 3, 2

दूसरी पंक्ति 2 आवेशों (चार्ज को छोड़कर) के gcd की गणना करती है।

तीसरी पंक्ति प्रत्येक आवेश को gcd (गुणकों की गणना करने के लिए) से विभाजित करती है और इसे आयन के सूत्र के साथ जोड़कर उपयोग करती है J। इसलिए हमारे पास एक दिए गए आयन के साथ प्रत्येक में दो तार हैं (हटाए गए एक या अधिक) और दूसरे के एक प्रभारी को उनके पीछे दफन किया गया है। उदाहरण के लिए, -2, "Al_2", "(SO_4)_3"(-2 SO_4 के प्रभारी है)।

चौथी पंक्ति आवेश को असहमत करती है और यदि यह सकारात्मक है तो इसमें शामिल होने से पहले दो तार (ताकि कटेशन पहले आता है) स्वैप हो जाए। इसलिए ऊपर के उदाहरण में, क्योंकि यह नकारात्मक है, वे इस क्रम में शामिल हो जाते हैं जैसे कि वे हैं "Al_2(SO_4)_3":।


1

जावास्क्रिप्ट, 145 बाइट्स

(c,a,p,n,g=(a,b)=>b?g(b,a%b):a)=>`(${c})_${n/-g(p,-n)}(${a})_${p/g(p,-n)}`.replace(/\(((\w+)\)(?=_1)|([A-Z][a-z]*)\))/g,"$2$3").replace(/_1/g,"")

तर्क लेता cकटियन है, aऋणायन है, pसकारात्मक चार्ज है, nनकारात्मक चार्ज है।

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