একটি স্ট্রিং দ্বারা আপনার কচ্ছপ নেতৃত্ব


17

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা স্থান ব্যতীত মুদ্রণযোগ্য আসকি অক্ষরগুলির একটি মজাদার একক-লাইন স্ট্রিংয়ের মধ্যে নিয়ে যায় :

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

আপনি ইনপুটটি বৈধ বলে ধরে নিতে পারেন।

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

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

  1. কচ্ছপের পাশের 4 টি গ্রিড স্পেসগুলি যদি সমস্ত ভরাট হয় (তবে এর কোনওটিই কোনও স্থান নয়) তবে পুনরাবৃত্তি বন্ধ করুন। কচ্ছপ আটকে গেছে এবং গ্রিডটি যতটা সম্ভব পূর্ণ।

  2. পূর্ববর্তী অক্ষরের তুলনায় ইনপুটটিতে বর্তমান অক্ষরটি দেখুন:

    • বর্তমানের চরিত্রটি আগেরটির আগে যদি বর্ণসীমার হয় তবে কচ্ছপকে চতুর্থাংশের বাঁদিকে ঘোরান।

    • বর্তমানের চরিত্রটি আগেরটির পরে যদি বর্ণসীমার হয় তবে কচ্ছপকে চতুর্থাংশের ডানদিকে ঘোরান।

    • যদি বর্তমান চরিত্রটি পূর্বের সমান হয় তবে কচ্ছপটি ঘোরান না।

  3. যদি কচ্ছপটি এখন গ্রিডের মুখোমুখি হচ্ছে তবে এটি খালি নয় (অর্থাত্ কোনও স্থান নয়), বার বার টার্টেলটিকে চতুর্থাংশের বাঁদিকে ঘোরান যতক্ষণ না সে একটি খালি গ্রিড জায়গার সম্মুখীন হয়।

  4. কচ্ছপটি একটি গ্রিডের মুখের দিকে এগিয়ে যাচ্ছে সেদিকেই এগিয়ে যান এবং টার্টেলের নতুন অবস্থানে গ্রিডে বর্তমান চরিত্রটি মুদ্রণ করুন।

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

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

উদাহরণ

ইনপুট সমস্ত পদক্ষেপ এখানে spattuuxze^V<>অক্ষর দিক কচ্ছপ রয়েছে দেন, তারা না ইনপুট অথবা আউটপুট অংশ।

s>
^
p
s
<ap
  s
^
t
ap
 s
^
t
t
ap
 s
tu>
t
ap
 s
tuu>
t
ap
 s
tuu
t x
apV
 s
tuu
<zx
ap
 s

এই মুহুর্তে কচ্ছপ আটকে যায় তাই eকখনই মুদ্রিত হয় না এবং চূড়ান্ত ফলাফল হয়:

tuu
tzx
ap
 s

নিম্নলিখিতটি একটি অনুরূপ তবে অবৈধ আউটপুট যাহেতু এতে শ্বেতস্পেসের একটি অপ্রয়োজনীয় শীর্ষস্থানীয় কলাম রয়েছে:

 tuu
 tzx
 ap
  s

পরীক্ষার মামলা

spattuuxze

tuu
tzx
ap
 s

spattuuxxze

tuu
t x
apx
 sze

1111111

1111111

ABCDEFGHIJKLMNOP

PEFG
ODAH
NCBI
MLKJ

`_^]\[ZYXWVUTSR

 ^_RS
\]`UT
[ZWV
 YX

Woo!

W
o
o!

woo!

!o
 o
 w

Wheeee

W
heeee

banana

  a
 an
an
b

Turtle

T
ure
 tl

turTle

  e
tTl
ur

(এগুলির মধ্যে কোনওটি ভুল মনে হলে অবিলম্বে আমাকে বলুন))



আমি মনে করি আপনার পরীক্ষার কেসটি যুক্ত করা উচিত PONMLKJIHGFEDCBA, যেহেতু ফলাফলটি কেবল একটি বর্গ নয় এবং ABCDEFGHIJKLMNOPনিয়মে অসম্পূর্ণতাটি হাইলাইট করার সাথে বিপরীতে থাকে ।
গ্রেগ মার্টিন

উত্তর:


1

গ্রোভি (357 বাইট)

কোনও বাহ্যিক কচ্ছপের libs ব্যবহার করা হয়নি এবং কোনও কচ্ছপ ক্ষতিগ্রস্থ হয়নি।

R={s->s[0]?[0,-1*s[0]]:[s[1],0]}
L={s->s[0]?[0,s[0]]:[-1*s[1],0]}
def y(s){l=s.length()*2;z(new String[l][l],[l/4,l/4],s,null,[0,1])}
def z(g,l,w,p,h){if(w.length() && !g[(int)(l[0]+h[0])][(int)(l[1]+h[1])]){c=w.getAt(0);w=w.substring(1);if(p && p<c){h=R(h)}else if(p>c){h=L(h)};g[(int)l[0]+h[0]][(int)l[1]+h[1]]=c;z(g,[l[0]+h[0],l[1]+h[1]],w,c,h)}else{g}}

এটি এখানে চেষ্টা করুন: https://groovyconsole.appspot.com/edit/5115774872059904


পূর্ববর্তী প্রচেষ্টা

গ্রোভি (397 বাইট)

rotR={s->s[0]!=0?[0,-1*s[0]]:[s[1],0]}
rotL={s->s[0]!=0?[0,s[0]]:[-1*s[1],0]}
def y(s){z(new String[s.length()][s.length()],[s.length()/2,s.length()/2],s,null,[0,1])}
def z(g,l,w,p,h){if(w.length() && !g[(int)(l[0]+h[0])][(int)(l[1]+h[1])]){c=w.getAt(0);w=w.substring(1);if(p && p<c){h=rotR(h)}else if(p > c){h=rotL(h)};g[(int)l[0]+h[0]][(int)l[1]+h[1]]=c;z(g,[l[0]+h[0],l[1]+h[1]],w,c,h)}else{g}}

https://groovyconsole.appspot.com/script/5179465747398656


3
উত্তরগুলি অবশ্যই সম্পূর্ণ এবং বৈধ হতে হবে। আপনার উত্তর মুছুন বা এটি শেষ করুন। এছাড়াও, 30 মিনিট খুব দীর্ঘ নয়। আমি এর আগে উত্তরে কয়েক ঘন্টা ব্যয় করেছি।
mbomb007

0

জাভা, 408 406 বাইট

String f(String I){int l=I.length(),x=l,y=x,z=x,t=y,Z=x,T=y,d=1,i=1,a;char[][]g=new char[l*2][l*2];int[]D={-1,0,1,0};for(char c,p=g[x][y]=I.charAt(0);i<l;p=c){c=I.charAt(i++);d=((c<p?d-1:c>p?d+1:d)+4)%4;for(a=0;g[x+D[d]][y+D[3-d]]>0&&a++<4;)d=(d+3)%4;if(a>3)break;g[x+=D[d]][y+=D[3-d]]=c;z=z<x?z:x;Z=Z>x?Z:x;t=t<y?t:y;T=T>y?T:y;}for(I="";z<=Z;z++,I+="\n")for(a=t;a<=T;a++)I+=g[z][a]<1?32:g[z][a];return I;}

ফাংশনটি স্ট্রিং হিসাবে ইনপুট দেয় এবং ফলাফলটিকে স্ট্রিং হিসাবে ফিরিয়ে দেয়।

অভ্যন্তরীণভাবে এটি অক্ষরগুলি সংরক্ষণ করার জন্য একটি 2D চর অ্যারে ব্যবহার করে এবং ব্যবহৃত সাব-অ্যারেটি ব্যবহার করার জন্য ব্যবহৃত ন্যূনতম এবং সর্বাধিক কলাম এবং সারি ব্যবহার করে।

সুতরাং, ফলাফলের স্ট্রিংগুলিতে শ্বেত-ফাঁকের কোনও শীর্ষস্থানীয় কলাম নেই তবে শূন্য স্থানগুলির ফাঁকা স্থানটি শূন্যস্থান ছাড়াই ডানদিকের কলাম পর্যন্ত রয়েছে। শেষে একটি নতুন লাইন যুক্ত করা হয়েছে।

এটি আরও গল্ফ করার জন্য কোনও পরামর্শ স্বাগত :-)


আপনি ইনপুট হিসাবে চর [] ব্যবহার করে একটি ছোট বাইট গণনা করতে সক্ষম হতে পারেন। ((সি <পি? ডি -1: সি> পি? ডি + 1: ডি) +4)% 4 এছাড়াও, + 4% 4 = 0, আমি ভুল হয়ে থাকলে আমাকে সংশোধন করুন তবে +4 অপসারণ করা উচিত নয় তোমার গোপন সংকেত.
ম্যাজিক অক্টোপাস উর্ন

1
@ কারাসোকম্পিউটিং এটি সত্য যে ইনপুট হিসাবে চর [] অনেকগুলি বাইট সংরক্ষণ করতে পারে তবে আমি নিশ্চিত নই যে এটি প্রশ্নের দ্বারা অনুমোদিত কিনা। প্রশ্নটিতে একটি "ইনপুট স্ট্রিং" উল্লেখ করা হয়েছে। এছাড়াও +4 আবশ্যক কারণ d যা দিকটি 0 এবং 4 এর মধ্যে আবদ্ধ হতে %হয় এবং এটি জাভাতে অবশিষ্ট থাকে এবং এটি নেতিবাচক হতে পারে যা পছন্দসই নয়। পরামর্শগুলির জন্য ধন্যবাদ :-)
মাস্টার_এক্স

আহ ... ভাল ক্যাপচার, আমার শেষ মুহূর্তে অস্পষ্টতা হ'ল ও.পি. প্রদত্ত ইনপুটগুলি সমস্ত পরিস্থিতিতে .েকে রেখেছে ... "এলএনওপিএফজি 1 #" এটি +4 ছাড়াই ভেঙে দেয়। দুঃখিত, এমনকি কোডটি পড়তে আমাকে এক মিনিট সময় লেগেছে।
ম্যাজিক অক্টোপাস উরন

0

পাইথন 3, 419 414 বাইট

Z=input();l=r=c=M=R=C=N=len(Z);t=(r*2)+1;A=[0]*t;J=range
for i in J(t):A[i]=[" "]*t
A[r][c]=Z[0];i=1;Q=[1,0,-1,0];d=q=0
while i<l:
 if Z[i]<Z[i-1]:d+=3
 elif Z[i]>Z[i-1]:d+=1
 while A[r+Q[(d-1)%4]][c+Q[d%4]]!=" "and q<4:d+=3;q+=1
 if q>3:break
 r+=Q[(d-1)%4];c+=Q[d%4];R=min(R,r);C=min(C,c);M=max(M,r);N=max(N,c);A[r][c]=Z[i];i+=1;q=0
for i in J(R,M+1):
 for j in J(C,N+1):print(A[i][j],end="")
 print()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.