মরিয়া সান্তাকে সন্ধান করছে


13

জনাকীর্ণ দৃশ্যে সান্টা এবং তার রেইনডিয়ারকে সন্ধান করুন।

ইনপুট

ইনপুটটি STDIN এ থাকবে এবং এটি সমান, তবে ভেরিয়েবল, দৈর্ঘ্যের অক্ষরের লাইনের একটি চলক সংখ্যা হবে। সান্টা (চরিত্রটি উপস্থাপিত S) দৃশ্যে থাকলে, তার উপহারের বস্তাগুলি (চরিত্রটি উপস্থাপিত P) তার সংলগ্ন অবস্থানে (আড়াআড়িভাবে, উল্লম্ব বা ত্রিভুজযুক্ত) একটিতে থাকবে। তার রেইনডিয়ার (প্রতিটি চরিত্র দ্বারা প্রতিনিধিত্ব করা হয়েছে R) সমস্তই তার চারপাশের 5x5 বর্গের মধ্যে থাকবে। Sএমন কোনও দৃশ্যে যদি উপস্থিত হয় যা উপহারের জন্য একটি বস্তা নেই, বা তার সাথে কমপক্ষে 4 রেইনডিয়ার না থাকে, তবে এটি সান্তা নয়।

আউটপুট

এই দৃশ্যটি সমস্ত আবদ্ধকরণ (সমস্ত সান্তা, নন-উপস্থাপক, একটি স্থানের পরিবর্তে নন-রেইন্ডার অক্ষর প্রতিস্থাপন) সাফ করে, সান্তা, তার উপহারের বস্তাগুলি এবং তার রেইনডির দেখায় - অন্য সমস্ত চরিত্রগুলিকে ফাঁকা স্থান দিয়ে প্রতিস্থাপন করা উচিত। যদি সান্তা এবং তার রেইনডিয়ার দৃশ্যে না থাকে তবে আউটপুট এটি অপরিবর্তিত। এটির গ্যারান্টি রয়েছে যে কেবলমাত্র একটি সমাধান হবে, সুতরাং একাধিক বৈধ সান্তা আর কখনও পাওয়া যাবে না এবং তিনি কখনও একাধিক বস্তা উপহার রাখবেন না।

উদাহরণ

এই উদাহরণগুলো আমি শুধু ব্যবহার করছি *এটা সহজ দেখতে করতে চরিত্র S, Pএবং Rঅক্ষর, কিন্তু আপনার প্রোগ্রাম থেকে কোন ASCII অক্ষর হ্যান্ডেল করতে সক্ষম হওয়া উচিত !করতে `(96 33)। বিভ্রান্তি এড়াতে আমি ছোট ছোট অক্ষর এবং উপরের বিষয়গুলি রেখে এসেছি।

ইনপুট:

***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********

আউটপুট: (বিন্দু উপেক্ষা করুন, তারা পৃষ্ঠাটি ফাঁকা লাইনগুলি প্রদর্শন করতে বাধ্য করবে)

.           
.          
.           
     R     
      P    
     S     
     R     
    R  R   
.           
.           
.           
.           

ইনপুট: (যথেষ্ট স্নাতক নয়)

***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********

আউটপুট:

***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********

ইনপুট: (উপহারের কোনও বস্তা নেই)

***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********

আউটপুট:

***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********

ইনপুট: (উপস্থাপনাগুলি খুব নিকটবর্তী নয়)

***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********

আউটপুট:

***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********

ইনপুট: (সান্টার চারপাশে 5x5 বর্গের মধ্যে স্নিগ্ধগুলির মধ্যে একটি)

***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********

আউটপুট:

***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********

স্ক্রিপ্ট পরীক্ষা করুন

আমার পূর্ববর্তী কয়েকটি প্রশ্নের মতো, আমি আবারও এই প্রশ্নের কয়েকটি পরীক্ষার কেস সরবরাহ করার জন্য জয়ে এবং ভেন্টোরোর তৈরি কয়েকটি পরীক্ষার স্ক্রিপ্টগুলি আবার কিনেছি :

ব্যবহার: ./test [your program and its arguments]

রেফারেন্সের জন্য পরীক্ষাগুলির সাধারণ পাঠ্য সংস্করণ: সাধারণ পাঠ্য

পুরস্কার

প্রতিটি এন্ট্রি যা আমি যাচাই করতে পারি যা পরীক্ষাটি পূরণ করে, পরীক্ষাগুলি পাস করে এবং গল্ফ করার জন্য স্পষ্টতই কিছু চেষ্টা করেছিল তা আমার কাছ থেকে উপার্জন পাবে (সুতরাং দয়া করে আপনার উত্তর সহ ব্যবহারের নির্দেশাবলী সরবরাহ করুন)। 31/12/2013 এর মধ্যে সংক্ষিপ্ততম সমাধানটি বিজয়ী হিসাবে স্বীকৃত হবে।


আমি বুঝতে পারি এটি আমার আগের প্রশ্নের মুখের স্বীকৃতির সাথে সমান , তবে তার পরে বেশ কয়েক বছর হয়ে গেছে। এছাড়াও, আমি প্রশ্ন স্যান্ডবক্স এড়িয়ে যাওয়ার জন্য ক্ষমা চাইছি তবে এটি ক্রিসমাস সম্পর্কিত হওয়ার সাথে সাথে এটি দ্রুত পোস্ট করা দরকার বা এটি প্রাসঙ্গিক হবে না।
গ্যারেথ

প্রথম উদাহরণ আউটপুট সঠিকভাবে প্রদর্শিত হয় না (ছোট আকারে প্রদর্শিত হবে)।
ডেনিস জাহেরউদ্দিন

@ ডেনিসজাহেরউদ্দিন মনে হচ্ছে মার্কডাউন সমস্ত ফাঁকা রেখা সরিয়ে দিচ্ছে। আমি lines লাইনের শুরুতে বিন্দু যুক্ত করেছি তা দেখানোর জন্য যে তারা সেখানে আছে। বিভ্রান্তির জন্য দুঃখিত।
গ্যারেথ

উত্তর:


2

ম্যাটল্যাব: 110 , 95 টি অক্ষর

f=@(x,y) filter2(ones(x),y);a=M==83;b=M==82;c=M==80;d=f(5,a&f(5,b)>3&f(3,c))&(a|b|c);if ~d,M,else,M(~d)=32,end

যে পদ্ধতিতে ইনপুট প্রক্রিয়াজাত হওয়ার কথা, সে সম্পর্কে নিশ্চিত নন, তবে বাকীটি বেশ সোজা।

সাধারণত ফর্ম্যাট করা সংস্করণ:

f=@(x,y) filter2(ones(x),y);
a=M==83;
b=M==82;
c=M==80;
d=f(5,a&f(5,b)>3&f(3,c))&(a|b|c);
if ~d
  M
else
  M(~d)=32
end

উদাহরণ ইনপুট:

M=['***********'
'***********'
'***********'
'*****R*****'
'******P****'
'*****SQL_2*'
'*****R*****'
'****R**R***'
'***********'
'***********'
'***********'
'***********'];

হুঁ, এটিতে পরীক্ষার স্ক্রিপ্টগুলি চালানো বিশ্রী হতে চলেছে। কোড উপর একটি দ্রুত বর্ণন প্রস্তাব করে যে আপনি শুধুমাত্র উদাহরণ যার উপরে দেওয়া ব্যবহার করছেন ব্যবহারের *ভিড় যেমন অক্ষর সহজে দেখতে করতে S, Pএবং Rঅক্ষর - যেহেতু পরীক্ষার পরীক্ষা স্ক্রিপ্ট ব্যবহার সমস্ত ASCII অক্ষর 33 থেকে ( !) আপ থেকে (এবং সহ) 96 (`` `) আমি প্রশ্নে এই পরিষ্কার করব। আপনার যে পরীক্ষাগুলি পাস করতে হবে তার একটি সরল পাঠ্য সংস্করণ করেছি যা আমি আরও প্রশ্নের সাথে যুক্ত করব।
গ্যারেথ

@ গ্যারেথ আপডেট হয়েছে, এখন পরীক্ষাগুলি পাস করেছে বলে মনে হচ্ছে। খুব খারাপ যে সান্তা একটি Qদড়ি পরে না, আমাকে কমপক্ষে 2 টি চরিত্র বাঁচাতে পারত।
ডেনিস জাহেরুদ্দিন

ঠিক আছে. আমার মতলব নেই তাই আমি কেবল অষ্টাভে ডাউনলোড করছি (যা আন্তঃই আমাকে বলছে মতলব কোড চালানোর সেরা নিখরচায় উপায়) এবং পরীক্ষার মধ্য দিয়ে সকালে পরীক্ষা করবে।
গ্যারেথ

ঠিক আছে আমি এটি যাচাই করেছি এবং এটি অনুমানের সাথে দেখা করতে দেখা যায়। এক জায়গায় এটির অন্যায় সুবিধা হ'ল ইনপুট প্রয়োজনীয়তা। আমি উজ্জীবিত হয়েছি, তবে এটি ইনপুট না পড়লে আমি বিজয়ী হিসাবে গ্রহণ করতে সক্ষম হব না (কোনও ফাইল থেকে মনে হচ্ছে ম্যাটলব এসটিডিআইএন থেকে না পড়ে)।
গ্যারেথ


1

পাইথন 2 ( 353 381)

import re,sys
a=sys.stdin.readlines()
h=len(a)
w=len(a[0])
a=''.join(a)+' '*99
print a
b=[''.join(q) for x in range(0,w) for y in range(0,h) for q in [[a[(y+z)*w+x:(y+z)*w+x+5] for z in range(0,5)]]]
for c in b:
 if c[12]=='S' and 'P' in ''.join([c[1+5*z:4+5*z] for z in range(1,4)]) and c.count('R')>3:
  a=re.sub('[^RPS]','.',c)
  w=h=5
for y in range(0,h):
 print a[y*w:(y+1)*w]

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

জিনিস পরীক্ষা করার জন্য কিছুকে একটি, যেমন নির্ধারণ করা দরকার

a=['1**********','*2*********','**3********','***4*******','****5*P****','*****S*****','*****,*****','****R**R***','***********','***********','****R******','**RPSRRR***']

এই কোডের মূল আকর্ষণীয় জিনিসটি সম্ভবত:

b=[''.join(q) for x in range(0,w) for y in range(0,h) for q in [[a[(y+z)*w+x:(y+z)*w+x+5] for z in range(0,5)]]]

যা লেখার অভিনব উপায়: "খ মূল উপস্থাপনায় প্রতিটি 5x5 বর্গের একটি উপস্থাপনের (25 টি অক্ষরের স্ট্রিং) হয়ে যায়"।


মাতলাবকে এসটিডিএন থেকে পড়তে সমস্যা হতে পারে, পাইথন আমার ভয় হয় না। এসটিডিআইএন থেকে ইনপুট পড়া অন্যতম প্রয়োজনীয়তা (টেস্ট স্ক্রিপ্টটি চালানো যতটা সম্ভব লোকদের নিজস্ব ইনপুট ফর্ম্যাট নিয়ে আসা থেকে বিরত রাখতে) stop
গ্যারেথ

উফ, পুরোপুরি মিস
সুমুরাই 8

কোড পরিবর্তন করা হয়েছে, তবে এটি এখানে কাজ করে কিনা তা পরীক্ষা করতে পারে না। এটি আগের ফর্ম্যাটটিতে এটি পড়তে হবে
সুমুরাই 8

ঠিক আছে, আমি এখন এই বিষয়ে পরীক্ষা চালানোর সুযোগ পেয়েছি এবং বেশ কয়েকটি সমস্যা আছে। 1) সান্তা পাওয়া যায় ক্ষেত্রে ইনপুট আপনার সমাধানের আগে যেমন আউটপুট হয়। 2) আপনার সমাধানটি ইনপুটটির চেয়ে আলাদা আকার। আমি এই বিষয়টিতে প্রশ্নকে আরও স্পষ্ট করার চেষ্টা করেছি - সমস্ত অ- (সান্তা, উপস্থাপনা, রেণডিয়ার) অক্ষরগুলিকে ফাঁকা জায়গায় প্রতিস্থাপন করা উচিত। এটি প্রথম উদাহরণে এটির মতো ছিল, তবে প্রশ্নটিতে এটি স্পষ্টভাবে বলা হয়নি। 3) সান্তা পাওয়া না গেলে আউটপুটে ডাবল লাইনের ব্যবধান থাকে।
গ্যারেথ

0

ফাইলে একটি মাত্র সান্তা থাকতে হবে (যদি 2 "এস" এর বেশি হয় তবে আমার কোড আপডেট করতে হবে)।

অজানা ব্যবহার করা হচ্ছে

cat santa.awk

BEGIN{FS=""}
{ for (i=1;i<=NF;i++)
         { a[NR FS i]=$i
           if ($i=="S") {l=NR;c=i}
         }
     }
END{ if (l=="") {print "No Santa";exit}
     for (i=l-1;i<=l+1;i++)
        for (j=c-1;j<=c+1;j++)
          if (a[i FS j]=="P") p++
     if (p<1) {print "Santa has no presents";exit}
     for (i=l-2;i<=l+2;i++)
        for (j=c-2;j<=c+2;j++)
          if (a[i FS j]=="R") r++
     if (r<4) {print "Santa has no enough reindeers";exit}
     else {  print "found Santa "
             for (i=1;i<=NR;i++)
               { for (j=1;j<=NF;j++)
                   if (a[i FS j]~/[R|S|P]/) {printf a[i FS j]} else {printf " "}
                 printf RS
                }
           }
    }

নীচে হিসাবে awk কমান্ড চালান

awk -f santa.awk file

ফলাফল

found Santa



     R
    R R
    PS
    RR
    R  R

এটির তাড়াতাড়ি পর্যালোচনা না করার জন্য দুঃখিত (আমি ছুটিতে আছি এবং ওয়াইফাইতে সহজ অ্যাক্সেস নেই)। দুর্ভাগ্যক্রমে, 2 Sজন কেবলমাত্র 'বৈধ' সান্তা হিসাবে অনুমোদিত। পরীক্ষাগুলিতে (প্রশ্নে প্রদত্ত) কয়েকটি কারণ রয়েছে যা এই কারণে ব্যর্থ হবে।
গ্যারেথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.