รหัสกอล์ฟ“ Atomic” - กำหนดจำนวนของนิวตรอนในไอโซโทป


9

งานของคุณคือการใช้สายที่มีไอโซโทปขององค์ประกอบเป็นอินพุตเข้ารหัสเหมือนตัวอย่างต่อไปนี้ด้วยหมายเลขอะตอมตามด้วยช่องว่างและสัญลักษณ์ทางเคมี IUPAC สำหรับองค์ประกอบ:

162 Dy

และคืนจำนวนนิวตรอนในอะตอมของไอโซโทปนั้น

ในตัวอย่างข้างต้น, ดิสโพรเซียม-162 มี 96 นิวตรอน (162 นิวคลีออรวม 66 ลบโปรตอนเพราะมันดิสโพรเซียม) 96ดังนั้นการส่งออกที่ควรจะเป็น

คุณอาจสมมติว่าองค์ประกอบที่กำหนดจะเป็นหนึ่งใน 114 องค์ประกอบที่ได้รับชื่อถาวรในปัจจุบันโดย IUPAC (รวมถึง flerovium และ livermorium) และไม่ใช่ชื่อทั่วไปเช่นUus"ununseptium" คุณอาจสมมติว่าเลขอะตอมของไอโซโทปจะต้องไม่เกิน 1,000 หรือน้อยกว่าจำนวนโปรตอนในองค์ประกอบ

คุณไม่สามารถใช้บิวด์อินเพื่อดึงข้อมูลเกี่ยวกับจำนวนโปรตอนหรือนิวตรอนขององค์ประกอบหรือใช้ฟังก์ชั่นใด ๆ ภายในโค้ดของคุณที่ประเมินโทเค็นสตริงหรือตัวเลขเป็นรหัสด้วยตัวเอง

โปรแกรมที่ใช้โทเค็นน้อยที่สุดเพื่อทำสิ่งนี้ในภาษาใดก็ได้ที่ชนะ อย่างไรก็ตามสำหรับวัตถุประสงค์ของการท้าทายนี้ตัวละครทุกตัวในสตริงหรือชื่อตัวแปรที่ถูกแปลงเป็นสตริงจะนับเป็นโทเค็น

รายการองค์ประกอบและหมายเลขอะตอมของพวกเขาสำหรับการอ้างอิง:


อ่าาาถูกต้องแค่อ่านวิกิแท็ก ดูเหมือนว่าฉันเข้าใจผิดว่าแท็กนั้นครอบคลุมอะไร
Sp3000

1
โดยทั่วไปการตีกอล์ฟแบบปรมาณูจะดีกว่าการเขียนโคดกอล์ฟในแง่ของความเป็นธรรมระหว่างภาษาเพราะมันไม่ได้เป็นที่ชื่นชอบภาษากอล์ฟเช่น CJam หรือ Golfscript
Joe Z.

2
ตัวเลขถูกพิจารณาว่าเป็นโทเค็นเดี่ยวหรือไม่ เช่นเดียวกับคำตอบของฉัน65โทเค็นเดียวหรือ 2 โทเค็นคืออะไร
เครื่องมือเพิ่มประสิทธิภาพ

4
“ โดยทั่วไปการตีกอล์ฟแบบปรมาณูจะดีกว่าการตีกอล์ฟแบบรหัสในแง่ของความเป็นธรรมระหว่างภาษาเพราะมันไม่ได้เป็นที่ชื่นชอบภาษากอล์ฟเฉพาะเช่น CJam หรือ Golfscript” หรือไม่ ;)
Martin Ender

1
ถ้าอนุญาตให้สร้างบิวด์อินอาจใช้ฟังก์ชันต่อไปนี้ซึ่งเขียนเป็น Mathematica:f[i_] := {n = ElementData[#[[2]], ToString@"StandardName"] <> ToString[#[[1]]], IsotopeData[n, "NeutronNumber"]} &[i]
DavidC

คำตอบ:


5

CJam, 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

สตริงแปลก ๆ เป็นเพียงสตริงเข้ารหัสพื้นฐานที่มีชื่อ IUPAC ทั้งหมดที่Atomic number * 2 - 1ดัชนีของพวกเขา

ลองออนไลน์ได้ที่นี่


ทำไมตัวเลขจึงไม่ใช่โทเค็นเดี่ยว
Martin Ender

@ MartinBüttnerดีถ้าเพื่อจุดประสงค์ของคำถามนี้สตริงไม่ได้เป็นโทเค็นเดียวแล้วตัวเลขอาจจะไม่มากเกินไป :)
เครื่องมือเพิ่มประสิทธิภาพ

1
สิ่งนี้ให้ผลลัพธ์ที่ผิดสำหรับโบรอนและอินเดียมเพราะตัวอักษรสององค์ประกอบเริ่มต้นด้วยBและIปรากฏต่อหน้าพวกเขา
Martin Ender

^ คุณหมายถึงโบรอนและไอโอดีน Inอินเดียมคือ
Joe Z.

อีกทั้งพวก บั๊กนั้นสำหรับฉันและฉันนั้นได้รับการแก้ไขแล้ว
เครื่องมือเพิ่มประสิทธิภาพ

1

Python 3 กับ exec, 17 โทเค็น

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

Python 3 ที่ไม่มี exec, 35 โทเค็น

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

ทับทิมกับ eval, 17 โทเค็น

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

Javascript, 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 / สัญลักษณ์ / ตัวแปรเป็นโทเค็น N ใน atomic-code-golf :)


ไม่อนุญาตevalและexecทำงานกับสิ่งนั้นหรือไม่?
Joe Z.

@JoeZ ยังมีช่องโหว่จากการโจมตี "ตารางค้นหาจำนวนเต็มขนาดใหญ่" ดูการอัปเดต
kennytm

ดูเหมือนว่าปัญหานี้จะเกิดขึ้นไม่ดีตั้งแต่ต้นแล้ว
Joe Z.

0

Javascript, 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)

PS: ฉันจะหาสคริปต์เพื่อนับโทเค็นได้ที่ไหน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.