"परमाणु" कोड गोल्फ - एक आइसोटोप में न्यूट्रॉन की संख्या निर्धारित करते हैं


9

आपका कार्य इनपुट के रूप में एक तत्व के आइसोटोप युक्त एक स्ट्रिंग को लेना है, परमाणु संख्या के साथ निम्नलिखित उदाहरण की तरह एन्कोड किया गया है और तत्व के लिए IUPAC रासायनिक प्रतीक है:

162 Dy

और उस समस्थानिक के एक परमाणु में न्यूट्रॉन की संख्या लौटाते हैं ।

उपरोक्त उदाहरण में, डिस्प्रोसियम -156 में 96 न्यूट्रॉन (162 कुल नाभिक, माइनस 66 प्रोटॉन हैं क्योंकि यह डिस्प्रोसियम है), इसलिए आउटपुट होना चाहिए 96

आप मान सकते हैं कि दिया गया तत्व वर्तमान में IUPAC (फ़्लेरोवियम और लिवरमोरियम सहित) द्वारा दिए गए 114 तत्वों में से एक होगा और न कि जेनेरिक नाम जैसे Uus"अनयून्सेप्टियम"। आप यह भी मान सकते हैं कि आइसोटोप की परमाणु संख्या 1000 से अधिक नहीं होगी, या तत्व में प्रोटॉन की संख्या से कम होगी।

आप प्रोटॉन या न्यूट्रॉन तत्वों की संख्या के बारे में डेटा प्राप्त करने के लिए बिल्ट-इन का उपयोग नहीं कर सकते हैं, या अपने कोड के भीतर किसी फ़ंक्शन का उपयोग कर सकते हैं जो किसी स्ट्रिंग या संख्या टोकन का मूल्यांकन कोड के रूप में करता है।

किसी भी भाषा की जीत में ऐसा करने के लिए सबसे कम टोकन का उपयोग करने का कार्यक्रम। हालाँकि, इस चुनौती के उद्देश्य के लिए, स्ट्रिंग में प्रत्येक वर्ण, या एक स्ट्रिंग में परिवर्तित चर नाम, टोकन के रूप में गिना जाता है।

संदर्भ के लिए तत्वों और उनकी परमाणु संख्या की सूची:


अहा सही है, बस टैग विकी पढ़ें। लगता है जैसे मैंने गलत समझा कि टैग क्या शामिल है।
Sp3000

1
सामान्य तौर पर, परमाणु कोड गोल्फ भाषाओं के बीच निष्पक्षता के संदर्भ में कोड गोल्फ से बेहतर है क्योंकि यह सीजेएम या गोल्फस्क्रिप्ट जैसी गोल्फ-विशिष्ट भाषाओं का पक्ष नहीं लेता है।
जो जेड

2
क्या संख्या को एकल टोकन माना जाता है? मेरे उत्तर की तरह, 65एक एकल टोकन या 2 टोकन है?
ऑप्टिमाइज़र

4
"सामान्य तौर पर, परमाणु कोड गोल्फ भाषाओं के बीच निष्पक्षता के मामले में कोड गोल्फ से बेहतर है क्योंकि यह सीजेएम या गोल्फस्क्रिप्ट जैसी गोल्फ-विशिष्ट भाषाओं का पक्ष नहीं लेता है।" या करता है? ;)
मार्टिन एंडर

1
यदि बिल्ट-इन की अनुमति दी गई है, तो निम्नलिखित फंक्शन, जिसे मैथेमेटिका में लिखा गया है, उपयोग किया जा सकता है:f[i_] := {n = ElementData[#[[2]], ToString@"StandardName"] <> ToString[#[[1]]], IsotopeData[n, "NeutronNumber"]} &[i]
डेविड डिक

जवाबों:


5

सीजाम, 120 6 या 116 टोकन

यदि संख्या एकल टोकन हैं, तो हमारे पास पूरे कोड 6 टोकन के रूप में हैं:

212065132249371573644124577121541653292994215804249878509033804566332949723850494006885998432589817663973272353884582668784347806472090795216938149345570424681103578762377771127645936569136562173556524971260383556793671988140498193154122873972644190003488894117491373991987567199279175132071186860926217964652052981868515510731685503564515183920386542420190587555479397630718313762477968862282786518176572529906744217608955037610524188966159703528812103601771438848515748286560373093942224945233978303729665751831532717 128b:c~

जहां टोकन हैं

212065132249371573644124577121541653292994215804249878509033804566332949723850494006885998432589817663973272353884582668784347806472090795216938149345570424681103578762377771127645936569136562173556524971260383556793671988140498193154122873972644190003488894117491373991987567199279175132071186860926217964652052981868515510731685503564515183920386542420190587555479397630718313762477968862282786518176572529906744217608955037610524188966159703528812103601771438848515748286560373093942224945233978303729665751831532717
128
b
:
c
~

यह कोड नीचे के कोड के बराबर है जिसमें उपरोक्त कोड में बड़ी संख्या का स्ट्रिंग संस्करण है। लेकिन एक स्ट्रिंग के कारण, नीचे दिए गए कोड में 116 टोकन हैं:

ri"ᘭ᛭绊ڏ晍嬨塐弶⛡ᠸ庐ᖩે槑湘ࡊ㚋䊌栕ᄂỗ∘抁埵ໂČ槩唹ᘇ穗≧ṷ㴛勤烓≿Ⲳ㇭Ȋ嬅͙獚簜䱡数㍉㉦䩛爈拴矍㚴燌㾄䱮⃜⢴ⶏ㯗႒ݘ੡䅄瞟⮘㢧⳻⮵∼䚽珯ほֹ㳰櫣ݰ牜᫦殙ᆌ穟䖻ᄭⓚ獙஧༧撒咛啺"2F#b57b65f+:cr2*2<#2/)-

टोकन (स्पष्टीकरण के साथ) हैं

r                           "Read the first input";
i                           "and convert it to integer";
"
91 character string         "Then this base converted string";
"
2
F
#                           "'s ASCII representation of each character gets converted";
b                           "to base 2**15";
57                          "which gets converted to";
b                           "base 57";
65                          "and we add 65 to each element in the base 57 array";
f
+
:
c                           "and convert each array element to character.";
r                           "Then read the next input string, which is atom's IUPAC";
2                           "double it";
*
2                           "and take only first 2 characters";
<
#                           "Find the occurrence of these 2 characters in the big string";
2                           "and divide the index by 2";
/
)                           "increment the index to counter 0 offset";
-                           "and subtract this number, which is the atomic number from"
                            "the input number of nucleons";

उपरोक्त स्ट्रिंग को चलाने के लिए, इस लिंक से कोड को कॉपी करें क्योंकि उत्तर अपलोड करते समय SE कुछ वर्णों को हटा देता है।

इसे 109 टोकन तक भी घटाया जा सकता है, लेकिन तब SE मुझे अपना उत्तर अपलोड नहीं करने देगा, विकृत URI अपवाद को फेंक देगा।

इनपुट पसंद आता है

162 Dy

आउटपुट जैसा है

96

अजीब स्ट्रिंग सिर्फ एक आधार एन्कोडेड स्ट्रिंग है जिसमें उनके Atomic number * 2 - 1सूचकांक में सभी IUPAC नाम होते हैं ।

इसे यहाँ ऑनलाइन आज़माएँ


संख्या एक टोकन क्यों नहीं होगी?
मार्टिन एंडर

@ मार्टिनबटनर, यदि इस प्रश्न के उद्देश्य के लिए, तार एकल टोकन नहीं हैं, तो संख्या बहुत अधिक नहीं हो सकती है :)
ऑप्टिमाइज़र

1
यह बोरोन और इंडियम के लिए गलत परिणाम देता है, क्योंकि दो-तत्व पत्र शुरू होते हैं Bऔर Iउनके सामने आते हैं।
मार्टिन एंडर

^ आप बोरन और आयोडीन का मतलब है। इंडियम है In
जो जेड।

इसके अलावा, दोस्तों। B और I के लिए यह बग ठीक हो गया है।
ऑप्टिमाइज़र

1

पायथन 3 निष्पादन के साथ, 17 टोकन

exec(int.to_bytes(42580960806925240587487231677747050990110980939298529158008049507419456038066480774222358994792932281429500848123044123619998194774734911333011516763318834841258668032468977581617546825403043048781904307873076644287421190283925612029151422009703963147720234582458918676020358978146687598642493196719470433413287097024943497230356536978257362073205770196031226838532057690859535911353521203287284228407660035870497366713816359382867026152168356178620422021081074864815228071041303891869741111572003521808946355179139580269537828514345177247630946236685801543450404664783011350766913659964138280312012942354586269107632396118108534925651704031851802293836135007879834261627022944650861299698061444211422731907625,295,'big'))

पायथन 3 निष्पादन के बिना, 35 टोकन

m,n=input().split()
print(int(m)-(0x50000003c00000000000000000000000000000000000000000000000000000000000000000000000000000000008c00000000000000000000000000000000000000000000000000000000d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116880005ad0000d002b832400000000000000000000000000000004c0000064f8000003806a0088015660000000000000000000000000000b00000000000ac0000000016efd12c0004b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017a700760005400f400000000000001700a56c000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000000002ee6000000000700000029e00522c0000000000000000000000000003680000002a3200000000000c00032800000000000000000000000000000e91c000ce000000000000000c000000000000e400000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a000006200000000000000000000000000000000000000000000000000006c0000043000000000000509008000000000000000000000000000000000000000000000000000000000000082000007c0000000000000000000000000000000ae00000019390000000000068000000000000000000000000000000000fc06388000000000000000000000000000000000000000000000000108000000006e0000000000000000000000000000d2000000000000000000000000000074037300001be1808800000000c4e98000050000000000000000000000000000000046000000000061014f580001000000e0000000000000000000000000013eaa12400000017c680000002f0000059000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c04a2f7001000007880e0001300d408012000060a0000000000000000000>>7*int(n,36)&127))

रूबी के साथ eval, 17 टोकन

eval [22146635005300445083784033446026580324048447941091204274213253110537099437818224958820496527991920943430421799402248351995854377736142191462062582991150146209770141259010870255095388946677505144127700666745571877848513432112199556183753919673308110291261587736766001750331575554182707626697924148465335917814388410868486650419909619279250674754531982074694183257024218097391705830277480110741636037821082572926228904583257826932150641336017429157246896262085081972165351023141358378905645164343005169041637147077645200273099823888392038731180787177889720531999846231330677441270444855911286469030157575699579420898896870179419644019549285098577609138033580761786048462145007410.to_s(16)].pack('H*')

जावास्क्रिप्ट, 49 टोकन

m=prompt().split(/ /);
alert(m[0]-(function(){
_H_He_Li_Be_B_C_N_O_F_Ne_Na_Mg_Al_Si_P_S_Cl_Ar_K_Ca_Sc_Ti_V_Cr_Mn_Fe_Co_Ni_Cu_Zn_Ga_Ge_As_Se_Br_Kr_Rb_Sr_Y_Zr_Nb_Mo_Tc_Ru_Rh_Pd_Ag_Cd_In_Sn_Sb_Te_I_Xe_Cs_Ba_La_Ce_Pr_Nd_Pm_Sm_Eu_Gd_Tb_Dy_Ho_Er_Tm_Yb_Lu_Hf_Ta_W_Re_Os_Ir_Pt_Au_Hg_Tl_Pb_Bi_Po_At_Rn_Fr_Ra_Ac_Th_Pa_U_Np_Pu_Am_Cm_Bk_Cf_Es_Fm_Md_No_Lr_Rf_Db_Sg_Bh_Hs_Mt_Ds_Rg_Cn_Uut_Fl_Uup_Lv_
}).toString().split(/_/).indexOf(m[1]))

बस परमाणु-कोड-गोल्फ में एन टोकनों के रूप में बड़े-ints / प्रतीकों / चर की गणना करने के लिए :)


क्या उस के खिलाफ काम करना evalऔर उसे खत्म execकरना है?
जो जेड।

@JoeZ। फिर भी "बड़ा पूर्णांक लुकअप टेबल" हमले के लिए कमजोर, अद्यतन देखें।
kennytm 18

ऐसा लगता है कि यह समस्या शुरू से बीमार थी, तब।
जो जेड।

0

जावास्क्रिप्ट, 42 टोकन (?)

alert(parseInt(x=prompt().split(" "))-Object.getOwnPropertyNames({__H_HeLiBeB_C_N_O_F_NeNaMgAlSiP_S_ClArK_CaScTiV_CrMnFeCoNiCuZnGaGeAsSeBrKrRbSrY_ZrNbMoTcRuRhPdAgCdInSnSbTeI_XeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaW_ReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPaU_NpPuAmCmBkCfEsFmMdNoLrRfDbSgBhHsMtDsRgCn__Fl__Lv:0})[0].indexOf(x[1])/2)

पुनश्च: जहाँ मुझे टोकन गिनने के लिए कुछ स्क्रिप्ट मिल सकती है?

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