"Atomic" Code Golf - Bestimmen Sie die Anzahl der Neutronen in einem Isotop

9

Ihre Aufgabe besteht darin, eine Zeichenfolge mit einem Isotop eines Elements als Eingabe zu verwenden, die wie im folgenden Beispiel mit der Ordnungszahl gefolgt von einem Leerzeichen und dem chemischen IUPAC-Symbol für das Element codiert ist:

162 Dy

und geben Sie die Anzahl der Neutronen in einem Atom dieses Isotops zurück.

Im obigen Beispiel hat Dysprosium-162 96 Neutronen (162 Gesamtnukleonen, minus 66 Protonen, weil es Dysprosium ist), daher sollte die Ausgabe sein 96.

Sie können davon ausgehen, dass das angegebene Element eines der 114 Elemente ist, die derzeit von der IUPAC dauerhaft benannt werden (einschließlich Flerovium und Livermorium), und kein generischer Name wie Uus"Ununseptium". Sie können auch annehmen, dass die Ordnungszahl des Isotops 1000 nicht überschreitet oder kleiner als die Anzahl der Protonen im Element ist.

Sie dürfen keine integrierten Funktionen verwenden, um Daten über die Protonen- oder Neutronenzahl von Elementen abzurufen, oder eine Funktion in Ihrem Code verwenden, die eine Zeichenfolge oder ein Zahlentoken als eigenen Code auswertet.

Das Programm, das die wenigsten Token verwendet, um dies in einer beliebigen Sprache zu tun, gewinnt. Für diese Herausforderung zählt jedoch jedes Zeichen in einer Zeichenfolge oder ein in eine Zeichenfolge konvertierter Variablenname als Token.

Liste der Elemente und ihre Ordnungszahl als Referenz:

Joe Z.
quelle
Ahaha, richtig, lies einfach das Tag-Wiki. Scheint, als hätte ich falsch verstanden, was das Tag beinhaltete.
Sp3000
1
Im Allgemeinen ist Atomic Code Golf in Bezug auf die Fairness zwischen den Sprachen besser als Code Golf, da es keine golfspezifischen Sprachen wie CJam oder Golfscript bevorzugt.
Joe Z.
2
Werden Zahlen als einzelnes Token betrachtet? Wie in meiner Antwort, ist 65ein einzelnes Token oder 2 Token?
Optimierer
4
"Im Allgemeinen ist Atomic Code Golf in Bezug auf die Fairness zwischen den Sprachen besser als Code Golf, da es keine golfspezifischen Sprachen wie CJam oder Golfscript bevorzugt." Oder doch? ;)
Martin Ender
1
Wenn Einbauten erlaubt wären, könnte die folgende in Mathematica geschriebene Funktion verwendet werden:f[i_] := {n = ElementData[#[[2]], ToString@"StandardName"] <> ToString[#[[1]]], IsotopeData[n, "NeutronNumber"]} &[i]
DavidC

Antworten:

5

CJam, 120 6 oder 116 Token

Wenn Zahlen einzelne Token sind, haben wir den gesamten Code als 6 Token:

212065132249371573644124577121541653292994215804249878509033804566332949723850494006885998432589817663973272353884582668784347806472090795216938149345570424681103578762377771127645936569136562173556524971260383556793671988140498193154122873972644190003488894117491373991987567199279175132071186860926217964652052981868515510731685503564515183920386542420190587555479397630718313762477968862282786518176572529906744217608955037610524188966159703528812103601771438848515748286560373093942224945233978303729665751831532717 128b:c~

wo die Token sind

212065132249371573644124577121541653292994215804249878509033804566332949723850494006885998432589817663973272353884582668784347806472090795216938149345570424681103578762377771127645936569136562173556524971260383556793671988140498193154122873972644190003488894117491373991987567199279175132071186860926217964652052981868515510731685503564515183920386542420190587555479397630718313762477968862282786518176572529906744217608955037610524188966159703528812103601771438848515748286560373093942224945233978303729665751831532717
128
b
:
c
~

Dieser Code entspricht dem folgenden Code, der die Zeichenfolgenversion der großen Zahl im obigen Code enthält. Aufgrund einer Zeichenfolge enthält der folgende Code jedoch 116 Token:

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

Token (mit Erklärung) sind

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

Um die obige Zeichenfolge auszuführen, kopieren Sie den Code von diesem Link, da SE beim Hochladen der Antwort einige Zeichen entfernt.

Dies kann auch auf 109 Token reduziert werden, aber dann lässt SE mich meine Antwort nicht hochladen und löst eine fehlerhafte URI-Ausnahme aus.

Eingabe geht wie

162 Dy

Ausgabe ist wie

96

Die seltsame Zeichenfolge ist nur eine basenkodierte Zeichenfolge, die alle IUPAC-Namen in ihrem Atomic number * 2 - 1Index enthält.

Probieren Sie es hier online aus

Optimierer
quelle
Warum sollten Zahlen kein einziges Zeichen sein?
Martin Ender
@ MartinBüttner Nun, wenn für die Zwecke dieser Frage Zeichenfolgen keine einzelnen Token sind, dann sind Zahlen möglicherweise nicht zu :)
Optimizer
1
Dies führt zu falschen Ergebnissen für Bor und Indium, da Buchstaben mit zwei Elementen beginnen Bund Ivor ihnen erscheinen.
Martin Ender
^ Du meinst Bor und Jod. Indium ist In.
Joe Z.
Auch Jungs. Dieser Fehler für B und mich ist behoben.
Optimierer
1

Python 3 mit exec, 17 Token

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

Python 3 ohne Exec, 35 Token

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

Rubin mit Auswertung, 17 Token

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

Javascript, 49 Token

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

Nur um zu veranschaulichen, zählen Sie Big-Ints / Symbole / Variablen als N Token im Atomic-Code-Golf :)

kennytm
quelle
Ist es nicht erlaubt evalund dagegen zu execarbeiten?
Joe Z.
@ JoeZ. Immer noch anfällig für Angriffe mit "Big Integer Lookup Table", siehe Update.
Kennytm
Es scheint also, dass dieses Problem von Anfang an schlecht geformt war.
Joe Z.
0

Javascript, 42 Token (?)

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: Wo finde ich ein Skript zum Zählen von Token?

Qwertiy
quelle