শব্দ অনুসন্ধান সলভার


13

আমি গতকাল ভাবছিলাম যে আমি যদি একটি প্রদত্ত শব্দ অনুসন্ধানের মাধ্যমে একটি প্রোগ্রাম লিখতে পারি এবং উত্তরগুলি আউটপুট করে। এটা আসলে আশ্চর্যজনকভাবে সহজ ছিল। এখন আমি ভাবছি আমরা কতটা ছোট পেতে পারি।

বিধি

  • আপনার প্রথম ইনপুটটি হ'ল স্ট্রিং বা এন লাইনগুলির সংকলন, যার প্রতিটি এন অক্ষর দীর্ঘ
  • আপনার দ্বিতীয় ইনপুট ধাঁধাটি খুঁজতে কোনও বিন্যাসে শব্দের একটি তালিকা
  • অনুসন্ধান তালিকার সমস্ত শব্দ ধাঁধাতে থাকার গ্যারান্টিযুক্ত
  • শব্দগুলি মূল চারটি দিকের যে কোনওটিতে যেমন তির্যকভাবে এগিয়ে এবং পিছনে উভয় দিকেই মনোনিবেশ করা যায়
  • ধাঁধাটিতে কেবলমাত্র বড়হাঁটি এজেড অক্ষর উপস্থিত থাকবে
  • আপনার কোডটি অবশ্যই অনুসন্ধানের স্ট্রিংয়ের প্রতিটি শব্দ খুঁজে পেতে হবে এবং প্রারম্ভিক বর্ণের স্থানাঙ্কের অবস্থানটি আউটপুট দেয়, যেখানে 0,0 শীর্ষ বাম অক্ষর।
  • আপনি যদি একই শব্দের একাধিক উদাহরণ সনাক্ত করেন তবে আপনার পছন্দ মতো আপনি এটি পরিচালনা করতে পারেন। এটি একাধিকবার বা একবারে আউটপুট করুন এটি আপনার উপর নির্ভর করে

উদাহরণ / পরীক্ষার কেস

নিম্নলিখিত বোর্ড দেওয়া:

ABCD
EFGH
IJKL
MNOP

এবং নিম্নলিখিত অনুসন্ধান স্ট্রিং:

ABCD,CGKO,POMN,NJF,AFKP,CFI,LGB,MJGD

আপনার প্রোগ্রামটি কোনও ক্রমে নিম্নলিখিতটি আউটপুট করা উচিত:

ABCD at 0,0
CGKO at 0,2
PONM at 3,3
NJF at 3,1
AFKP at 0,0
CFI at 0,2
LGB at 2,3
MJGD at 3,0

সর্বদা হিসাবে, সংক্ষিপ্ত উত্তর জিতেছে


6
পিপিসিজিতে আপনাকে স্বাগতম! ভাল লাগলো প্রথম চ্যালেঞ্জ!
অ্যাডমবার্কবার্ক

2
অনুরূপ , একমাত্র আসল পার্থক্যটি আউটপুটটিতে অবস্থানের অন্তর্ভুক্তি বলে মনে হয়।
FryAmTheEggman

@ এনএল 628 হ্যাঁ, সমস্ত অনুসন্ধান শব্দ ধাঁধাতে থাকার গ্যারান্টিযুক্ত। যদি একাধিক ঘটনা উপস্থিত থাকে তবে আপনি উভয় বার এটিকে আউটপুট দিতে পারেন বা দ্বিতীয়বার উপেক্ষা করতে পারেন, এটি আপনার হাতে।
মর্পেন

@ জোনাথান অ্যালান দুর্দান্ত ধারণা। আপনার পরামর্শ অনুসারে আমি এটি আপডেট করব।
মর্পেন

1
@ রিক হিচকক হ্যাঁ এটি হওয়া উচিত :)
মরপেন

উত্তর:


4

জাভাস্ক্রিপ্ট (নোড.জেএস) , 154 152 150 141 বাইট

  • আর্নৌল্ডকে 2 বাইট কমানোর জন্য ধন্যবাদ

অবস্থানগুলির অ্যারে প্রদান করে (এটি আগে নতুন লাইনের সাথে একটি স্ট্রিং ছিল)

(b,w)=>w.map(s=>[...b].map((_,p)=>[1,-1,r=b.search`
`,-r,~r,++r,-~r,~r].map(d=>[...s].every((c,i)=>c==b[p+d*i])?s+=" at "+[p/r|0,p%r]:0))&&s)

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


3

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

lambda a,W:[(w,i,j)for w in W for i in R(L(a))for j in R(L(a[0]))for U in R(9)if U-4and g(i,j,U/3-1,U%3-1,a).find(w)==0]
g=lambda i,j,u,v,a,s='':L(a)>i>=0<=j<L(a[0])and g(i+u,j+v,u,v,a,s+a[i][j])or s
L=len;R=range

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

gএকটি শুরুর অবস্থান i,jএবং একটি দিক নেয় u,vএবং পুনরাবৃত্তির মাধ্যমে সেই দিক থেকে সেই অবস্থান থেকে শুরু করে স্ট্রিংটি বের করে।

fতারপরে প্রতিটি শুরু করা অবস্থান i,jএবং দিকনির্দেশ পরিদর্শন করে U/3-1,U%3-1এবং wফলাফলটি স্ট্রিংটি শুরু হয় কিনা তা দেখতে প্রতিটি শব্দ পরীক্ষা করে w


2

পাইথন 3 , 149 147 বাইট

def g(b,w):h=b.find('\n')+1;return[f'{y} at {i//h},{i%h}'for y in w for i in range(len(b))for d in(1,h+1,h,h-1,-1,~h,-h,1-h)if y==b[i::d][:len(y)]]

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

উদার সংস্করণ

def g(b,w):
    h = b.find('\n') + 1                              # width of a row plus the '\n'
    a = []
    for y in w:                                       # iterate over the words
        for i in range(len(b)):                       #   iterate over the game board
            for d in(1,h+1,h,h-1,-1,~h,-h,1-h):       #     for each possible direction
                if y==b[i::d][:len(y)]:               #       see if the word matches
                    a.append(f'{y} at {i//h},{i%h}')
    return a

মূল ধারণাটি b[i::d]গেম বোর্ড থেকে একটি স্লাইস নির্বাচন করে। স্লাইসটি অবস্থান হিসাবে শুরু হয় iএবং দিকটিতে প্রসারিত হয় d। উদাহরণস্বরূপ, d = h+1দক্ষিণ-পূর্ব তিরুটির সাথে মিল রয়েছে, যেখানে d = ~h, যা একই -h-1, উত্তর পশ্চিম ত্রিভুজটির সাথে মিলে যায়। [:len(y)] শব্দটি অনুসন্ধান করা হচ্ছে একই দৈর্ঘ্যে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টানা

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