একটি অনুগামী পথ আঁকুন


20

উল্লম্ব ক্রিস-ক্রসিং টিউবগুলির সেট হিসাবে নিম্নলিখিত চিত্রগুলি কল্পনা করুন।

1 2    1 2    1 2 3 4
\ /    \ /    \ / \ /
 X      |      |   |
/ \    / \    / \ / \
2 1    1 2   |   X   |
              \ / \ /
               X   X
              / \ / \
              3 1 4 2

বামদিকে ডায়াগ্রামে, 1এবং 2তাদের নিজ নিজ স্ল্যাশগুলি স্লাইড করে, ক্রস করুন Xএবং যেখানে শুরু হয়েছিল তার বিপরীত দিকে বেরিয়ে আসুন।

এটি মধ্য চিত্রের মধ্যে একই ধারণা, তবে এটি |নির্দেশ করে যে পথগুলি অতিক্রম করে না, তাই কিছুই পরিবর্তন হয় না।

ডান দিকের চিত্রটি আরও জটিল টিউব রাউটিং দেখায় যা এর 1 2 3 4মধ্যে প্রবেশ করে 3 1 4 2

লক্ষ্য

এই কোড গল্ফ চ্যালেঞ্জের আপনার লক্ষ্য হ'ল এই "টিউব রাউটিং ডায়াগ্রামগুলি" যেমন একটি অনুমানের ফলে দেওয়া হয় তা আঁকুন 3 1 4 2। বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতবে।

বিস্তারিত

  1. ইনপুটটি স্ট্যান্ডিন থেকে 1 থেকে n এর মধ্যে যে কোনও সংখ্যার অনুক্রম হিসাবে স্পেস দিয়ে আলাদা করা হয়, যেখানে এনটি ধনাত্মক পূর্ণসংখ্যা। আপনি ধরে নিতে পারেন সমস্ত ইনপুট সুগঠিত হয়েছে।
  2. রাউটিং ডায়াগ্রাম আউটপুট স্টডআউটে যায়।

    • 1 টির মধ্য দিয়ে "ড্রপিং" করা হচ্ছে এন ডায়াগ্রাম উপরের মধ্যে অনুক্রমে ইনপুট বিন্যাস নীচে আসছে আউট করার ফল করা উচিত নয়। (উপরে এবং নীচে সর্বদা স্ল্যাশগুলির স্তর)
    • ডায়াগ্রামটি সর্বোত্তমভাবে ছোট হওয়ার দরকার নেই। এটি যতক্ষণ যথাযথ হয় তত বেশি স্তর হতে পারে।
    • চিত্রটিতে কেবলমাত্র অক্ষরের \/ X|পাশাপাশি নিউলাইনগুলি (কোনও সংখ্যা নেই) থাকা উচিত।
    • |সর্বদা বাইরের চৌরাস্তাগুলিতে সর্বদা ব্যবহার করা উচিত কারণ ব্যবহার করার Xকোনও অর্থ হয় না।
    • ডায়াগ্রামটি সমস্ত সঠিকভাবে রেখাযুক্ত হওয়া পর্যন্ত কয়েকটি শীর্ষস্থানীয় বা পিছনের স্থান ঠিক আছে।

উদাহরণ

3 1 4 2উত্পাদনের একটি ইনপুট (উপরের মতো)

 \ / \ /
  |   | 
 / \ / \
|   X   |
 \ / \ /
  X   X 
 / \ / \

1উত্পাদনের একটি ইনপুট

 \
  |
 /
|
 \
  |
 /

3 2 1উত্পাদনের একটি ইনপুট

 \ / \
  X   |
 / \ /
|   X
 \ / \
  X   |
 / \ /

2 1 3 4 6 5উত্পাদনের একটি ইনপুট

\ / \ / \ /
 X   |   X
/ \ / \ / \

4
দুর্দান্ত প্রশ্ন! আমি বিশ্বাস করতে পারি না যে আপনি যোগ দিয়েছিলেন মাত্র দু'সপ্তাহ হয়ে গেছে - আপনি সর্বত্র আছেন বলে মনে হয়।
xnor

@ এক্সনর: ডি ধন্যবাদ একটি গুচ্ছ। তবে সত্যিই আমি এখানে অনেক বেশি সময় ব্যয় করেছি ...
ক্যালভিনের

কোনও ভাবে কীভাবে Xসরাসরি যোগাযোগ করা যায় ? অন্যকে ? |/X
xnor

1
@xnor নং এটা সবসময় থাকা উচিত row of slashes, row of X's and |'s, row of slashes, row of X's and |'s, ... বিন্যাস।
ক্যালভিনের

n10 এর চেয়ে বড় হতে পারে?
Οurous

উত্তর:


4

পাইথন 2, 218 219 220 222 224 227 243 247 252 259 261 264

l=map(int,raw_input().split())
f=n=len(l)
o=s=n*' \ /'
while f+n%2:
 f-=1;i=f+n&1;a=s[2*i:][:2*n]+'\n|   '[::2-i]
 while~i>-n:a+='|X'[l[i+1]<l[i]]+'   ';l[i:i+2]=sorted(l[i:i+2]);i+=2
 o=a+f%2*'|'+'\n'+o
print o[:-2*n]

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

উদাহরণ:

$ python sort_path.py <<< '3 1 4 5 9 2 6 8 7'
 \ / \ / \ / \ / \
  |   |   |   |   |
 / \ / \ / \ / \ /
|   |   |   |   |   
 \ / \ / \ / \ / \
  |   |   |   |   |
 / \ / \ / \ / \ /
|   |   |   |   |   
 \ / \ / \ / \ / \
  |   |   |   |   |
 / \ / \ / \ / \ /
|   X   |   |   X   
 \ / \ / \ / \ / \
  |   X   |   X   |
 / \ / \ / \ / \ /
|   |   X   X   |   
 \ / \ / \ / \ / \
  X   |   X   |   |
 / \ / \ / \ / \ /
|   |   |   |   X   
 \ / \ / \ / \ / \

উন্নতি:

264 -> 261: কিছুক্ষণের জন্য বাইরের লুপটি স্যুইচ করা হয়েছে।

261 -> 259: এর f%2পরিবর্তে ব্যবহৃত হয়(c^m) , কারণ পাইথনে গাণিতিক অপারেটরগুলির বিটওয়াইজ অপারেটরগুলির চেয়ে বেশি অগ্রাধিকার রয়েছে।

259 -> 252: কিছুক্ষণের জন্য থেকে অভ্যন্তরীণ লুপটি স্যুইচ করা হয়েছে। সম্মিলিত iএবংc পরিবর্তনশীল।

252 -> 247: পরিবর্তিত বিল্ড তারপর কেবল বিপরীত ক্রমে বিল্ড করতে।

247 -> 243: যোগদানের পরিবর্তে ম্যানুয়ালি নতুন লাইন যুক্ত হয়েছে।

243 -> 227: স্ল্যাশ লাইন জেনারেশনের গ্রিকের পদ্ধতি গ্রহণ করা হয়েছে (ধন্যবাদ জিআরসি!) এবং যুক্ত এস।

227 -> 224: স্ল্যাশ লাইন প্রজন্মকে অভ্যন্তরের পূর্বে সরানো হয়েছে যখন লুপটি অপসারণ করতে %4এবং প্রসারিত স্লাইসিং ব্যবহার করে একটি অক্ষর সংরক্ষণ করতে পারে।

224 -> 222: সরানো মি।

222 -> 220: f%2+n%2->f+n&1

220 -> 219: | 1<n-1|-> |~i>-n|(শীর্ষস্থানীয় স্থান সরানো)

219 -> 218: এর সংহত আরম্ভ oএবং sস্লাইসটি শেষ পর্যন্ত সরানো।


9

পাইথন, 290

def g(o,u=1):
 s=['|']*o
 for i in range(o,n-1,2):v=r[i+1]in a[:a.index(r[i])]*u;s+=['|X'[v]];r[i:i+2]=r[i:i+2][::1-2*v]
 print'  '*(1-o)+'   '.join(s+['|']*(o^n%2))*u+'\n'*u+(' / \\'*n)[2*o:][:n*2]
a=map(int,raw_input().split())
n=len(a)
r=range(1,n+1)
o=1
g(1,0)
g(0)
while r!=a:g(o);o^=1

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

উদাহরণ:

$ python path.py
5 3 8 1 4 9 2 7 6
 \ / \ / \ / \ / \
  |   |   |   X   |
 / \ / \ / \ / \ /
|   X   X   X   X
 \ / \ / \ / \ / \
  X   X   X   X   |
 / \ / \ / \ / \ /
|   X   X   |   X
 \ / \ / \ / \ / \
  X   X   X   |   |
 / \ / \ / \ / \ /
|   |   |   X   |
 \ / \ / \ / \ / \

2

এইচটিএমএল জাভাস্ক্রিপ্ট, 553 419

আমার ত্রুটিগুলি নির্দেশ করার জন্য @ আইজলিন এবং @ টমহার্টকে ধন্যবাদ।

p=prompt();b=p.split(" "),l=b.length,d=l%2,o="",s=["","","\\/"],n="\n",a=[];for(i=0;i<l;i++){a[b[i]-1]=i+1;s[1]+=" "+s[2][i%2];s[0]+=" "+s[2][(i+1)%2];o+=" "+(i+1)}s[1]+=n,s[0]+=n;o+=n+s[1];f=1,g=2;do{var c="";for(var i=(f=f?0:1);i<l-1;i+=2)if(a[i]>a[i+1]){c+="  x ";g=2;t=a[i];a[i]=a[i+1];a[i+1]=t;}else c+="  | ";if(g==2){o+=(d?(f?"| "+c:c+"  |"):(f?"| "+c+"  |":c))+n;o+=(s[f]);}}while(--g);o+=" "+p;alert(o);

এখানে পরীক্ষা করুন: http://goo.gl/NRsXEj
এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


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

তুমি ঠিক. ধন্যবাদ। আমি @ জিআরসি'র আউটপুট দেখেছি এবং মনে করেছি যে সংখ্যাগুলি শুরুর অবস্থান। উফ।
জেফএসবি

আমি সম্ভবত এই ভুলটির দিকে তাকিয়ে থাকব তবে আপনি পোস্ট করেছেন এমন দুটি ছবিতেই কিছুই পরিবর্তন না হওয়ায় শেষ সারিটি অনর্থক নয়?
টিএমএইচ

হ্যাঁ তুমিই ঠিক. আমি জানতাম এটি আমি কীভাবে এটি করেছি তার aকমত্য us তবে সম্ভবত এটি হতে হবে না। আমি এই সম্পর্কে চিন্তা করব। মন্তব্যের জন্য ধন্যবাদ.
জেফএসবি

@ আইজলিন - এটি লক্ষ্য করার জন্য ধন্যবাদ। আমি এই ত্রুটিটি স্থির করেছি।
জেফএসবি

1

জাভাস্ক্রিপ্ট - 395

378 যদি আমি আমার আউটপুটে নম্বরগুলি মুদ্রণ না করি তবে এটি আরও ভাল দেখায় এবং পাঠযোগ্যতার উন্নতি করে।
এটি এখানে পরীক্ষা করুন । (অবারিত সংস্করণ সহ)

গল্ফ করা সংস্করণ:

a=prompt(),n=a.split(" "),l=n.length,k=[],s="",i=1;for(j=0;j<l;j++){k[n[j]-1]=j+1;s+=" "+(j+1)}s+="\n";while(i++){for(j=0;j<l;j++)s+=i%2?j%2?" \\":" /":j%2?" /":" \\";for(z=0,y=0;z<l-1;z++)if(k[z]>k[z+1])y=1;if(y==0&&i!=2)break;s+="\n";for(m=i%2;m<l;m+=2){s+=i%2&&m==1?"|":"";if(k[m]>k[m+1]){[k[m],k[m+1]]=[k[m+1],k[m]];s+=i%2?"   X":"  X "}else{s+=i%2?"   |":"  | "}}s+="\n"}s+="\n "+a;alert(s)

ব্যাখ্যা

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

3 1 4 2
v v v v substitude with
1 2 3 4

so the first line will become:
1 2 3 4
v v v v
2 4 1 3

sorting 1,2,3,4 to 3,1,4,2 is equivalent to 2,4,1,3 to 1,2,3,4

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

উদাহরণ

input: 3 4 2 1 7 5 6
output:
 1 2 3 4 5 6 7
 \ / \ / \ / \
  X   |   |   | 
 / \ / \ / \ /
|   X   |   X
 \ / \ / \ / \
  X   X   X   | 
 / \ / \ / \ /
|   X   |   |
 \ / \ / \ / \
 3 4 2 1 7 5 6


(1) আমি দেখতে পাচ্ছি যে আপনি বিআর ট্যাগটি তিনটি জায়গায় ব্যবহার করেন এবং সুতরাং এটি একটি ভেরিয়েবলের মধ্যে রেখে আপনি কিছুটা সঞ্চয় করতে পারেন। এছাড়াও আপনি সম্ভবত PRE এ আউটপুট দেওয়ার পরে \ n ব্যবহার করতে পারেন।
জেফএসবি

(২) আমি গল্ফিং জাভাস্ক্রিপ্ট মোকাবেলায় এবং সুবিধাজনক ইনপুট এবং আউটপুট থাকার জন্য বিভিন্ন উপায়ে চেষ্টা করছি। আমি মনে করি আপনার প্রম্পট এবং সতর্কতার দ্বারা অনুপ্রাণিত আমার সর্বশেষ পদ্ধতিটি আমি পছন্দ করি ... আমি কোডে প্রম্পট এবং সতর্কতা ব্যবহার করি যাতে এটি কোনও কনসোলে আটকানো যায় এবং এটি যে কারওর জন্য কাজ করে। তবে আমি এটির কাজ দেখানোর জন্য একটি টেক্সটরিয়া এবং পিআরই দিয়ে একটি ওয়েবপৃষ্ঠাও করেছি। ওয়েবপৃষ্ঠাটি TEXTAREA এবং PRE ব্যবহার করার জন্য প্রম্পট এবং সতর্কতাটিকে ওভাররাইড করে - তাই এটি একই কোড এবং কম বিভ্রান্তি রয়েছে - সম্ভবত?
জেফএসবি

@ জেফএসবি আমি <br>কেবল জেসফিডেলে ট্যাগ এবং টেক্সারিয়া ব্যবহার করেছি, কারণ এটি দেখতে আরও ভাল দেখাচ্ছে। সতর্কতার কোনও মনসপাসে ফন্ট নেই তাই আউটপুটটি খারাপ দেখাচ্ছে। আমার গল্ফযুক্ত সংস্করণে আমি সতর্কতা এবং use n ব্যবহার করি। আপনার ওয়েবপেজটি কি পাবলিক?
ইজলিন

1

কোবরা - 334 344 356 360

class P
    def main
        a,o,n=CobraCore.commandLineArgs[1:],['/','\\'],0
        c,l=a.count,a.sorted
        while (n+=1)%2or l<>a
            p,d='',(~n%4+4)//3
            for i in n%2*(c+1-c%2),p,o=p+o[1]+' ',[o.pop]+o
            for i in 1+d:c-n%2*c:2
                z=if(l[:i]<>a[:i],1,0)
                l.swap(i-z,i)
                p+=' ['|X'[z]]  '
            print[['','| '][d]+[p,p+'|'][d^c%2],p][n%2][:c*2]

এটি প্রতিটি উপাদানকে বাম থেকে শুরু করে জায়গায় সরিয়ে নিয়ে কাজ করে। এ কারণে এটি প্রায়শই হাস্যকর আকারে বড় (যদিও এখনও সঠিক) পথ-মানচিত্রটি আউটপুট দেয়।

উদাহরণ:

3 1 4 2

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