উপাদানগুলির পর্যায় সারণি থেকে শব্দগুলি [বন্ধ]


9

পিছনে যখন আমি হাইস্কুলের রসায়ন গ্রহণের নবীন ছিলাম, আমি উপাদানগুলির পর্যায় সারণীতে তাকিয়ে থাকতাম এবং উপাদানগুলির সংখ্যার সাথে নোংরা শব্দগুলি বানান (হিজিকে 2619, 2-6-19 হবে)।

অন্য দিন আমি এই সম্পর্কে ভাবছিলাম যখন আমি একটি আশ্চর্যজনক শার্ট দেখলাম যা বিয়ার বানিয়েছিল (4-68)

সুতরাং আমার কোডগল্ফ চ্যালেঞ্জ হ'ল সংক্ষিপ্ত প্রোগ্রামগুলির শব্দের একটি তালিকা আউটপুট করার জন্য যা আপনি উপাদানগুলির পর্যায় সারণি এবং সেই শব্দটির প্রতিনিধিত্ব করে এমন সংখ্যার কোডের সাথে বানান করতে পারেন।

/ ইউএসআর / শেয়ার / ডিক / শব্দ বা আপনি যে কোনও অভিধান শব্দ তালিকার জন্য ব্যবহার করতে চান। আপনি যদি একটি "অ-মানক" শব্দের তালিকা ব্যবহার করেন তবে তা কী তা আমাদের জানান!


'নম্বর' কোড? একের বেশি ক্ষেত্রে এমন কেস রয়েছে? উদাহরণস্বরূপ CO বনাম কো
পিটার টেলর

3
আমি নীচের প্রতিক্রিয়াগুলি পড়ার সময়, আমি একটি জায়গা লক্ষ্য করেছি যে প্রত্যেকে কয়েকটি অক্ষর কেটে ফেলতে পারে। তারা কো, সি, এসসি, ওস, এইচ, পো, পিবি, এনপি, ন, ওয়াইবি, সিস এবং সম্ভবত অন্যদের তাদের উপাদানগুলির তালিকা থেকে অপসারণ করতে পারে, কারণ এগুলি সমস্ত অন্যান্য উপাদান থেকে তৈরি করা যেতে পারে।
PhiNotPi

1
ইয়েটারবিয়াম নয়, এটি আমার প্রিয় উপাদান!
রব

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

1
আমি টাস্কটি পুরোপুরি বুঝতে পেরেছি কিনা তা সম্পর্কে আমি পুরোপুরি নিশ্চিত নই: প্রতিটি উপাদান মুদ্রিত না হওয়া পর্যন্ত আমরা কি উপাদানগুলির জন্য মিলে যাওয়া শব্দগুলি খুঁজে পাব, বা আমরা ডিক থেকে প্রতিটি শব্দ মুদ্রণ করব, যা উপাদান টেবিল থেকে একত্রিত করা যায়? অথবা অন্য কিছু?
ব্যবহারকারী অজানা

উত্তর:


6

গল্ফস্ক্রিপ্ট ( 339 303 302 301 294 চর)

n/{{{32|}%}:L~['']{{`{\+}+'HHeLiBeBCNOFNeNaMgAl
PSClArKCa TiVCrMnFe


ZnGaGeAsSeBrKrRbSrYZr
MoTcRuRhPdAgCd


TeIXe
BaLaCePrNdPmSmEuGdTbDy
ErTm
Lu
TaWRe
IrPtAuHgTl


AtRnFrRaAcThPaU

AmCm

EsFmMd
LrRfDbSg

MtDsRg
UutFl
Lv'{[1/{.0=96>{+}*}/]}:S~:^/}%.{L}%2$?.){=S{^?}%`+p 0}{;{L.,2$<=},.}if}do}%;

PhiNotPi এর কৃতিত্বের সাথে যার অপ্রয়োজনীয় উপাদানগুলির পর্যবেক্ষণ আমাকে 33 টি অক্ষর সংরক্ষণ করতে দেয়।

এটি পূর্ববর্তী পুনরাবৃত্ত পদ্ধতির তুলনায় আইএমও হ'ল আইডেমোমেটিক গল্ফস্ক্রিপ্ট।

নোট করুন যে আমি অভিধানের শব্দগুলিকে মিশ্র কেস হিসাবে বিবেচনা করার অনুমতি দিচ্ছি ( Lনন-আলফা অক্ষরগুলি ভেঙে যায় কিনা তা বিবেচ্য নয়) তবে লোয়ার-কেস পাঠ্যের একটি ফাংশন) তবে অ্যাডোস্ট্রোফস বা অ্যাকসেন্টের সাথে কোনও প্রত্যাখ্যান করুন।

যেহেতু এটি কোড গল্ফ, তাই আমি গতির চেয়ে কোড দৈর্ঘ্যের জন্য অনুকূলিত করেছি। এটি ভয়ানকভাবে ধীর। এটি স্ট্যান্ডিনে শব্দের তালিকা সরবরাহ করা হবে এবং ফর্ম্যাটে স্টডআউটে আউটপুটগুলিতে সরবরাহ করবে:

"ac[89]"
"accra[89 6 88]"
"achebe[89 2 4]"
...

(লোয়ার কেসিংয়ের সাথে কোনও মিশ্র-কেস ইনপুট শব্দ যার জন্য এটি কোনও মিল খুঁজে পায়)।

আপনি যদি প্রতি সেউ সংখ্যার চেয়ে উপাদানগুলিতে বেশি আগ্রহী হন তবে 261 253 টির কম দামের জন্য আপনি ব্যবহার করতে পারেন

n/{{{32|}%}:L~['']{{`{\+}+'HHeLiBeBCNOFNeNaMgAlPSClArKCaTiVCrMnFeZnGaGeAsSeBrKrRbSrYZrMoTcRuRhPdAgCdTeIXeBaLaCePrNdPmSmEuGdTbDyErTmLuTaWReIrPtAuHgTlAtRnFrRaAcThPaUAmCmEsFmMdLrRfDbSgMtDsRgUutFlLv'[1/{.0=96>{+}*}/]/}%.{L}%2$?.){=p 0}{;{L.,2$<=},.}if}do}%;

যা আউটপুট দেয়

"Ac"
"AcCRa"
"AcHeBe"
...

অতিরিক্ত চরিত্রটি বের করুন, "আমাকে মোটেই বিরক্ত করবেন না। এবং অবশ্যই পিটার টেলর এসে গল্ফস্ক্রিপ্ট দিয়ে সবাইকে উড়িয়ে দেয়।
রব

3

রুবি - 547 393

নতুন সংস্করণ, পরামর্শের জন্য ধন্যবাদ:

e='HHeLiBeBCNOFNeNaMgAlSiPSClArKaCaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbTeIXeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPaUNpPuAmCmBkCfEsFmMdNoLrRfDbSgBhHsMtDsRgCnUutFlUupLvUusUuo'.scan(/[A-Z][a-z]*/).map &:upcase
r="(#{e.join ?|})"
$<.each{|w|(i=0;i+=1 until w=~/^#{r*i}$/i
$><<w;p$~.to_a[1..-1].map{|m|e.index(m.upcase)+1})if w=~/^#{r}+$/i}

e=%w{h he li be b c n o f ne na mg al si p s cl ar ka 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 uus uuo}
x = "(#{e.join(?|)})"
regex = /^#{x}+$/i
File.foreach('/usr/share/dict/words'){|w|
if w=~/^#{x}+$/i
puts w
i=1
i+=1 until w=~/^#{x*i}$/i 
puts $~[1..-1].map{|m|e.index(m.downcase)+1}.join ?-
end
}

regexes ব্যবহার করে। ধীর, এবং উন্নতির জন্য অনেক জায়গা তবে আমাকে এখনই যেতে হবে :-)


1
1) আপনি (তার মূল কোডে হিসাবে) পিটার টেইলরের কৌতুক ব্যবহার করে স্টোরেজ অনাবশ্যক করতে পারেন: e='HHeLiBe...LvUusUuo'.scan(/[A-Z][a-z]*/).map &:downcase। 2) ভেরিয়েবল রেজেক্স কখনই ব্যবহার করা হয় না। 3) স্ট্যান্ডার্ড ইনপুট থেকে শব্দ পড়ুন: $<.each{|w|...। এই পরিবর্তনগুলির সাথে কোডটি 410 টি অক্ষরে কমে গেছে।
manatwork

আমি মনে করি যে আপনি অপ্রয়োজনীয় উপাদানগুলির জন্যও একই স্থান-সঞ্চয় পদ্ধতির প্রয়োগ করতে পারেন, স্ক্যান রেজেক্সে দুটি অক্ষর যুক্ত করে at আপনি যদি নিউলাইনগুলি পছন্দ না করেন তবে স্থানটি ব্যবহার করুন - আমি মূলত নিউলাইনগুলি ব্যবহার করছি যাতে মূল লুপটি দেখতে স্ক্রোল করা প্রয়োজন হয় না।
পিটার টেলর

2

পাইথন 710 (357 + 261 + 92)

e=". 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 uus uuo".split()

i=e.index
def m(w,p=("",[])):
 if not w:return p
 x,y,z=w[0],w[:2],w[:3]
 if x!=y and y in e:
    a=m(w[2:],(p[0]+y,p[1]+[i(y)]))
    if a:return a
 if x in e:
    b=m(w[1:],(p[0]+x,p[1]+[i(x)]))
    if b:return b
 if z in e:
    c=m(w[3:],(p[0]+z,p[1]+[i(z)]))
    if c:return c

f=open('/usr/share/dict/words','r')
for l in f:
 x=m(l[:-1])
 if x:print x[0],x[1]
f.close()

কোথাও কোথাও উন্নতির অবকাশ থাকার নিশ্চয়তা আছে। এটি লক্ষণীয় যে দ্বিতীয় স্তরের ইন্ডেন্টেশনটি ট্যাব অক্ষরটি ব্যবহার করে।

পুরো অভিধানটি ব্যবহার করতে এটি কেবল 5 সেকেন্ডেরও বেশি সময় নেয় (আমার কম্পিউটারে), এর ফলে আউটপুট উত্পাদন করে:

acaciin [89, 89, 53, 49]
acacin [89, 89, 49]
acalycal [89, 13, 39, 6, 13]
...

আরও 18 টি অক্ষর যুক্ত করে আপনি সঠিক মূলধন দিয়ে আউটপুট পেতে পারেন:

e=". 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 Uus Uuo".split()

i=e.index
def m(w,p=("",[])):
 if not w:return p
 w=w.capitalize()
 x,y,z=w[0],w[:2],w[:3]
 if x!=y and y in e:
    a=m(w[2:],(p[0]+y,p[1]+[i(y)]))
    if a:return a
 if x in e:
    b=m(w[1:],(p[0]+x,p[1]+[i(x)]))
    if b:return b
 if z in e:
    c=m(w[3:],(p[0]+z,p[1]+[i(z)]))
    if c:return c

OUTPUT:

AcAcIIn [89, 89, 53, 49]
AcAcIn [89, 89, 49]
AcAlYCAl [89, 13, 39, 6, 13]
...

আপনি পৃথক শব্দও পরীক্ষা করতে পারেন:

>>> m("beer")
('beer', [4, 68])

আপনি কি এমনটি যুক্ত করতে পারেন যা যথাযথ মূলধনকে আউটপুট করে? আমি মনে করি এটি বেশ ঝরঝরে এবং অজগর থেকে আমি বেশ নতুন।
রব

0

পাইথন - 1328 (কোড + 68 অভিধানের কোড 975 + 285 অক্ষর)

t1={'c':6,'b':5,'f':9,'i':53,'h':1,'k':19,'o':8,'n':7,'p':15,
's':16,'u':92,'w':74,'v':23,'y':39}
t2={'ru':44,'re':75,'rf':104,'rg':111,'ra':88,'rb':37,
'rn':86,'rh':45,'be':4,'ba':56,'bh':107,'bi':83,
'bk':97,'br':35,'os':76,'ge':32,'gd':64,'ga':31,
'pr':59,'pt':78,'pu':94,'pb':82,'pa':91,'pd':46,
'cd':48,'po':84,'pm':61,'hs':108,'ho':67,'hf':72,
'hg':80,'he':2,'md':101,'mg':12,'mo':42,'mn':25,
'mt':109,'zn':30,'eu':63,'es':99,'er':68,'ni':28,
'no':102,'na':11,'nb':41,'nd':60,'ne':10,'np':93,
'fr':87,'fe':26,'fl':114,'fm':100,'sr':38,'kr':36,
'si':14,'sn':50,'sm':62,'sc':21,'sb':51,'sg':106,
'se':34,'co':27,'cn':112,'cm':96,'cl':17,'ca':20,
'cf':98,'ce':58,'xe':54,'lu':71,'cs':55,'cr':24,
'cu':29,'la':57,'li':3,'lv':116,'tl':81,'tm':69,
'lr':103,'th':90,'ti':22,'te':52,'tb':65,'tc':43,
'ta':73,'yb':70,'db':105,'dy':66,'ds':110,'at':85,
'ac':89,'ag':47,'ir':77,'am':95,'al':13,'as':33,
'ar':18,'au':79,'zr':40,'in':49}
t3={'uut':113,'uuo':118,'uup':115,'uus':117}
def p(s):
 o=0;b=0;a=[];S=str;l=S.lower;h=dict.has_key;L=len
 while o<L(s):
  D=0
  for i in 1,2,3:exec('if h(t%d,l(s[o:o+%d])) and b<%d:a+=[S(t%d[s[o:o+%d]])];o+=%d;b=0;D=1'%(i,i,i,i,i,i))
  if D==0:
   if b==3 or L(a)==0:return
   else:b=L(S(a[-1]));o-=b;a.pop()
 return '-'.join(a)

অভিধান অংশের জন্য:

f=open(input(),'r')
for i in f.readlines():print p(i[:-1])
f.close()

সুস্পষ্ট অ্যারে ইনিশিয়ালাইজেশন ব্যবহার না করে এটিকে একটি সূচক-হ্যাশে রূপান্তরিত করার চেয়ে সুস্পষ্ট হ্যাশ আরম্ভকরণ ব্যবহার করা আসলেই খাটো?
পিটার টেলর

আমি কেবল ব্যবহারের সহজতার জন্য একটি অভিধান ব্যবহার করেছি। টিপলসের অ্যারে থাকা আরও কিছুটা চরিত্রের ব্যয়বহুল। যদিও উপাদানগুলি অর্ডার করা একটি ভাল ধারণা হবে ...
beary605

0

সি, 775 771 অক্ষর

char*e[]={"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","uus","uu",0};
b[99],n;
c(w,o,l)char*w,*o,**l;{
    return!*w||!strncmp(*l,w,n=strlen(*l))&&c(w+n,o+sprintf(o,",%d",l-e+1),e)||*++l&&c(w,o,l);
}
main(){
    while(gets(b))c(b,b+9,e)&&printf("%s%s\n",b,b+9);
}

ইনপুট : প্রতি লাইন শব্দ, অবশ্যই ছোট হাতের অক্ষর থাকতে হবে। usr/share/dict/wordsভাল.
আউটপুট : শব্দ এবং সংখ্যা, যেমন:acceptances,89,58,15,73,7,6,99

যুক্তি : উপাদান দিয়ে শুরু
c(w,o,l)করে শব্দটি পরীক্ষা করে । দ্বি-মুখী পুনরাবৃত্তি ব্যবহৃত হয় - যদি প্রথম উপাদান উপাদান তালিকার শীর্ষের সাথে মেলে তবে সম্পূর্ণ উপাদান তালিকার বিপরীতে থাকা অবধি পরীক্ষা করুন । যদি এই ম্যাচটি ব্যর্থ হয় তবে তালিকার লেজের বিপরীতে শব্দটি পরীক্ষা করুন। বাফারটি সফল পথে বরাবর উপাদান সংখ্যা সংগ্রহ করে। ম্যাচের পরে এটিতে সংখ্যাগুলির তালিকা থাকবে এবং এটি মুদ্রিত হবে।wl
w
o

সমস্যাগুলি :
তালিকাটি দক্ষতার সাথে এনকোড করা হয়নি - খুব বেশি "এবং ,"But তবে এটি ব্যবহার করা সহজ I'm

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