गोल्फ एक घुलनशीलता चार्ट


12

एक उद्धरण और आयन के नाम को देखते हुए, आउटपुट "S" (घुलनशील) या "I" (अघुलनशील)। हमारे द्वारा उपयोग की जाने वाली तालिका विकिपीडिया से है: https://en.wikipedia.org/wiki/Solubility_chart । इसे भविष्य के संदर्भ के लिए प्रश्न के अंत में कॉपी किया जाता है।

इनपुट : एक स्थान द्वारा अलग किया गया आयन, उसके बाद आयन। राशन निम्न में से एक होगा:

Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium 
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver

और आयनों निम्नलिखित में से एक होगा:

Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate 
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate

प्रत्येक का पहला अक्षर कैपिटल होगा।

उदाहरण इनपुट: Sodium Chloride

आउटपुट : एक सत्य मूल्य, या S, अगर यह घुलनशील, झूठा या Iअन्यथा है। यदि विकिपीडिया पृष्ठ कुछ और सूचीबद्ध करता है (जैसे थोड़ा घुलनशील, या पानी के साथ प्रतिक्रिया करता है) या यदि इनपुट "उद्धरण आयन" के रूप में नहीं है, तो आपका प्रोग्राम कुछ भी (अपरिभाषित व्यवहार) कर सकता है, इसलिए यह 'S', 'आउटपुट' कर सकता है। मैं ', या कुछ और।

तालिका:

?,S,S,S,?,S,S,S,?,S,S,?,I,S,S
S,S,S,S,S,S,S,S,S,S,S,?,S,S,S
S,S,S,S,S,S,S,S,S,S,S,?,S,S,S
S,S,S,S,S,S,S,S,?,S,S,?,S,S,S
S,S,S,?,?,?,?,?,?,?,S,?,?,S,?
?,S,S,S,I,S,I,?,?,?,S,I,I,S,I
I,S,S,S,I,S,?,S,?,?,S,?,I,?,I
?,S,S,S,I,S,S,?,?,?,S,?,?,I,?
?,S,S,S,I,S,S,S,?,?,S,?,?,I,?
?,S,S,S,I,S,I,I,?,?,S,I,I,S,I
S,S,S,S,I,S,I,?,?,?,S,I,I,S,I
?,S,S,?,I,S,I,?,?,I,S,I,I,S,I
S,S,S,?,?,S,I,?,?,?,S,I,I,S,I
?,S,S,?,?,S,I,?,?,?,S,I,I,?,I
?,?,?,I,I,S,I,?,?,?,S,I,I,I,?
S,I,I,I,I,S,?,I,I,?,S,?,I,?,I

पंक्तियाँ ऊपर सूचीबद्ध क्रम में उद्धरण हैं और कॉलम एनीज़ हैं। उदाहरण के लिए, चूंकि मैग्नीशियम आयोडाइड घुलनशील है, और मैग्नीशियम 6 वाँ राशन था और आयोडाइड 4 वाँ आयन था, छठी पंक्ति और 4 वें स्तंभ में वर्ण 'S' है। ?अपरिभाषित व्यवहार को दर्शाता है।


1
मुझे यह पसंद है क्योंकि s का अपरिभाषित व्यवहार ?एल्गोरिदम को किसी भी चीज़ में बहुत स्वतंत्रता देता है।
जो किंग

1
@FryAmTheEggman kolmogorov-complexityटैग के बावजूद , चुनौती तालिका का उत्पादन करने के लिए नहीं कहती है, लेकिन किसी दिए गए (उद्धरण, आयन) जोड़ी के लिए सही मूल्य है।
अरनुलद

4
मैंने कोलमोगोरोव-जटिलता टैग को हटा दिया और निर्णय-समस्या टैग जोड़ दिया, क्योंकि यह एक निश्चित (या आंशिक रूप से निर्धारित) आउटपुट बनाने के बारे में नहीं है, लेकिन यह निर्धारित करना कि क्या एक निश्चित इनपुट कुछ मानदंडों को पूरा करता है।
स्टीवी ग्रिफिन

क्या आप केवल truthy/ 'S'या falsy/ के बजाय किसी भी 2 अलग सुसंगत मूल्यों को आउटपुट करने की अनुमति देने पर विचार करेंगे 'I'?
अरनुलद

मैं "स्पेस द्वारा अलग किए गए" विनिर्देश को छोड़ने का सुझाव देता हूं और इसके बजाय साइट की चूक के अलावा "की तर्ज पर कुछ कह रहा हूं", दो इनपुट को एक एकल इनपुट के रूप में स्वीकार किया जा सकता है जो एक निरंतर अप्रयुक्त चरित्र (जैसे एक स्थान) द्वारा अलग किया जाता है "। दो इनपुट यहां अधिक गोल्फ रचनात्मकता की अनुमति दे सकते हैं (जैसे कि करी कार्य)।
जोनाथन एलन

जवाबों:


8

जावास्क्रिप्ट (Node.js) , 143 बाइट्स

घुलनशील के लिए 1 लौटाता है , अघुलनशील के लिए 0

s=>Buffer(`## 5)6.'04+ n:# (F* E"/$;&-"/"7&#.%`).map(c=>S+='1'.repeat(c-32)+0,S='')|S[parseInt(s.split` `[1].slice(1,7)+s[0]+s[1],35)%1325%508]

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

कैसे?

इनपुट स्ट्रिंग को लुकअप इंडेक्स में बदलना

हम पहले आयनों के 2 से 7 वें वर्णों को निकालकर और पिंजरे के दो पहले पात्रों को जोड़कर एक कुंजी बनाते हैं:

key = s.split` `[1].slice(1, 7) + s[0] + s[1]

उदाहरण:

'Lithium Fluoride'  --> 'luoridLi'
'Sodium Fluoride'   --> 'luoridSo'
'Sodium Dichromate' --> 'ichromSo'
'Calcium Oxide'     --> 'xideCa'

हम इसे बेस -35 में पार्स करके और मोडुलो 508 के बाद मॉडुलो 1325 (ब्रूट-मजबूर मान) लागू करके लुकअप इंडेक्स में बदल देते हैं:

parseInt(key, 35) % 1325 % 508

लुकअप टेबल का संपीड़न

क्योंकि अघुलनशील लोगों की तुलना में काफी अधिक घुलनशील जोड़े हैं, हम घुलनशील के साथ लुकअप में सभी अप्रयुक्त प्रविष्टियों को भरते हैं ।

साथ घुलनशील एन्कोडिंग तक 1 के साथ और अघुलनशील 0 , हमारे लुकअप तालिका अनिवार्य रूप से की लंबी तार के होते हैं 1 'एक के बाद एस 0 :

11101110011111111111111111111101111111110111111111111111111111101111111111111101111111011111
11111111111011111111111111111111011111111111001111111111111111111111111111111111111111111111
11111111111111111111111111111111011111111111111111111111111011100111111110111111111111111111
11111111111111111111011111111110011111111111111111111111111111111111110110111111111111111011
11011111111111111111111111111101111110111111111111101101111111111111110110111111111111111111
11111011111101110111111111111110111110

हम इसे [32-126] सीमा में ASCII वर्णों के रूप में 1 के तार की लंबाई को संग्रहीत करके संपीड़ित करते हैं ।


8

रूबी -n , 96 92 75 70 69 65 बाइट्स

p /ra|[SPm]o|^[^C]*F|h.*D/?1:/Le|[MAIZ].*y|[OPDFbv]|[tr]i.*S/?0:1

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

मैं हैश और लुकअप टेबल बनाने में बहुत अच्छा नहीं हूं, इसलिए मैंने टेबल की तार्किक संरचना को सरल बनाने के लिए उन सभी प्रश्न-चिह्न वाइल्डकार्ड का लाभ उठाने का विकल्प चुना, और फिर कुछ शुद्ध रेगेक्स जादू लागू किया।

अपडेट : कुछ प्रश्न चिह्नों के बदले हुए असाइनमेंट और मिलान के तर्क को और सरल बनाया।

अपडेट 2 : सिर्फ 2 महीने बाद, मैं कुछ और बाइट्स को बचाने के लिए तालिका के एक और सुधार के साथ आया हूं।

हम जिस तालिका का निर्माण करने जा रहे हैं वह इस प्रकार है:

Lithium    111101111110011
Sodium     111111111111111
Potassium  111111111111111
Ammonium   111111111111111
Beryllium  111101111110010
Magnesium  111101000010010
Calcium    011101111110010
Strontium  111101111110000
Barium     111101111110000
Zinc       111101000010010
Iron(II)   111101000010010
Copper(II) 011101000010010
Aluminium  111101000010010
Iron(III)  111101000010010
Lead(II)   100001000010000
Silver     100001000010000

अब, निम्नलिखित यौगिकों को घुलनशील माना जा सकता है:

  • raनित रा ते, क्लो रा ते
  • [SPm]o तो dium, पो tassium, Am मो nium
  • ^[^C]*F F luoride, लेकिन C alcium या C opper नहीं है
  • h.*Dलिट ium डी ichromate

शेष यौगिकों में से, निम्न अघुलनशील हैं:

  • Le ले एड
  • [MAIZ]i.*y M agnesium, A luminium, I ron (और अन्य आवेशों के साथ संकेतित आवेश), Z inc यौगिकों के साथ युक्त आयनों के ब्लॉक y(H y droxide-Thioc y aate)
  • [OPDFbv] O xide, P hosphate, D ichromate, F luoride, Car b onate, Sil v er
  • [tr]i.*Sस्ट्रोन टी उम और बा री उम एस ulfates

बाकी सब कुछ घुलनशील है।


4

पायथन 2 , 166 161 131 बाइट्स

lambda n:chr(hash(n)%1482%737%388%310%295%262%254)not in'gwQFCAkOExUWHJ0gJyicLLKviDK3PEDDxslKztFUV1ja4ukdbe7x9Xd5'.decode('base64')

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


आपको इतने मॉड नंबर कैसे मिले?
अलेक्जेंडर

1
@AlexRacer मैंने एक पायथन स्क्रिप्ट लिखी है जो एक निश्चित सीमा तक पूर्णांकों की कोशिश करती है, इस तरह से कि modulo की गणना करने से घुलनशील और अघुलनशील इनपुट के लिए समान परिणाम नहीं मिलते हैं। बार-बार इस स्क्रिप्ट को चलाकर। मुझे ये सभी नंबर मिले।
अंडा

@AlexRacer मैंने इस चुनौती से पहले उस स्क्रिप्ट का बहुत बार उपयोग किया है, उदा: codegolf.stackexchange.com/a/115706/64121 । आम तौर पर ये मोडुलो चेन थोड़े छोटे होते हैं।
अंडा


2

पास्कल (एफपीसी) , 387 358 353 348 341 319 297 बाइट्स

var s,t:string;j:word;c:array[0..14]of word=(5055,8191,8191,8191,93,63,4143,175,4271,63,127,31,95,3,67);begin read(s);t:=copy(s,pos(' ',s)+1,6);j:=pos(t[1..2],'OxCyCaPhThDiHyFlIoSuBrChChNi')div 2;if'a'=t[6]then j:=12;write(c[pos(s[1..2],'LiSoPoAmBeMaCaStBaZiIrCoAlLeSi')div 2]shr(13-j)mod 2>0)end.

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

स्पष्टीकरण:

var a:string='LiSoPoAmBeMaCaStBaZiIrCoAlLeSi'; //string containing first 2 letters of cations (can also be const)
                                               //luckily, Iron(II) and Iron(III) are compatible, they can have the same outputs
    b:string='OxCyCaPhThDiHyFlIoSuBrChChNi'; //string containing first 2 letters of anions (can also be const)
                                             //the order is different from the Wikipedia chart;
                                             //Chloride and Chlorate are next to each other to find the right index easier
                                             //Cyanide and Cyanate are compatible - 1 column less
                                             //overall, they are ordered to minimize the numbers in c
    s,t:string;
    i,j:word;
    c:array[0..14]of word=(5055,8191,8191,8191,93,63,4143,175,4271,63,127,31,95,3,67);
      //One number for each cation; one bit for solubility of particular combination; the bit for input combination will be found using i and j
begin
  read(s); //put input into s
  t:=copy(s,pos(' ',s)+1,6); //find the 2nd word in s (characters after space), take first 6 letters and copy them into t (6th letter is needed later)
  i:=pos(s[1..2],a)div 2; //position of first 2 letters of cation in a
                          //divided by 2 to get index for c
                          //*in golfed code, expression for i is inserted directly into write function
  j:=pos(t[1..2],b)div 2; //position of first 2 letters of anion in b
                          //divided by 2 to get the particular bit of c[i]
  if(j=11)and(t[6]='a')then j:=j+1; //if the anion is Chlorate, j is wrong and needs to be increased (specifically to 12);
                                    //only Chlorate has 'a' as 6th character, j doesn't need to be checked, but it's here for easier understanding
  writeln((c[i]shr(13-j))mod 2>0); //take i-th element of c, shift it right to put the correct bit at last position,
                                   //extract that bit, check if greater than 0
end.

1

जेली ,  67 61 60 50 47  44 बाइट्स

OḌ%⁽Ƭ%⁽£ṇ%⁽¡ẹ%249ḟ“ıA¬ɲḃẏCċtȯƁƤçȤċŒḲOƲ’D‘Ĥ

एक मोनैडिक लिंक एक सूची लौटाता है जो खाली है Iऔर गैर के लिए खाली है S(जेली में खाली सूची झूठी हैं जबकि गैर-खाली सत्य हैं)।

इसे ऑनलाइन आज़माएं! (पाद लेख”S”IÇ?हैif LastLink(x) is Truthy then "S" else "I")

या ओपी में ग्रिड के क्रम से मेल खाते ग्रिड के रूप में स्वरूपित सभी मामलों को देखें ।

कैसे?

इनपुट्स के सेट बनाने के बाद और इन इनपुट्स का बेस दस (पायथन:) के रूप में मूल्यांकन करना चाहिए Sऔर मॉडुलो-इंग वैल्यूज़ के कुछ लूप्स का उपयोग करना और यहाँ इस्तेमाल किए गए हैश की जाँच करना पाया गया।Idec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))

अघुलनशील कुंजी पूर्णांक कोड में एक आधार 250 एनकोडेड पूर्णांक का मूल्यांकन करके बनाया जाता है, इसे आधार  25 ... 16  * ... 10 और संचयी रूप से परिणाम को जोड़ते हैं ...

* कुछ अतिरेक कुंजियों को जोड़कर आधार कटौती प्राप्त की गई

OḌ%⁽Ƭ%⁽£ṇ%⁽¡ẹ%249ḟ“...’D‘Ĥ - Main Link: list of characters   e.g. "Calcium Carbonate"
O                            - cast to a list of ordinals      [67,97,108,99,105,117,109,32,67,97,114,98,111,110,97,116,101]
 Ḍ                           - convert from base ten           778907829795030961
   ⁽Ƭ                       - base 250 literal = 4258
  %                          - modulo                          625
       ⁽£ṇ                   - base 250 literal = 1721
      %                      - modulo                          625
           ⁽¡ẹ               - base 250 literal = 1215
          %                  - modulo                          625
               249           - literal 249
              %              - modulo                          127
                           ¤ - nilad followed by link(s) as a nilad:
                   “...’     -   literal in base 250    = 382193517807860310905428231939605402667395154
                        D    -   convert to decimal     = [3,8,2,1,9,3,5,1,7,8,0,7,8,6,0,3,1,0,9,0,5,4,2,8,2,3,1,9,3,9,6,0,5,4,0,2,6,6,7,3,9,5,1,5,4]
                         ‘   -   increment (vectorises) = [4,9,3,2,10,4,6,2,8,9,1,8,9,7,1,4,2,1,10,1,6,5,3,9,3,4,2,10,4,10,7,1,6,5,1,3,7,7,8,4,10,6,2,6,5]
                          Ä  -   cumulative sum         = [4,13,16,18,28,32,38,40,48,57,58,66,75,82,83,87,89,90,100,101,107,112,115,124,127,131,133,143,147,157,164,165,171,176,177,180,187,194,202,206,216,222,224,230,235]
                             -     ...note the redundant keys are --->            48       66 75                                115                                                     187             216
                  ḟ          - filter discard (implicit wrap)  [] (if 127 was not in the list above this would've been [127])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.