কোড-গল্ফ Ascii আর্ট মিনি-গল্ফ


13

ইন্ট্রো

আসুন কিছু মিনি-গল্ফ খেলি! গল্ফ বলটি একটি দ্বারা .এবং গর্তটি দ্বারা একটি দ্বারা প্রতিনিধিত্ব করা হয় O। আপনি প্রতিটি গর্তের মধ্যে একটিতে একটি গর্ত পেতে চান, তবে আপনি লাগাতে ভাল নন। আসলে, আপনি তির্যক স্থাপন চেষ্টা অস্বীকার! কেবল উপরে, নীচে এবং উভয় দিকে side

আপনি অতিরিক্ত বাম্পার রেখে প্রতারণার পরিকল্পনা করছেন \এবং /যাতে আপনি একটি শট দিয়ে বলটি রাখতে পারেন। এই ছবিতে দেখানো হয়েছে বলে বলটি ডানকোণে বাম্পারদের বাইরে চলে গেছে।

গলফ

আপনার শট কল মনে রাখবেন! আপনি কোন দিকটি রাখছেন তা আমাদের বলুন।


গর্ত

1: প্রথম গর্ত সহজ, একটি সোজা শট! এখানে কোনও বাম্পার রাখার দরকার নেই।

ইনপুট:

.         O

আউটপুট:

right
.         O

2: আর একটি বেসিক, একটি সংক্ষিপ্ত টার্ন। বলটি বাম্পার থেকে গর্তের মধ্যে আঘাত করা হয়।

ইনপুট:

     .
O

আউটপুট:

left
/    .
O

অথবা

down
     .
O    /

3: কিছু ছিদ্র ইতিমধ্যে বাম্পার আছে!

ইনপুট:

.   \O

আউটপুট:

right
.   \O
    \/

অথবা

right
   / \
.  /\O

4: কিছু গর্ত অত্যধিক জটিল!

ইনপুট:

    /  \  \    /
   /  . \  \  /
  /  /\/   /\ \  /
 /  /     /  \ \/
/  /   /\ \  /  \  /
\  \  /  \ \/    \/ 
      \  /          /
  /\   \//\ \      /
 /  \   /  \ \     \/
 \  /\  \  /  \     \
  \/  \  \/    \ O/  \
      /         \/

আউটপুট: (একটি সম্ভাব্য সমাধান, আরও বিদ্যমান)

down
    /  \  \    /
   /  . \  \  /
  /  /\/   /\ \  /
 /  /     /  \ \/
/  /   /\ \  /  \  /
\  \  /  \ \/    \/ 
/     \  /          /
  /\   \//\ \      /
\/  \   /  \ \     \/
 \  /\  \  /  \  /  \
  \/  \  \/    \ O/  \
      /  \      \/
                \   /

বিধি

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

স্কোরিং

এটি । আপনার স্কোরটি আপনার প্রোগ্রামের অক্ষরের সংখ্যা। সর্বনিম্ন স্কোর জয়!


1
আমি নিশ্চিত যে নিম্নলিখিত দিকের দিকনির্দেশগুলি (উপরে, বাম, ডান, নীচে) ভুল আছে: # 2 উদাহরণ 2 হওয়া উচিত right, # 3 উদাহরণ 1 হওয়া উচিত down, এবং # 3 উদাহরণ 2 হওয়া উচিত up। আকর্ষণীয় চ্যালেঞ্জ, যদিও!
ডুরকনব

@ ডুরকনব ধন্যবাদ! .আপনি যে বলটি মারছেন Oতা হ'ল গর্ত। আমি # 2 উদাহরণ 1 এ গণ্ডগোল করেছিলাম তবে সেগুলি এখন ভাল হওয়া উচিত।
hmatt1

উত্তর:


6

জাভাস্ক্রিপ্ট (ES6) - 651 বাইট

G=s=>{Q='\\';S=[[]];n=L=1;s.split(N='\n').map(t=>{j=S[L++]=[];l=t.length;n=n>l?n:l;k=1;t.split('').map(T=>{j[k++]=T})});S[O=L++]=[];n++;for(r=0;r<L;r++)for(c=0;c<=n;c++){v=S[r][c];if(!v)S[r][c]=' ';if(v=='.'){x=c;y=r}if(v=='o'){X=c;Y=r}}f=M=>{J=M?'.':'o';K=M?'o':'.';R=0;for(D=0;1;D++){R=D&4;D=D&3;c=e=D;g=M?X:x;h=M?Y:y;while(c!=K){c=S[h+=[-1,0,1,0][e]][g+=[0,1,0,-1][e]];e=c=='/'?(B=c,e^1):c==Q?(B=c,3-e):e;E=h*(h-O)?g*(g-n)?0:2:1;if(R&&c==' '){S[h][g]=Q;R=D=0;c=K}if(c==J||E){E&&(S[h][g]=(E+M)%2?Q:'/');H=M?E?H:(e+2)&3:D;return}}}};f(0);f(1);S[0][0]=S[O][n]='/';S[0][n]=S[O][0]=Q;return['up','right','down','left'][H]+N+S.map(t=>t.join('')).join(N)}

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

সম্প্রসারিত কোডটি হ'ল:

G = s => {
    Q = '\\';
    S = [[]];
    n = L = 1;
    s.split( N = '\n' ).map( t => {
        j = S[L++] = [];
        l = t.length;
        n = n > l ? n : l;
        k = 1;
        t.split('').map( T => {
            j[k++] = T;
        } );
    } );
    S[O = L++] = [];
    n++;
    for( r = 0; r < L; r++ )
        for( c = 0; c <= n; c++ ) {
            v = S[r][c];
            if( !v )
                S[r][c] = ' ';
            if( v == '.' ) {
                x = c;
                y = r;
            }
            if( v == 'o' ) {
                X = c;
                Y = r;
            }
        }
    f = M => {
        J = M ? '.' : 'o';
        K = M ? 'o' : '.';
        R = 0;
        for( D = 0; 1; D++ ) {
            R = D & 4;
            D = D & 3;
            c = e = D;
            g = M ? X : x;
            h = M ? Y : y;
            while( c != K ) {
                c = S[h += [-1,0,1,0][e]][g += [0,1,0,-1][e]];
                e = c == '/' ? (B=c,e^1) : c == Q ? (B=c,3-e) : e;
                E = h*(h-O) ? g*(g-n) ? 0 : 2 : 1;
                if( R && c == ' ' ) {
                    S[h][g] = B;
                    R = D = 0;
                    c = K;
                }
                if( c == J || E ) {
                    E && (S[h][g] = (E+M)%2 ? Q : '/');
                    H = M ? E ? H : (e+2)&3 : D;
                    return;
                }
            }
        }
    };
    f(0);
    f(1);
    S[0][0] = S[O][n] = '/';
    S[0][n] = S[O][0] = Q;
    return ['up','right','down','left'][H] + N + S.map( t => t.join('') ).join( N );
}

দ্রাবক এই বলের (গর্ত) থেকে যে কোনও পাথ যেভাবে চলবে সেই ভিত্তিতে কাজ করে

  1. আবার বল (গর্ত) ফিরে
  2. গর্ত বাড়ে (বল)
  3. কোর্স প্রস্থান

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

(* মনে রাখবেন যে আমরা যদি কেবল একটি স্থির বাম্পারে রূপান্তর করি [বলুন \], তবে সেখানে অত্যন্ত সঙ্কল্পিত তবে তবুও সম্ভাব্য কেস যেখানে সমাধান রয়েছে তবে আমরা এটি খুঁজে পেতে ব্যর্থ হব।)

আমরা গর্ত থেকে একই ধরণের ট্রেস করি, ফলাফল 2 বা ফলাফল 3 এর দিকে নিয়ে যায় leading

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

পরীক্ষার কেস এবং আউটপুট

ভিতরে

   /   \   / \ /\    
   \\      /    \  \ 
       /     / o   / 
   /   \       /     
   \   .  \  \    \\ 
       /  /     \ \  
       \          /  
           \      /  
 \ /\     /  \/  //\

আউট

right
/   /               \
   /   \   / \ /\    
   \\      /    \  \ 
       /     / o   / 
   /   \       /     
   \   .  \  \    \\ 
       /  /     \ \  
       \          / /
           \      /  
 \ /\     /  \/  //\ 
\                   /

ভিতরে

  / \   / /    /  \    / \  /  \\ /
\   \ /  \  // \    \   /   /\   \
/ \   // \  //   \ \   \ /  / \\ \
 \  / \    /   \  \  / / \\ / /  //
/ /   /\ \\ //  / \   /  \ / \\ \ \
\   \  \ \ // \ /  /    \ \  /  / /
/ \ /   /  / \     / \ /\   /  \  /
\ /\  //\   .\  \ \ //\ /  \  / \ /
/ \/ \ /\ //\   /   \   / o// \ / \
/   / \    / \ / \\ / \   / \   \ \
/ /   / \  / \ //   \    / \/  /\/
   / \   / \  /   \\  / \    /\ / \
/ \/   \   /   \/  \   /  \    /\\
/ /\\ //\  / \  /\ /\   /  / \ / \/

আউট

left
/                                   \
   / \   / /    /  \    / \  /  \\ / 
 \   \ /  \  // \    \   /   /\   \  
 / \   // \  //   \ \   \ /  / \\ \  
  \  / \    /   \  \  / / \\ / /  // 
 / /   /\ \\ //  / \   /  \ / \\ \ \ 
 \   \  \ \ // \ /  /    \ \  /  / / 
 / \ /   /  / \     / \ /\   /  \  / 
 \ /\  //\   .\  \ \ //\ /  \  / \ / 
 / \/ \ /\ //\   /   \   / o// \ / \ 
 /   / \    / \ / \\ / \   / \   \ \ 
 / /   / \  / \ //   \    / \/  /\/  
    / \   / \  /   \\  / \    /\ / \ 
 / \/   \   /   \/  \   /  \    /\\  
 / /\\ //\  / \  /\ /\   /  / \ / \/ 
\         \                         /

ভিতরে

/\/ \      
\  \ \     
 \ \\ \   o
  \ .\ \   
   \ / /   
    \ /    

আউট

down
/   \      /\
 /\/\\       
 \ \\ \      
  \ \\ \   o 
   \ .\ \    
    \ / /    
     \ /     
\           /

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