একটি লাইব্রেরি অনুসন্ধানের কোড-গল্ফার উপায়


15

চ্যালেঞ্জ:

আমার সংগীত সংগ্রহে আমার হাজার হাজার গান রয়েছে এবং ভাগ্যক্রমে আমার কাছে আমার প্রিয় প্লেয়ারটির একটি অনুসন্ধানের ফাংশন রয়েছে। আমার একটি দুর্দান্ত স্মৃতিও রয়েছে my আমি আমার সংগ্রহে থাকা প্রতিটি গানের শিরোনামটি মনে করতে পারি। যাইহোক, আমি খুব অলস এবং টাইপ করতে পছন্দ করি না - প্রতিটি অতিরিক্ত কীস্ট্রোকটি একটি নৃত্যের কাজ!

  • একটি গান বিচ্ছিন্ন করার জন্য আমার সবচেয়ে সংক্ষিপ্ততম স্ট্রিংটি কী অনুসন্ধান করতে হবে? অনুসন্ধানের সময় টাইপিং ছোট করার জন্য যে কীগুলি ব্যবহার করতে পারি তার একটি তালিকা মুখস্থ করতে আমাকে সহায়তা করুন!

এটি , তাই সংক্ষিপ্ততম কোড জিততে পারে।


নিয়মাবলী:

গানের শিরোনামগুলির একটি ইনপুট তালিকা দেওয়া হয়েছে, নিম্নলিখিত সীমাবদ্ধতার সাপেক্ষে অনুসন্ধান কীগুলির একটি তালিকা তৈরি করুন:

  1. প্রতিটি গানের শিরোনামে একটি অনুসন্ধান কী থাকা উচিত।
  2. আউটপুট তালিকার মোট অক্ষরের সংখ্যা যতটা সম্ভব কম হওয়া উচিত।
  3. আমার প্রিয় সংগীত প্লেয়ার foobar2000 :
    • অনুসন্ধান ফাংশনটি কেস-সংবেদনশীল নয়। ( appleহিসাবে একই aPpLE)
    • প্রতিটি অনুসন্ধান কীতে স্পেস দিয়ে আলাদা করে যে কোনও ক্রমে এক বা একাধিক "শব্দ" থাকতে হবে:
      • প্রতিটি শব্দ অবশ্যই সংশ্লিষ্ট গানের শিরোনামের একটি স্তর হতে হবে ।
      • যদি একই সাবস্ট্রিংটি একাধিকবার নির্দিষ্ট করা থাকে, তবে এটি অবশ্যই তার সম্পর্কিত গানের শিরোনামে বহুবার ঘটতে হবে।
      • যদি একটি স্ট্রিংয়ের মধ্যে নিজেই একটি স্থান থাকে তবে সেই স্ট্রিংয়ের অবশ্যই উদ্ধৃতি দিয়ে ঘিরে থাকতে হবে।

সংকেতগুলি:

  • প্রায়শই, কিছু গানের শিরোনামের জন্য, একাধিক অনুসন্ধান কীগুলি মুল্য বিধি 2 রয়েছে such
  • আপনি ধরে নিতে পারেন যে ইনপুট তালিকাটি কেবলমাত্র ASCII অক্ষরগুলিকেই করবে তবে ব্রাউন পয়েন্টগুলি ইউটিএফ -8 সামঞ্জস্যের জন্য পুরষ্কার দেওয়া হবে।
  • বিধি 3 অনুসরণ করা কি কঠিন ছিল? এখানে কিভাবে এটা কাজ করে:


উদাহরণ:

আমার সঙ্গীত সংগ্রহ মাত্র দুটি অ্যালবাম গঠিত, মাইকেল জ্যাকসনের অফ ওয়াল এবং Thriler :

আপনার প্রোগ্রামটি পরীক্ষা করতে আপনি উপরের তালিকাগুলি ব্যবহার করতে পারেন। দ্বিতীয় তালিকার কাঁচা সংস্করণটি এখানে:

["Don't Stop 'Til You Get Enough","Rock with You","Working Day and Night","Get on the Floor","Off the Wall","Girlfriend","She's out of My Life","I Can't Help It","It's the Falling in Love","Burn This Disco Out","Wanna Be Startin' Somethin'","Baby Be Mine","The Girl Is Mine","Thriller","Beat It","Billie Jean","Human Nature","P.Y.T. (Pretty Young Thing)"]

1
আপনার কাছে কী এমন কোনও উদাহরণ রয়েছে যা একটি কী জন্য একাধিক স্ট্রিং প্রয়োজন?
জোনাথন অ্যালান

1
কীভাবে ["Wanta Be A Wanna B","Wanta Bea A Wanna B","Wanna Be A Wanna Bea"]?
জোনাথন অ্যালান

... তবে তাদের / সাবস্ট্রিংগুলিতে যদি কোনও ফাঁকির অনুমতি না দেওয়া থাকে তবে তারা কী হতে পারে - নোট করুন যে সমস্ত শব্দ পুরোপুরি সংঘর্ষ হয়।
জোনাথন অ্যালান

কাঁচা সংস্করণটি কেন একটি স্পয়লারে রয়েছে?
ফাঁস নুন

উত্তর:


4

পাইথন 2, 556 বাইট

এটি অনলাইনে চেষ্টা করুন।

-১০ বাইট, @ রিকারকে ধন্যবাদ, @ovs

সবকিছু কাজ করতে আমাকে কয়েকটা সন্ধ্যায় নিয়ে গিয়েছিল।
আউটপুট গানের নাম, অনুসন্ধান কীগুলির অ্যারে এবং অনুসন্ধান কীগুলির দৈর্ঘ্য মিলিত (স্পেস এবং কোট সহ)

import re
S=map(str.lower,input())
T=len
for s in S:
 y=s;n=T(s)
 def R(r,t):
    global n,y
    l=T(' '.join(t))+2*sum(map(lambda x:' 'in x,t))
    if l>n:return
    if(lambda K:T([s for s in S if T(s)-T(reduce(lambda x,y:re.sub(re.escape(y),'',x,1),K,s))==T(''.join(K))])==1)(t)and l<n:y=t;n=l
    u=[(lambda s,n:n and[''.join(y) for y in eval('zip(s%s)'%(''.join(',s[%s:]'%-~x for x in range(n))))]or list(s))(r,i)for i in range(T(r))]
    for i in range(T(r)):
     for j in range(T(r)-i):R(r[j+T(u[i][j]):],t+[u[i][j]])
 R(s,[])
 print[' 'in x and'"%s"'%x or x for x in y]

কিছু ব্যাখ্যা:

T=len

len()এখানে ফাংশনটি প্রায়শই ব্যবহৃত হয়, সুতরাং এই নামকরণটি বাইট সংরক্ষণ করে


L=lambda s,n:n and[''.join(y) for y in eval('zip(s%s)'%(''.join(',s[%s:]'%-~x for x in range(n))))]or list(s)

স্ট্রিং এর দৈর্ঘ্য n এর সমস্ত সম্ভাব্য সাবস্ট্রিংগুলি মূল্যায়ন করে।
eval(...)কমান্ড zip(s,s[1:],s[2:],...,s[n:])
তৈরি nকরে এটি sযদি সম্ভব হয় তার প্রতিটি সূচী থেকে দৈর্ঘ্যের সাবস্ট্রিং তৈরি করে । সুতরাং s='budd'এবং n='2'এটি বু, উদ, ডিডি উত্পাদন করবে


F=lambda K:len([s for s in S if len(s)-len(reduce(lambda x,y:re.sub(re.escape(y),'',x,1),K,s))==len(''.join(K))])==1

প্রদত্ত কীগুলি (কে) অনন্য গানের নামের জন্য কিনা তা পরীক্ষা করতে ফিল্টার
re.sub একাধিক অভিন্ন কীগুলির জন্য প্রয়োজনীয়, উদাহরণগুলিতে ['nn', 'nn'] এর মতো।


অভ্যন্তরীণ ফাংশনটি def R(r,t)একটি স্ট্রিংয়ের সমস্ত সম্ভাব্য সংমিশ্রণ তৈরি করতে পুনরাবৃত্ত হয় যা গানের নাম বর্ণনা করতে পারে।
প্রতিটি সংমিশ্রনের তুলনায় বর্তমানে সংক্ষিপ্ততর সংখ্যার (যদি কোনও ছিল) তৈরি সংখ্যার কম সংখ্যার সাথে তুলনা করা হয় - যদি এটি বড় হয় তবে এটিকে সমস্ত ডেরাইভেটিভ হিসাবে গ্রহণ করা হবে না। স্থিতিটি
ট্র্যাক করতে 2 টি ভেরিয়েবল ব্যবহার করে: nবর্তমানের স্বল্পতম কী সংমিশ্রণের দৈর্ঘ্য এবং yনিজেই সংমিশ্রনের জন্য


l=T(' '.join(t))+2*sum(map(lambda x:' 'in x,t))

এটি কী সংমিশ্রণের দৈর্ঘ্য গণনা করে। ' '.joinকীগুলির মধ্যে ফাঁকা স্থান যুক্ত করুন এবং 2*sum(...)স্পেস সহ কীগুলির জন্য প্রয়োজনীয় উদ্ধৃতিগুলির সংখ্যা গণনা করুন।


u=[L(r,i)for i in range(0,T(r))]

বর্তমান স্ট্রিংয়ের জন্য সমস্ত সম্ভাব্য কী সংমিশ্রণ (প্রতিটি সম্ভাব্য দৈর্ঘ্যের) পেতে প্রথম ল্যাম্বদা ফাংশন ব্যবহার করে।


সমস্ত উত্পন্ন কীগুলি সন্ধানের জন্য চক্রের জন্য দুটি এবং পরের পুনরাবৃত্তির ধাপে স্বতন্ত্রভাবে তাদের পাস করার জন্য jএর শেষে স্ট্রিংটি সঠিকভাবে কাটানোর জন্য মূল স্থান ( ) প্রয়োজন r[j+T(u[i][j]):]
স্লাইস স্ট্রিং সরবরাহ করে, যা বর্তমান কীটি শেষ হয়েছিল সেখানে শুরু হয়েছিল, সুতরাং কোনও ওভারল্যাপ থাকবে না।
যদি জায়গাটি অজানা থাকে তবে সমান কীগুলি সমস্ত গোলমাল করবে।


[' 'in x and'"%s"'%x or x for x in y]

ন্যায়বিচারের তুলনায় অনেক দীর্ঘ y, তবে স্পেস সহ কীগুলি চারপাশে উদ্ধৃতি দ্বারা আবদ্ধ হওয়া উচিত


এটা চমৎকার. সঠিকভাবে 3 রুল পাওয়ার প্রথম আপনি!
আয়ানে 4'17

1
যাইহোক 0,, আপনার নিজের ব্যাপ্তিগুলির একটিতে: u=[L(r,i)for i in range(0,T(r))]=> সরিয়ে দুটি বাইট মুভ করতে সক্ষম হওয়া উচিত u=[L(r,i)for i in range(T(r))]
notjagan

1
আপনি আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন: আপনার আউটপুটে আপনাকে ইনপুট স্ট্রিংগুলি এবং আউটপুট স্ট্রিংগুলির আকার প্রদর্শন করতে হবে না।
আয়ানে 4'17

@ 彩 音 এম ধন্যবাদ! আমি রেঞ্জ এবং আউটপুট থেকে এই কয়েকটি বাইট ছাঁটাই করেছি।
ডেড পসসাম

1
S=map(str.lower,input())-5 বাইটের জন্য
ovs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.