Golf "atomique" - déterminez le nombre de neutrons dans un isotope

9

Votre tâche consiste à prendre une chaîne contenant un isotope d'un élément en entrée, codée comme l'exemple suivant avec le numéro atomique suivi d'un espace et du symbole chimique IUPAC de l'élément:

162 Dy

et retourner le nombre de neutrons dans un atome de cet isotope.

Dans l'exemple ci-dessus, le dysprosium-162 a 96 neutrons (162 nucléons au total, moins 66 protons parce que c'est du dysprosium), donc la sortie devrait être 96.

Vous pouvez supposer que l'élément donné sera l'un des 114 éléments actuellement nommés de façon permanente par l'UICPA (y compris le flerovium et le livermorium) et non un nom générique comme Uuspour "ununseptium". Vous pouvez également supposer que le numéro atomique de l'isotope ne dépassera pas 1000, ou sera inférieur au nombre de protons dans l'élément.

Vous ne pouvez pas utiliser les fonctions intégrées pour récupérer des données sur le nombre d'éléments protons ou neutrons, ou utiliser une fonction dans votre code qui évalue une chaîne ou un jeton numérique comme code à part entière.

Le programme qui utilise le moins de jetons pour le faire dans n'importe quelle langue gagne. Cependant, aux fins de ce défi, chaque caractère d'une chaîne ou un nom de variable converti en chaîne compte comme un jeton.

Liste des éléments et leur numéro atomique pour référence:

Joe Z.
la source
Ahaha à droite, il suffit de lire le tag wiki. On dirait que j'ai mal compris ce que la balise englobait.
Sp3000
1
En général, le golf à code atomique est meilleur que le golf à code en termes d'équité entre les langues car il ne favorise pas les langues spécifiques au golf comme CJam ou Golfscript.
Joe Z.
2
Les nombres sont-ils considérés comme un seul jeton? Comme dans ma réponse, est-ce 65qu'un seul jeton ou 2 jetons?
Optimizer
4
"En général, le golf à code atomique est meilleur que le golf à code en termes d'équité entre les langues car il ne favorise pas les langues spécifiques au golf comme CJam ou Golfscript." Ou alors? ;)
Martin Ender
1
Si les fonctions intégrées étaient autorisées, la fonction suivante, écrite en Mathematica, pourrait être utilisée:f[i_] := {n = ElementData[#[[2]], ToString@"StandardName"] <> ToString[#[[1]]], IsotopeData[n, "NeutronNumber"]} &[i]
DavidC

Réponses:

5

CJam, 120 6 ou 116 jetons

Si les nombres sont un seul jeton, alors nous avons le code entier sous forme de 6 jetons:

212065132249371573644124577121541653292994215804249878509033804566332949723850494006885998432589817663973272353884582668784347806472090795216938149345570424681103578762377771127645936569136562173556524971260383556793671988140498193154122873972644190003488894117491373991987567199279175132071186860926217964652052981868515510731685503564515183920386542420190587555479397630718313762477968862282786518176572529906744217608955037610524188966159703528812103601771438848515748286560373093942224945233978303729665751831532717 128b:c~

où sont les jetons

212065132249371573644124577121541653292994215804249878509033804566332949723850494006885998432589817663973272353884582668784347806472090795216938149345570424681103578762377771127645936569136562173556524971260383556793671988140498193154122873972644190003488894117491373991987567199279175132071186860926217964652052981868515510731685503564515183920386542420190587555479397630718313762477968862282786518176572529906744217608955037610524188966159703528812103601771438848515748286560373093942224945233978303729665751831532717
128
b
:
c
~

Ce code est équivalent au code ci-dessous contenant la version chaîne du grand nombre dans le code ci-dessus. Mais en raison d'une chaîne, le code ci-dessous a 116 jetons:

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

Les jetons (avec explication) sont

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

Pour exécuter la chaîne ci-dessus, copiez le code de ce lien car SE supprime certains caractères lors du téléchargement de la réponse.

Cela peut également être réduit à 109 jetons, mais SE ne me laissera pas télécharger ma réponse, lançant une exception d'URI malformée.

L'entrée va comme

162 Dy

la sortie est comme

96

La chaîne étrange est juste une chaîne codée de base contenant tous les noms IUPAC à leur Atomic number * 2 - 1index.

Essayez-le en ligne ici

Optimiseur
la source
Pourquoi les nombres ne seraient-ils pas un seul jeton?
Martin Ender
@ MartinBüttner Eh bien, si pour les besoins de cette question, les chaînes ne sont pas un seul jeton, alors les chiffres peuvent ne pas être trop :)
Optimizer
1
Cela donne le mauvais résultat pour le bore et l'indium, car les lettres à deux éléments commençant par Bet Iapparaissent devant elles.
Martin Ender
^ Vous voulez dire le bore et l'iode. L'indium l'est In.
Joe Z.10
Aussi, les gars. Ce bug pour B et moi est corrigé.
Optimizer
1

Python 3 avec exec, 17 jetons

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

Python 3 sans exec, 35 jetons

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

Rubis avec éval, 17 jetons

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

Javascript, 49 jetons

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

Juste pour illustrer Compter les gros-nombres / symboles / variables comme N jetons dans atomic-code-golf :)

kennytm
la source
Est-ce que le refus evalet le exectravail contre cela?
Joe Z.
@JoeZ. Toujours vulnérable à l'attaque d'une "grande table de recherche d'entiers", voir la mise à jour.
kennytm
Il semble donc que ce problème était mal formé dès le départ.
Joe Z.10
0

Javascript, 42 jetons (?)

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)

PS: Où puis-je trouver un script pour compter les jetons?

Qwertiy
la source