স্ব-গণনা করা পেংগ্রামগুলি


12

Pangrams

দ্রুত ব্রাউন শিয়ালটি অলস কুকুরটির উপরে লাফিয়ে উঠল।

এটি একটি পেঙ্গমের উদাহরণ - একটি বাক্য যাতে বর্ণমালার প্রতিটি অক্ষর অন্তত একবার অন্তর্ভুক্ত থাকে।

একটি স্ব-গণনাকৃত পেঙ্গ্রাম এমন একটি বাক্য যা তার নিজস্ব চিঠি গণনার বিশ্লেষণ করে প্যাংগ্রাম হওয়ার মানদণ্ডটি পূরণ করে।

এটি অর্জনের একটি উদাহরণ বাক্য

এই চিত্রটিতে চারটি, এক বি, দুটি সিস, একটি ডি, তিরিশ এস, ছয়টি এফ, পাঁচ জিএস, সাত এইচ, এগারো ইজ, একটি জে, একটি কে, দুটি এলএস, দুই এমএস, আঠার এনএস, পনেরো ওস, দুটি পিএস রয়েছে , এক কিউ, পাঁচ টাকা, সাতাশটি এসএস, আঠার টিএস, দুটি আমাদের, সাত বনাম, আট ডাব্লু, দুটি এক্স, তিনটি ওয়াস, এবং একটি জেড


চ্যালেঞ্জ

অক্ষরের ইনভেন্টরিতে আগত স্ট্রিংটি ইনপুট সহ একটি ফাংশন তৈরি করুন। উদাহরণস্বরূপ, ইনপুটটি হবে "এই প্যাংরাম রয়েছে"। প্রতিটি বর্ণের পরিমাণ অবশ্যই লিখিত আকারে থাকতে হবে এবং প্রদর্শিত অক্ষরের গণনায় অবদান রাখতে হবে।


বিধি

  • অক্সফোর্ড কমা alচ্ছিক
  • জেড এর আগে একটি অ্যাম্পারস্যান্ড ব্যবহার করুন (বা হার্ড মোডের জন্য, "&" এবং "এবং" ফাংশনে "এবং" এর মধ্যে স্যুইচ করার ক্ষমতা অন্তর্ভুক্ত করুন)
  • প্রতিটি অক্ষর মোট অক্ষরের গণনার দিকে গন্য হয়
  • কোনও লিখিত সংখ্যা নেই
  • এটি তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী
  • এই সপ্তাহান্তে বিবাহিত দম্পতির হনো ইউ আরে , সংখ্যাগুলি রানির ইংরেজিতে লিখতে হবে। যেমন nine hundred and ninety-nine Gsজি বর্ণের 999 টি ঘটনা এবং nine hundred and nine Gs909-র জন্য 9
  • প্রমিতের স্বল্প-স্কেল নামকরণ কনভেনশনে প্রস্থের অর্ডারগুলি লিখতে হবে

এজ মামলা

  • কিছু ক্ষেত্রে রয়েছে যেখানে কোডটি একটি লুপে আটকে যাবে - উদাহরণস্বরূপ, দুটি ওস থাকলে কোডটি গণনাটিকে তিনটি ওএসে বাড়িয়ে তুলবে, যার ফলে কোডটি আবার দুটি ওএস গণনা করে। যদি এই ফিরে আসছে সমস্যাটির সমাধান করতে পারার আগে প্রত্যেক অন্যান্য চিঠি গণক, বিবেচনা ইনপুট একটি মিথ্যা স্টার্টার এবং আউটপুট হতে false, nullবা একটি খালি স্ট্রিং।
  • যদি কোনও চিঠির 999 টিরও বেশি উপস্থিতি থাকে তবে ইনপুটটিকে একটি ভুয়া স্টার্টার হিসাবে বিবেচনা করা উচিত।

পরীক্ষার কেস

  • "এই প্যাংরাম রয়েছে" উদাহরণ বাক্য আউটপুট করা উচিত

8
আমি এটি পরীক্ষা করে দেখিনি, তবে আমি বেশ নিশ্চিত যে এমন কিছু ক্ষেত্রে রয়েছে যেখানে আপনি কোনও বৈধ সমাধান তৈরি করতে পারবেন না, সেই ক্ষেত্রে আউটপুটটি কী হওয়া উচিত? উদাহরণস্বরূপ, যদি আপনার কাছে একটি স্ট্রিং থাকে oযা গণনার জন্য শব্দ ব্যতীত দ্বি-সংযুক্ত থাকে , তবে আপনি যখন এটিটি দিয়ে বানান করেন two, পুরো স্ট্রিংটির এখন তিন-চিহ্ন রয়েছে o, যার অর্থ শব্দটি এখন ভুল, এটি পরিবর্তন করে এটি আবার ভুল করে তোলে , ইত্যাদি
নীট

2
সমাধানটির পক্ষে সবচেয়ে বড় লিখিত সংখ্যাটি কী সমর্থন করতে পারে? একশ, এক হাজার, মিলিয়ন?
নিট

7
প্রথম প্রথম প্রশ্ন! যাইহোক, আমি ব্যক্তিগতভাবে চিঠিগুলির সর্বাধিক সংখ্যাকে 999 বা এমনকি মাত্র 99 এর মধ্যে সীমাবদ্ধ করার পরামর্শ দিই This এটি সমস্ত চিত্তাকর্ষক সংরক্ষণের সময়, ভাষা বিল্ট-ইনগুলির দশমিক নয় এমন ভাষাগুলিতে চ্যালেঞ্জটিকে আরও অ্যাক্সেসযোগ্য করে তুলবে। (এছাড়াও, কয়েকটি ভাষায় লক্ষ লক্ষ অক্ষর দিয়ে এন্ট্রিগুলি পরীক্ষা করাও সম্ভব নয়।)
আর্নল্ড


1
Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
চ্যাস ব্রাউন

উত্তর:


6

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

def g(n):S=str.split;D=S('z one two three four five six seven eight nine');K=' fif six seven eigh nine';n,m=n/100,n%100;e,d=m/10,m%10;return' '.join([D[n],'hundred']*(n>0)+([S('ten eleven twelve thir four'+K)[d]+'teen'*(d>2)]if 9<m<20else[S('twen thir for'+K)[e-2]+'ty']*(e>0)+[D[d]]*(d>0)))
from random import*
X='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def f(p):
 T=set();s='';i=0
 while 1:
	Q=s.upper().count;t=p+' '+', '.join(['& '*(c=='Z')+g(Q(c))+' '+c+'s'*(Q(c)!=1)for c in X])+'.'
        if s==t:return i,t
	if t in T:t=''.join(c*max(1,t.upper().count(c)+(randint(0,6)-3)*(random()<0.25))for c in X)
	T.add(t);s=t;i+=1

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

ফাংশনটি স্ট্রিং উপসর্গ হিসাবে fগ্রহণ pকরে; এবং গৃহীত পদক্ষেপের সংখ্যা এবং অটোগ্রামের প্রতিনিধিত্ব করে একটি পূর্ণসংখ্যার একটি দ্বিপথ ফেরত দেয়।

ফাংশনটি তার ইংরাজি স্ট্রিংয়ে gএকটি সংখ্যা এনকোড করে 1<=n<=999; এটি 291 বাইট নেয়, মোট বাইট গণনার প্রায় অর্ধেক। কোড

Q=s.upper().count
t=p+' '+', '.join(['& '*(c=='Z')+g(Q(c))+' '+c+'s'*(Q(c)!=1)for c in X])+'.'

স্ট্রিংটিকে sএকটি (সম্ভাব্য অটোগ্রাম-ম্যাটিক) পানগ্রামে এনকোড করে t

আমরা প্রক্রিয়া উপর লুপ, পরিস্থিতি যেখানে আমরা একটি এটি জন্য প্রত্যাশী tযেমন যে tএকটি autogram (অর্থাত, যেখানে t==s)। যদি আমরা কোনও লুপটিতে যাই, আমরা এলোমেলোভাবে একটি সম্পূর্ণ অ্যাডহক পদ্ধতিতে অক্ষরের সংখ্যা গণনা করি।

বেশিরভাগ মানগুলির জন্য p, এই প্রক্রিয়াটি টিআইওতে শেষ হবে। সাধারণত, 'বিজয়ী' সংমিশ্রণের সন্ধানের আগে লক্ষ লক্ষ সম্ভাবনা পরীক্ষা করা হয়।

আমার কাছে কোনও প্রমাণ নেই, তবে আমার অনুমান: (ক) প্রবর্তক লি সাল্লোস এখানে বর্ণনা করেছেন এবং হার্ডওয়ারে প্রয়োগকারী (!) এর অনুরূপ একটি বিস্ময়কর ব্রেস্ট ফোর্স অনুসন্ধান ব্যতীত এ জাতীয় র্যান্ডম হিউরিস্টিক হিসাবে রয়েছে আপনি পেতে পারেন হিসাবে ভাল; এবং (খ) প্রাথমিক (অনেক?) প্রাথমিক বাক্যাংশগুলির জন্য কোনও সমাধান হবে না p


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