যৌগিক মোলার গণ


14

কার্য

এমন একটি প্রোগ্রাম লিখুন যা কেবলমাত্র 92 টি (ইউরেনিয়াম) এর চেয়ে কম বা সমান পারমাণবিক সংখ্যার সাথে উপাদানগুলির তৈরি একটি যৌগের মধ্যে নিয়ে যায় এবং যৌগের মোলার ভরকে আউটপুট করে grams/mole

বিধি ও বিধিনিষেধ

  • আপনি এমন কোনও ক্রিয়াকলাপ ব্যবহার করতে পারবেন না যা সরাসরি আপনার জন্য মোলার গণকে গণনা করে।
  • আপনার প্রোগ্রামটি অবশ্যই একটি অফলাইন মেশিনে চালাতে সক্ষম হবে।
  • আপনি একটি পৃথক ডেটা ফাইল ব্যবহার করতে পারেন। এই ফাইলের বিষয়বস্তু অবশ্যই সরবরাহ করতে হবে।
  • আপনার স্কোরটি বাইটে আপনার প্রোগ্রামের দৈর্ঘ্য এবং বাইটগুলিতে আপনার ডেটা ফাইলের দৈর্ঘ্য, আপনি যদি কোনওটি বেছে নিতে চান।
  • এটি , অতএব, সর্বনিম্ন স্কোর জয়।

ইনপুট

যৌগযুক্ত একটি স্ট্রিং। এই স্ট্রিংটি পড়তে STDINপারে, আর্গুমেন্ট হিসাবে পাস হতে পারে , বা একটি ভেরিয়েবল সেট করা যেতে পারে (দয়া করে কোনটি নির্দিষ্ট করুন)। নিম্নলিখিত সমস্ত বৈধ ইনপুট রয়েছে:

  • CH2 (একটি কার্বন, দুটি হাইড্রোজেন)
  • (CH2)8 (8 কার্বন, 16 হাইড্রোজেন)
  • U (1 ইউরেনিয়াম)

আপনার প্রোগ্রামটি এম্বেড করা প্রথম বন্ধনী (যেমন ((CH3)2N4)4), বা এমন কোনও যৌগের জন্য নয় যা 92 এর বেশি পারমাণবিক সংখ্যাযুক্ত উপাদান রয়েছে with যদি আপনার প্রোগ্রামটি উপরের দুটি ক্ষেত্রে কোনওটির জন্য কাজ করে না, তবে অবশ্যই এটি অবশ্যই এই Invalid formulaধরনের ক্ষেত্রে আউটপুট দেয় - কোন অপরিবর্তিত আচরণ।

আউটপুট

আপনার আউটপুট করা উচিত, STDOUTঅথবা একটি পরিবর্তনশীল, যৌগের মোলার ভর grams/mole। পারমাণবিক ভর উপাদানগুলির একটি তালিকা এখানে পাওয়া যায় (উইকিপিডিয়া) । আপনার উত্তরটি 100 টিরও কম অণু (বৃত্তাকার) সমন্বিত যৌগগুলির জন্য দশমিক স্থানে সঠিক হওয়া উচিত।

যদি ইনপুটটি অবৈধ হয় তবে Invalid formulaঅবশ্যই আউটপুট করা উচিত।

grams/mole(উইকিপিডিয়া) একটি যৌগের গুড় ভর গণনা সম্পর্কিত তথ্য ।

উদাহরণ

Input                   Output
H2O                     18.015
O                       15.999 (16 acceptable)
C6H2(NO2)3CH3           227.132
FOOF                    69.995
C6H12Op3                Invalid formula
Np                      237 (or Invalid formula)
((C)3)4                 144.132 (or Invalid formula)
CodeGolf                Invalid formula

1
"দশমিক বিন্দুতে" - কত বড় অণুর জন্য? জনগণের U1000000চেয়ে দশমিক বিন্দু নির্ধারণ করা শক্তU2
জন ডিভোরাক

100 এরও কম কম পরমাণু সহ অণুগুলির দশমিক বিন্দুতে। প্রশ্ন বিবৃতি এ এটি যুক্ত।
es1024

আমিও ধরে নিয়েছি 13পারমাণবিক ভর হলে আমাকে আউটপুট দেওয়ার অনুমতি দেওয়া হচ্ছে 12.999?
জন ডিভোরাক

1
এটি @ es1024- এ ঠিক শোনাচ্ছে না। 13, ঠিক আছে, তবে 12?
রাবারডাক

1
"আপনার উত্তর দশমিক স্থানে সঠিক হওয়া উচিত" এর অর্থ কি এক দশমিক স্থান বা নিকটতম পূর্ণসংখ্যার সাথে বোঝানো যায়?

উত্তর:


5

ব্যাশ, 978 708 675 673 650 636 632 631 598 594

প্রোগ্রামের জন্য 211 বাইট এবং ডেটার জন্য 382 বাইট।

ইনপুটটি STDIN এ আছে, আউটপুটটি STDOUT এ রয়েছে। সতর্কতা: নামক ফাইলগুলি তৈরি করে gএবং aযদি সেগুলি বিদ্যমান থাকে তবে সেগুলি ওভাররাইট করা হবে!

zcat y>g 2>a
s=(`sed 's/[A-Z][a-z]*/& /g;q'<g`)
p=1.008
v=`sed 's/[0-9]\+/*&/g;s/(/+(0/g'`
r=(`tail -1 g`)
for n in {0..91};{
p=`bc<<<$p+${r[n]}`
v=${v//${s[n]}/+$p}
}
o=`bc<<<0$v 2>a`
echo ${o:-Invalid formula}

আমার স্নাতকের

এর জন্য একটি ফাইল বলা দরকার yযা এই ডেটার জপফ্লি- সংকুচিত ফর্ম (কোনও নতুন লাইনের পিছনে নেই)। zopfli একটি gzip- সামঞ্জস্যপূর্ণ সংক্ষেপণ অ্যালগরিদম এবং স্ট্যান্ডার্ড gzip সরঞ্জাম সঙ্গে সংক্ষেপিত করা যেতে পারে। এটি 1024 পুনরাবৃত্তি দিয়ে চালানো হয়েছিল (এটি সম্ভবত খুব বেশি)) তারপরে সর্বশেষ 8 বাইটগুলি সরানো হয়েছিল।

HHeLiBeBCNOFNeNaMgAlSiPSClKArCaScTiVCrMnFeNiCoCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbITeXeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAcPaThU
0 2.995 2.937 2.072 1.798 1.201 1.996 1.992 2.999 1.182 2.81 1.315 2.677 1.103 2.889 1.086 3.39 3.648 .850 .130 4.878 2.911 3.075 1.054 2.942 .907 2.848 .24 4.613 1.834 4.346 2.904 2.292 4.038 .944 3.894 1.670 2.152 1.286 2.318 1.682 3.054 2.04 3.07 1.836 3.514 1.448 4.543 2.407 3.892 3.050 5.144 .696 3.693 1.612 4.422 1.578 1.211 .792 3.334 .758 5.36 1.604 5.286 1.675 3.575 2.43 2.329 1.675 4.120 1.913 3.523 2.458 2.892 2.367 4.023 1.987 2.867 1.883 3.625 3.788 2.82 1.78 .02 1 12 1 3 1 4.036 1.002 5.991

এর বেস 64 y( base64 -dমূল ফাইলটি পুনরুত্পাদন করতে ব্যবহার করুন):

H4sIAAAAAAACAwTB226DMAwA0G9LvEJQIbVi70LfHPBoJAiSaR729zsnBB2LVw/x0UWNMm1up4IE
+90ZCC1cvsCm2mkscEJ71l56dRept7ulTDY/Lebp5CW19MLVbbAOlSrlgfVH4fIyCihaXPGg49b6
lfPHXzhvxsecxxZ+Wb6TPq7B8O1a2HjH7Aue7p1qZ0ncgsKvz/8WxuRGoigGgfcfxYvA8r7kn9iA
ei6ohAt/+lzuihmD1PFnMrdIV0PeNfOczh3Ylrw8hnHaM6w1WC8V3X4hcYjOfbKlTyz0pewsP5nh
plOUK9mkPzkd4HLiCbktIGyQI5uaUvZzNBrwLhOf9hJij+Jo5WBf6mHLfh2OFqeaxOHbaGAZl5mL
h5UBI3Hlx99GX4llPumDjgw+NIee7uCaRbrZkzluIhJYi2E0ZU2gb5OnYBTSJQMRfv91irmCz4KK
B5Va5J7T7IGjHnR22PeAd+m3F3KW/voz4BMFPGNgxHE0Loq65M6+Pw==

এমডি 5sum হয় d392b0f5516033f2ae0985745f299efd

ব্যাখ্যা

ফাইলের সংখ্যাগুলি আপেক্ষিক পারমাণবিক ভরগুলির বৃদ্ধি (সুতরাং লিথিয়ামের আপেক্ষিক পারমাণবিক ভর 1.008 + 0 + 2.995 + 2.937) is

এই স্ক্রিপ্টের সাথে একটি আঙ্কিক অভিব্যক্তি মধ্যে রাসায়নিক সূত্র রূপান্তর করে কাজ করে +এবং *তার আপেক্ষিক পারমাণবিক ভর দিয়ে প্রতিটি প্রতীক প্রতিস্থাপন, তারপর অভিব্যক্তি খাওয়ানোর bc। সূত্রে যদি অবৈধ প্রতীক থাকে তবে bcএকটি সিনট্যাক্স ত্রুটি দেবে এবং STDOUT কে আউটপুট কিছুই দেবে না; এই ক্ষেত্রে, আউটপুট হয় Invalid formula

STDIN খালি থাকলে আউটপুট হয় 0। নেস্টেড বন্ধনী সমর্থিত।

zcat y>g 2>a # Unzip the file y and output result to the file g. Send standard error to file a (there will be an error because the last 8 bytes are missing)
s=(`sed 's/[A-Z][a-z]*/& /g;q'<g`)  # Read from g to sed; append a space after any capital letter optionally followed by a lowercase letter; exit at the end of the first line so the atomic masses are not processed in this way; parse result as space-separated array and save to variable $s
p=1.008 # In the upcoming loop, $p is the value obtained in the previous iteration
v=`sed 's/[0-9]\+/*&/g;s/(/+(0/g'` # Read from standard input to sed; prepend a * after any sequence of digits; replace ( with +(0; save to $v
r=(`tail -1 g`) # Get the last line of file g; parse as space-separated array; save to $r
for n in {0..91};{ # Loop once for each number from 0 to 91; set $n to the current number each iteration
p=`bc<<<$p+${r[n]}` # Concatenate $p, + and the next number from $r; send to bc and evaluate as arithmetic expression; save to $p (i.e. add the next increment from the file to $p)
v=${v//${s[n]}/+$p} # Replace every occurence of the current element symbol with + and $p (i.e. replace each symbol with a + and its relative atomic mass
} # end loop
o=`bc<<<0$v 2>a` # Prepend 0 to $v; send to bc and evaluate as arithmetic expression; redirect any errors on standard error to the file a; save result to $o
echo ${o:-Invalid formula} # If $o is empty (if there was a syntax error), output Invalid formula; otherwise output $o

উদাহরণ

C6H2(NO2)3CH3  #input
C*6H*2+(0NO*2)*3CH*3  #after line 3
+12.011*6+*1.008*2+(0+14.007+15.999*2)*3+12.011+1.008*3  #after the loop in lines 4-6
0+12.011*6+*1.008*2+(0+14.007+15.999*2)*3+12.011+1.008*3  #given to bc in line 7
227.132 #output as evaluated by bc

1
উপাদানগুলির জনগণের মধ্যে পার্থক্যগুলি সংরক্ষণ করে এবং ফ্লাইতে গণনা করে আপনি অনেক কিছু সঞ্চয় করতে পারেন। ন্যূনতম এবং সর্বোচ্চ মিমি পার্থক্যগুলি -1.002 এবং +6.993 (Pa এর উভয় পক্ষ) পারমাণবিক সংখ্যা ক্রমের পরিবর্তে পারমাণবিক ভর ক্রমে উপাদানগুলি পুনর্বিন্যাসের মাধ্যমে, পরিসীমা 0 থেকে 5.991 হয়ে যায়। যখন পর্যায় সারণীটি তৈরি করা হয়েছিল, তখন কোন অর্ডারটি ভাল about সে সম্পর্কে অনেক বিতর্ক হয়েছিল। (স্পষ্টতই, একটি রসায়ন দৃষ্টিকোণ থেকে , পারমাণবিক সংখ্যার ক্রমটি আরও ভাল, তবে তারা এটি সিদ্ধান্ত নিতে কিছুটা সময় নিয়েছিল।)
লেভেল রিভার সেন্ট

@ স্টিভেরিলিল আমি কোডটি লেখার সময় সে সম্পর্কে ভেবেছিলাম, শীঘ্রই আমি এটিকে দেখব

@ স্টেভেভারিল ডোন, সঞ্চয়টি প্রায় 33 টি চর ছিল

2

পার্ল - 924

সাবস্ক্রিপ্ট হওয়া উপাদান এবং গোষ্ঠীগুলি প্রসারিত, পারমাণবিক ওজনের সাথে উপাদানগুলিকে প্রতিস্থাপন এবং এটি এর পরে মূল্যায়ন করে এমন সংযোজনগুলিতে রূপান্তর করতে এটি ইনপুটযুক্ত সূত্রে রেজেক্স সাবস্টিটিউশন অপারেশনগুলির একটি সিরিজ ব্যবহার করে।

$_=<>;chop;@g='H1008He4003Li6940Be9012B10810C12011N14007O15999F18998Ne20179Na22989Mg24305Al26981Si28085P30974S32060Cl35450Ar39948K39098Ca40078Sc44955Ti47867V50942Cr51996Mn54938Fe55845Co58933Ni58693Cu63546Zn65380Ga69723Ge72630As74922Se78960Br79904Kr83798Rb85468Sr87620Y88906Zr91224Nb92906Mo95960Tc98Ru101070Rh102906Pd106420Ag107868Cd112411In114818Sn118710Sb121760Te127600I126904Xe131293Cs132905Ba137327La138905Ce140116Pr140907Nd144242Pm145Sm150360Eu151964Gd157250Tb158925Dy162500Ho164930Er167259Tm168934Yb173054Lu174967Hf178490Ta180948W183840Re186207Os190230Ir192217Pt195084Au196967Hg200592Tl204380Pb207200Bi208980Po209At210Rn222Fr223Ra226Ac227Th232038Pa231036U238028'=~/(\D+)([\d\.]+)/g;for$b(0..91){$d=2*$b+1;$g[$d]=$g[$d]>999?$g[$d]/1000:$g[$d]}%h=@g;for$a('(\(((?>[^()]|(?1))*)\))(\d+)','()([A-Z][a-z]?)(\d+)'){for(;s/$a/$2x$3/e;){}}s/([A-Z][a-z]?)/($h{$1}||_).'+'/ge;if(/_/){print'Invalid formula';exit}$_.=0;print eval;

2

গণিত 9 - 247 227

এটি পরিষ্কারভাবে প্রতারণা করছে যেহেতু আমি এমন একটি ফাংশন ব্যবহার করছি যা সরাসরি অ্যাটোমেটিক জনগণের গণনা করে (তবে মোলার জনসাধারণ নয়!):

r=StringReplace;f[s_]:=Check[ToExpression@r[r[r[s,x:RegularExpression["[A-Z][a-z]*"]:>"ElementData[\""<>x<>"\",\"AtomicWeight\"]+"],x:DigitCharacter..:>"*"<>x<>"+"],{"+*"->"*","+"~~EndOfString->"","+)"->")"}],"Invalid formula"]

ব্যবহার: সূত্রযুক্ত fস্ট্রিং সহ ফাংশনটিতে কল করুন , আউটপুটটি ভর হবে।

টেস্ট:

f["H2O"]           (* => 18.0153 *)
f["O"]             (* => 15.9994 *)
f["C6H2(NO2)3CH3"] (* => 227.131 *)
f["FOOF"]          (* => 69.9956 *)
f["C6H12Op3"]      (* => Invalid formula *)
f["Np"]            (* => 237 *)
f["((C)3)4"]       (* => 144.128 *)
f["CodeGolf"]      (* => Invalid formula *)

গণিত 10 কোনও কাঁচা সংখ্যা আউটপুট দেয় না, তবে একটি ইউনিট সহ একটি সংখ্যা, যাতে এটি গ্রহণযোগ্য নাও হতে পারে।


@ মার্টিনবাটনার ধন্যবাদ, আমি মূলত আমার আর ডি ফাইল থেকে একটি ফাংশন অনুলিপি করে কিছুটা গল্ফ করেছিলাম। গল্ফিং অবশ্যই উন্নত করা যেতে পারে।
টাইলো

2

জাভাস্ক্রিপ্ট, 1002

ইনপুট রয়েছে qএবং আউটপুটটি রয়েছে a। রাউন্ডিংয়ের নিয়মগুলি কী ছিল সে সম্পর্কে আমি অনিশ্চিত ছিলাম, তাই আমি দশমিকের পরে 3 টি জায়গায় কেটে ফেলেছি (বা আরও কম, যদি উইকিপিডিয়া থেকে অঙ্কগুলি অনুপলব্ধ থাকে)।

H=1.008
He=4.002
Li=6.94
Be=9.012
B=10.812
C=12.011
N=14.007
O=15.999
F=18.998
Ne=20.179
Na=22.989
Mg=24.305
Al=26.981
Si=28.085
P=30.973
S=32.06
Cl=35.45
Ar=39.948
K=39.098
Ca=40.078
Sc=44.955
Ti=47.867
V=50.941
Cr=51.996
Mn=54.938
Fe=55.845
Co=58.933
Ni=58.693
Cu=63.546
Zn=65.38
Ga=69.723
Ge=72.630
As=74.921
Se=78.96
Br=79.904
Kr=83.798
Rb=85.467
Sr=87.62
Y=88.905
Zr=91.224
Nb=92.906
Mo=95.96
Tc=98
Ru=101.07
Rh=102.905
Pd=106.42
Ag=107.868
Cd=112.411
In=114.818
Sn=118.710
Sb=121.760
Te=127.60
I=126.904
Xe=131.293
Cs=132.905
Ba=137.327
La=138.905
Ce=140.116
Pr=140.907
Nd=144.242
Pm=145
Sm=150.36
Eu=151.964
Gd=157.25
Tb=158.925
Dy=162.500
Ho=164.930
Er=167.259
Tm=168.934
Yb=173.054
Lu=174.966
Hf=178.49
Ta=180.947
W=183.84
Re=186.207
Os=190.23
Ir=192.217
Pt=195.084
Au=196.966
Hg=200.592
Tl=204.38
Pb=207.2
Bi=208.980
Po=209
At=210
Rn=222
Fr=223
Ra=226
Ac=227
Th=232.038
Pa=231.035
U=238.028
try{a=eval(q.replace(/(\d+)/g,'*$1').replace(/(\w)(?=[A-Z\(])/g,'$1+'))}catch(e){a="Invalid formula"}

সাধারণ ভেরিয়েবলগুলি ব্যবহারের ধারণার জন্য +1 ... এখন আমি ভবিষ্যতের লজ্জার জন্য আমার
ওভার কমপ্লিক্স

ইনপুট আসলে রয়েছে q, যদিও সমস্ত কিছু ঠিক আছে বলে মনে হচ্ছে। +1
es1024

121.760 = 121.76: আপনি trailing শূন্য মুছে ফেলার মাধ্যমে কিছু বাইট বাঁচাতে পারে
Fels

1

জাভাস্ক্রিপ্ট (E6) 1231

আর্গুমেন্ট হিসাবে আউটপুট এবং একটি ফাংশন হিসাবে আউটপুট ফিরে। যথার্থতা: 3 দশমিক সংখ্যা

রাসায়নিক সূত্রে একটি সাধারণ গাণিতিক অভিব্যক্তিতে, অঙ্কগুলি এবং পণ্যগুলি প্রতিস্থাপনের পরিবর্তে পরিবর্তনের জন্য ব্যবহার করুন:

  • ( সঙ্গে +(
  • '*' এর সাথে কোনও সংখ্যাসূচক ক্রম, তারপরে অঙ্কের ক্রম
  • কোনও মূলধনী অক্ষর তারপরে '+' এর সাথে অক্ষরযুক্ত থাকে, তারপরে সংশ্লিষ্ট উপাদানটির পারমাণবিক ভর (যদি পাওয়া যায়)

তারপরে অভিব্যক্তিটি মূল্যায়ন করা হয় এবং মানটি ফিরে আসে। ত্রুটির ক্ষেত্রে বা মান যদি NaN (বা শূন্য) হয় তবে ফাংশনটি 'অবৈধ সূত্র' দেয়

এখন আমি দেখতে পাচ্ছি যে অন্যান্য সমস্ত উত্তর একই পদ্ধতি ব্যবহার করে ... ওহ, এখানে জাভাস্ক্রিপ্ট সংস্করণ রয়েছে

F=f=>{
  T={H:1.008,He:4.002,Li:6.94,Be:9.012,B:10.81,C:12.011
  ,N:14.007,O:15.999,F:18.998,Ne:20.179,Na:22.989,Mg:24.305
  ,Al:26.981,Si:28.085,P:30.973,S:32.06,Cl:35.45,Ar:39.948
  ,K:39.098,Ca:40.078,Sc:44.955,Ti:47.867,V:50.941,Cr:51.996,Mn:54.938
  ,Fe:55.845,Co:58.933,Ni:58.693,Cu:63.546,Zn:65.38,Ga:69.723,Ge:72.630
  ,As:74.921,Se:78.96,Br:79.904,Kr:83.798,Rb:85.467,Sr:87.62,Y:88.905,Zr:91.224
  ,Nb:92.906,Mo:95.96,Tc:98,Ru:101.07,Rh:102.905,Pd:106.42,Ag:107.868,Cd:112.411
  ,In:114.818,Sn:118.710,Sb:121.760,Te:127.60,I:126.904,Xe:131.293
  ,Cs:132.905,Ba:137.327,La:138.905,Ce:140.116,Pr:140.907,Nd:144.242,Pm:145
  ,Sm:150.36,Eu:151.964,Gd:157.25,Tb:158.925,Dy:162.500,Ho:164.930,Er:167.259
  ,Tm:168.934,Yb:173.054,Lu:174.966,Hf:178.49,Ta:180.947,W:183.84,Re:186.207
  ,Os:190.23,Ir:192.217,Pt:195.084,Au:196.966,Hg:200.592,Tl:204.38,Pb:207.2
  ,Bi:208.980,Po:209,At:210,Rn:222,Fr:223,Ra:226,Ac:227,Th:232.038,Pa:231.035
  ,U:238.028,Np:237,Pu:244,Am:243,Cm:247,Bk:247,Cf:251,Es:252,Fm:257,Md:258
  ,No:259,Lr:266,Rf:267,Db:268,Sg:269,Bh:270,Hs:269,Mt:278
  ,Ds:281,Rg:281,Cn:285,Uut:286,Fl:289,Uup:289,Lv:293,Uus:294,Uuo:294};
  e='Invalid formula';
  try{return eval(f.replace(/([A-Z][a-z]*)|(\d+)|(\()/g,(f,a,b,c)=>c?'+(':b?'*'+b:a='+'+T[a]))||e}
  catch(x){}return e
}

আমি প্রায় একই পদ্ধতি ব্যবহার করেছি, তবে আমি কমপক্ষে এক বছর আগে ফাংশনটি তৈরি করেছি, তাই কমপক্ষে আমি আপনাকে অনুলিপি করিনি। ;)
টাইলো

1

পিএইচপি - 793 (583 + 210)

অধ্যাপকফিশের উত্তর দ্বারা বহুলাংশে দূরে সীমাবদ্ধ , যিনি একটি অনুরূপ পদ্ধতি ব্যবহার করছেন, কিন্তু আরে… চিহ্নগুলি এবং জনগণ aনিম্নলিখিত কোডের সাথে প্রাপ্ত ফাইলটিতে জিজিপ-সংকুচিত :

$symbolsList = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mg', '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'];
$massesList = [1.008, 4.003, 6.94, 9.012, 10.81, 12.011, 14.007, 15.999, 18.998, 20.18, 22.99, 24.305, 26.982, 28.085, 30.974, 32.06, 35.45, 39.948, 39.098, 40.078, 44.956, 47.867, 50.942, 51.996, 54.938, 55.845, 58.933, 58.6934, 63.546, 65.38, 69.726, 72.630, 74.922, 78.96, 79.904, 83.798, 85.468, 87.62, 88.906, 91.224, 92.906, 95.96, 98, 101.07, 102.906, 106.42, 107.868, 112.411, 114.818, 118.710, 121.760, 127.60, 126.904, 131.293, 132.905, 137.327, 138.905, 140.116, 140.908, 144.242, 145, 150.36, 151.964, 157.25, 158.925, 162.5, 164.93, 167.259, 168.934, 173.054, 174.967, 178.49, 180.948, 183.84, 186.207, 190.23, 192.217, 195.084, 196.967, 200.592, 204.38, 207.2, 208.98, 209, 210, 222, 223, 226, 227, 232.038, 231.036, 238.029];

$fileArrayContent = [$symbolsList, $massesList];
$fileStringContent = json_encode($fileArrayContent);

$file = gzopen('a', 'w9');
gzwrite($file, $fileStringContent);
gzclose($file);

সূত্রটি $fভেরিয়েবলে সংরক্ষণ করা উচিত :

$a=json_decode(gzfile('a')[0]);$r=@eval('return '.str_replace($a[0],$a[1],preg_replace(['#(?<=(?!\().)(\(|'.implode('|',$a[0]).')#','#\d+#'],['+${1}','*$0'],$f)).';');echo error_get_last()?'Invalid formula':$r;

এখানে অসম্পূর্ণ এবং মন্তব্য করা সংস্করণটি রয়েছে:

// Recover the data stored in the compressed file
$fileStringContent = gzfile('a')[0];
$fileArrayContent = json_decode($fileStringContent);
$symbolsList = $fileArrayContent[0];
$massesList = $fileArrayContent[1];

$formula = preg_replace('#(?<=(?!\().)(\(|'. implode('|', $symbolsList) .')#', '+${1}', $formula); // Add a "+" before each opening paranthesis and symbol not at the beginning of the string and not preceded by an opening paranthesis
$formula = preg_replace('#\d+#', '*$0', $formula); // Add a "*" before each number

$formula = str_replace($symbolsList, $massesList, $formula); // Replace each symbol with its corresponding mass

$result = @eval('return '. $formula .';'); // Evaluate the value without showing the errors
echo error_get_last() ? 'Invalid formula' : $result; // Print the value, or "Invalid formula" if there was an error

আমি এখন আপনাকে একটি বাইট দ্বারা প্রহার করছি, আমার 673 বাইট রয়েছে

নিবন্ধন করুন এছাড়াও, আমি ফাইলের আকারটি ভুলভাবে লিখেছি, যা আমি আগে যা বলেছিলাম তার চেয়ে বড়। আপনি এখন পর্যন্ত বিজয়ী, এখন ^^!
ব্ল্যাকহোল 16

1

স্কালা, 1077

আমি আপনার সমস্ত সমাধান গতিশীলভাবে টাইপ করা ভাষায় কপ-আউট পছন্দ evalবা অন্তর্নির্মিত পারমাণবিক ভর ফাংশন সহ দেখতে পাই এবং আপনাকে একটি স্ট্যাটিকালি-টাইপিত ভাষা সমাধান উত্থাপন করি:

object M{type S=String;type Z=(Int,S)
val d="H  *dHe JVLi inBe!!rB !5\"C !AiN !W!O !l3F \".*Ne\":_Na\"XUMg\"fUAl#%#Si#0iP #OOS #[&Cl$!,Ar$P|K $GxCa$RBSc%(7Ti%G5V %gwCr%s.Mn&4JFe&>)Co&^yNi&\\ECu'2\"Zn'ERGa'seGe(4^As(M#Se(x Br)$$Kr)MLRb)_5Sr)v,Y *%kZr*>LNb*PBMo*ppTc+(TRu+I4Rh+\\ePd,$,Ag,3RCd,cqIn,}LSn-HrSb-i>Te.IJI .B$Xe.peCs/#sBa/RwLa/ccCe/pXPr/y!Nd0>NPm0FTSm1!VEu12\\Gd1jrTb1|aDy2DdHo2^VEr2wATm3+0Yb3W Lu3k@Hf42nTa4L{W 4kfRe5&wOs5QdIr5fqPt6'BAu6;DHg6azTl7,8Pb7J8Bi7]2Po7]FAt7h$Rn9+bFr96@Ra9V8Ac9`tTh:8NPa:-mU :x4".grouped(5).map{s=>(s.take(2).trim,s(2)*8836+s(3)*94+s(4)-285792)}.toMap
def k(n:S):Z={val x=n.takeWhile(_.isDigit);(if(x=="")1 else x.toInt,n drop x.length)}
def o(m:S):Z={if(m(0)==40){val(i,s)=a(m.tail);if(s(0)!=41)???;val(j,t)=k(s.tail);(j*i,t)}else{val l=if(m.size>1&&m(1).isLower)2 else 1;val(i,s)=d(m.take(l))->m.drop(l);val(j,t)=k(s);(j*i,t)}}
def a(m:S)={var(r,s)=(m,0);do{val(y,z)=o(r);r=z;s+=y}while(r!=""&&r(0)!=41);s->r}
def main(q:Array[S]){println(try{val(m,s)=a(io.Source.stdin.getLines.next);if(s!="")???;m/1e3}catch{case _=>"Invalid formula"})}}

আমি ডেটা জন্য কিছু সংক্ষেপণ বিবেচনা করা উচিত, কিন্তু আপাতত আসুন আসল 94 বেস, আনপ্রেসড এ পারমাণবিক ভর আছে।


আমাকে দেয়molarmass.scala:5: error: ';' expected but identifier found. def a(m:S)={var(r,s)=(m,0);do{val(y,z)=o(r);r=z;s+=y}while(r!=""&&r(0)!=41)s->r}
es1024

সংশোধন করা হয়েছে। এছাড়াও আমি জানতে পারলাম স্কালার পার্সারটি অদ্ভুত।
করোল এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.