আমি আমার পকেটে কি পেয়েছি?


16

সংক্ষিপ্তসার: দ্বারা আবদ্ধ অক্ষর সন্ধান করুন MYPOCKET

উদাহরণ ইনপুট

MYPHEIF
YFOCKVH
MBNDEIF
TEUFTMY
ESNDUWP
KBOVUVO
CENWFKC
OPYMTEB

উদাহরণ আউটপুট

F   
BND 
EUF   
SNDUW 
BOVUV 
ENWF  

তাই না? আমরা কীভাবে এটি আউটপুট হিসাবে পেলাম? "পকেট" কখনও কখনও দেখা কঠিন হতে পারে। এটি এটি আরও পরিষ্কার করে দেবে:

MYP HEIF
 ওয়াই এফ OCK VH
 এম BND  যদি
 টি EUF TMY 
 SNDUW পি 
কে BOVUV হে 
সি ENWF কেসি 
OPYMTE বি

গা bold় অক্ষরে অক্ষরগুলি একে অপরের সাথে orthogonally সংযুক্ত অক্ষরের একটি রিং নির্দেশ করে যা MYPOCKETবার বার পুনরাবৃত্তি হয়। আপনার প্রোগ্রামটি সেই রিংয়ের মধ্যে থাকা অক্ষরগুলি আউটপুট করবে।

মন্তব্য:

  • কেবল একটি "পকেট" থাকবে।
  • লাইনের পরে নতুন লাইন বা ফাঁকা স্থান অনুসরণ করা।
  • গ্রিডের বাকী অংশগুলিতে বর্ণগুলিও থাকতে পারে MYPOCKETতবে এমনভাবে নয় যা রিংটির আকারটিকে অস্পষ্ট করে তোলে।
  • Mসর্বদা উপরে ডান দিকের কোণায় অবস্থিত নয়।
  • "পকেট" ঘড়ির কাঁটার দিক থেকে বা একটি ঘড়ির কাঁটার বিপরীত দিকে যেতে পারে।
  • "পকেট" তির্যক দিকগুলিতে সরবে না - অর্থাত প্রতিটি অক্ষর বাম, ডান, উপরের বা নীচের অংশে সংযুক্ত রয়েছে।

এখানে আরও একটি ইনপুট রয়েছে যা দিয়ে আপনি আপনার প্রোগ্রামটি পরীক্ষা করতে পারেন।

উদাহরণ ইনপুট

EKCYMOPD
KCOPHAYM
EKNDSEST
JETHACKE
KRMYPOBN

উদাহরণ আউটপুট

  HA
NDSES
 HA

14
এটি তার বাজে ছোট্ট পকেটে কী পেয়েছে?
ডুরকনব

এটি কি অরাজক গল্ফ থেকে এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত ?
xnor

@ এক্সনর না, এটি ছিল না। (যদিও এটি কিছুটা অনুরূপ ...)
অবিস্মিত

উত্তর:


1

পার্ল 5, 414

map{$y=0;push@{$h{$_}},[$-,$y++]for@$_;$-++}@l=map[/./g],<>;sub n{($a,$b,$c,$d)=@_;$a==$c&&1==abs$b-$d||$b==$d&&1==abs$a-$c}sub c{my($x,$y,$n)=@_;for(grep{($f=defined$x)?n$x,$y,@$_:1}@{$h{(MYPOCKET=~/./g)[$n%8]}}){($m,$l)=@$_ if!$f;return@r=([@$_],@r)if$n>2&&n(@$_,$m,$l)||c(@$_,$n+1)}''}c;$l[$_->[0]][$_->[1]]=$" for@r;($l[$_]=join'',@{$l[$_]})=~s/^(\w+)\s|\s(\w+)$/$"x($1||$2)=~y%%%c/eg for 0..@l;print join$/,@l

ব্যবহার: পকেট.পিএল হিসাবে সংরক্ষণ করুন এবং এর সাথে চালান:

perl pocket.pl <<< '<grid>'

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

এটি বর্তমান পরীক্ষার ক্ষেত্রে উভয়ের ক্ষেত্রেই কাজ করে যেখানে কিছু সাবধানতা রয়েছে:

  • এর মধ্যে রয়েছে শীর্ষস্থানীয় স্থান (যা আমি বিধিগুলিতে উল্লিখিত দেখিনি ...); এবং
  • এটি অবশ্যই একটি 'পকেট' নিয়ে কাজ করবে না যার মধ্যে মাঝের অক্ষর রয়েছে (বলুন U আকারের বা অনুরূপ)।

আমি এটি নিয়ে কাজ চালিয়ে যেতে চাই, তবে দেখাতে চেয়েছিলাম যে প্রশ্নে আগ্রহ আছে! সহায়ক হলে আমার প্রক্রিয়াটি নথিভুক্ত করার জন্য খুশি।


5

পাইথন 2.7 571 542 509

import sys
o,l,v,k,w="MYPOCKET",[list(e)for e in sys.stdin],[],enumerate,len
def f(z,q,t):
 for r,c in(z,q+1),(z,q-1),(z+1,q),(z-1,q):
  if w(l)>r>=0 and 0<=c<w(l[r])and o[t]==l[r][c]:
    v.append((r,c))
    if f(r,c,(t+1)%w(o)):return 1
    else:v.pop()
 if z==1 and(0,q)in v or z==0 and(z,q+1)in v:return 1
for i,x in k(l[0]):
 v=[(0,i)]
 if x==o[0]and f(0,i,1):break
for i in range(1,w(l)-1):b=[y for x,y in sorted(v)if x==i];print"".join(["".join(e)if w(e)>0 else" "for e in[l[i][b[j-1]+1:y]for j,y in k(b)][1:]])

প্রোগ্রাম হিসাবে কাজ করে (একটি পুনরাবৃত্তি ফাংশনে ব্যাংকিং) এবং স্টিডিনের ইনপুট গ্রহণ করে।
এখানে ডেমো।
এটি পরীক্ষা করা ( ex1.txtএবং ex2.txtপ্রশ্ন থেকে উদাহরণস্বরূপ) -

$ python pockets.py < ex1.txt
F
BND
EUF
SNDUW
BOVUV
ENWF
$ python pockets.py < ex2.txt 
  HA 
NDSES
 HA  

মন্তব্য সহ দর্শনীয় সংস্করণ -

s="""
EKCYMOPD
KCOPHAYM
EKNDSEST
JETHACKE
KRMYPOBN
"""
li2=[list(e.strip()) for e in s.split("\n") if e.strip()!='']
buf=[]
def find_precious(row, col, c_ind):
    for r,c in[(row,col+1),(row,col-1),(row+1,col),(row-1,col)]:
        if len(li2)>r>=0 and 0<=c<len(li2[r]) and seq[c_ind]==li2[r][c]:
            if (r,c)in buf:return True
            buf.append((r,c))
            if find_precious(r,c,(c_ind+1)%len(seq)):return True
            else:buf.pop()
    if row==1 and (row-1,col) in buf or row==0 and (row,col+1) in buf:return True
    return False

for i,x in enumerate(li2[0]):
    if x==seq[0]:
        buf=[(0,i)]
        if find_precious(0,i,1):break
if len(buf)==1:
    exit("Failed")

#Calculate the middle men
for i in range(1,len(li2)-1):
    b=[y for x,y in sorted(buf)if x==i]
    print "".join(["".join(e)for e in [li2[i][b[j-1]+1:y]for j,y in enumerate(b)][1:]if len(e)>0])

আমাকে জানিয়ে দিন, আমি যদি বোকা কিছু করি বা আরও ভাল কিছু করা যায়।
আমি জানি এটি খুব দীর্ঘ, তবে এটি আমি সবচেয়ে ভাল করতে পারি: পি


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