চেইন শব্দের ক্রসওয়ার্ড-স্টাইল


18

চ্যালেঞ্জ

["Programming", "Puzzles", "Code", "Golf"]ক্রসওয়ার্ড-স্টাইল শব্দের আউটপুট শব্দের একটি তালিকা দেওয়া হয়েছে :

      পি রোগ্রামিং
      তোমার দর্শন লগ করা
      z- র
      z- র
  জি এল
সি ওড
  ম
  চ

অ্যালগরিদম

  • আপনাকে প্রদত্ত ক্রমে তালিকাটি প্রক্রিয়া করতে হবে।
  • শব্দগুলি আনুভূমিকভাবে শুরু করে বিকল্প স্থিতিতে মুদ্রিত হয় ।
  • দুটি শব্দ প্রথম শব্দের প্রথম অক্ষরে ছেদ করে যা দ্বিতীয় শব্দটিতেও উপস্থিত। যদি এই চিঠিটি সিউন্ড শব্দের মধ্যে একাধিকবার ঘটে থাকে তবে প্রথমটিটি নিন।

    উদাহরণ :
    ["no", "on"]হয়ে যায়:

    o
    n o
    

    এবং না

    n o
      n
    

অতিরিক্ত নোট

  • তালিকার সংলগ্ন শব্দগুলির কমপক্ষে একটি সাধারণ চিঠি থাকবে। ["Hi", "there"]কোনও বৈধ ইনপুট নয়।
  • শব্দ কখনও সংঘর্ষ হবে না। প্রথম সম্ভাব্য ছেদটিতে শব্দের মুদ্রণের জন্য সর্বদা পর্যাপ্ত জায়গা থাকবে। ["Hello", "there", "end", "hello"]কোনও বৈধ ইনপুট নয়
  • মিলটি কেস-সংবেদনশীল।
  • শব্দগুলি বাম এবং শীর্ষে প্রসারিত হতে পারে।
  • অনুভূমিক শব্দের বর্ণগুলি একটি স্থান দ্বারা পৃথক করতে হবে।
  • ইনপুট তালিকায় কমপক্ষে দুটি শব্দ থাকবে।
  • সমস্ত শব্দ রেজেক্সের সাথে মিলবে: [A-Za-z]+
  • যতক্ষণ শব্দ সঠিকভাবে বেঁধে রাখা যায় ততক্ষণ আপনি যতগুলি পেছনের শ্বেতস্পেস বা নিউলাইনগুলি চান তা মুদ্রণ করতে পারেন।
  • অন্যদিকে আপনি অতিরিক্ত নেতৃস্থানীয় হোয়াইটস্পেস যোগ করতে পারেন না। যে শব্দটি বাম দিকে ভাসমান সর্বাধিক শূন্য শূন্যস্থান রয়েছে, অন্য রেখাগুলিতে এতগুলি নেতৃস্থানীয় স্পেস রয়েছে যেগুলি সমস্ত লাইন সঠিকভাবে আপ করে।
  • আপনার প্রোগ্রামটি একটি স্বেচ্ছাসেবী শব্দের সাথে ডিল করতে সক্ষম হতে হবে

বিধি

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

প্রথম লাইনে ইনপুট তালিকা, আউটপুট দ্বিতীয় লাইনে শুরু হয়।

["স্ট্যাক বিনিময়"]
    ই
    এক্স
    গ
    জ
এস ট্যাক
    এন
    ছ
    ই
["এটি", "সাইট", "স্নাতক", "শেষ পর্যন্ত"]
    চ
    হয়
    n টি তার
স্নাতক
    Le
    ঠ
    Y


শুভ কোডিং!


উদাহরণ 2, এর মধ্যে প্রথম সম্ভাব্য চৌরাস্তা siteএবং graduatedহ'লt
এডি 3165

@ edc65 আমাকে লজ্জা দিন, এটি ঠিক করেছেন। ইঙ্গিতটির জন্য ধন্যবাদ!
ডেনকার

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6) 253

অ্যারে প্যারামিটার সহ একটি বেনামী ফাংশন হিসাবে

z=>(z.map((w,i)=>(i&&[...p].some((c,j)=>~(k=w.search(c))?i&1?[y-=k,x+=j]:[y+=j,x-=k]:0),[p=w,x<t?t=x:x,y<u?u=y:y]),t=u=x=y=0).map(([w,x,y],i)=>{x-=t,y-=u;for(c of w)(o[y]=o[y]||[])[x]=c,i&1?y++:x++},o=[]),o.map(r=>[...r].map(x=>x||' ').join` `).join`
`)

F=z=>(z.map((w,i)=>(i&&[...p].some((c,j)=>~(k=w.search(c))?i&1?[y-=k,x+=j]:[y+=j,x-=k]:0),[p=w,x<t?t=x:x,y<u?u=y:y]),t=u=x=y=0).map(([w,x,y],i)=>{x-=t,y-=u;for(c of w)(o[y]=o[y]||[])[x]=c,i&1?y++:x++},o=[]),o.map(r=>[...r].map(x=>x||' ').join` `).join`
`)

// Less golfed
F=z=>(
  z.map( // Step 1, find intersection points and relative position
    (w,i)=>(
      i && // for each word after thw first, find position respect the previous word
      [...p].some((c,j)=> // scan prec word using .some to exit at the first intersection found
         ~(k=w.search(c)) // search current char of p inside w
         ?i&1 // calc position, odd is vertical, even is horizontal
           ?[y-=k, x+=j] // returning an array so to have a truthy value
           :[y+=j, x-=k] // returning an array so to have a truthy value
         :0 // false = not found, continue the scan
      ),
      [p=w, // set preceding word
       x<t?t=x:x, // keep trace of min x
       y<u?u=y:y  // keep trace of min y
      ] // meanwhile, return word, x and y to be used in next step 
    ), t=u=x=y=0 // initializations
  )
  .map(([w,x,y],i)=>{ // Step 2, put char into the output array
      x-=t,y-=u; // normalize position respect to min values
      for(c of w) // for each char in word, set in the output array at the right place
        (o[y]=o[y]||[])[x]=c, 
        i&1?y++:x++ // increment x or y, again odd is vertical, even is horizontal
    }, o=[] // initialization of output array
  ),
  // Step 3, add the missing spaces and newlines
  o.map(r=>[...r].map(x=>x||' ').join` `).join`\n`
)

O.textContent=F(["This", "site", "graduated", "finally"])
<pre id=O></pre>


3

এএনএসআই সি, 385 390 টি অক্ষর

int N,a=1,x,y,d=1,u,k,l;int main(int c,char**v){for(;a<c;)N+=strlen(v[a++]);int H=N*2,W=N*4,m=H,n=N,q=m,w=n;char*p,F[W][H],*o;memset(F,32,W*H);for(a=1;a<c;a++){q=(x=m)<q?m:q;w=(y=n)<w?n:w;m=-1;for(p=v[a];*p;p++){F[x][y]=*p;if(m<0&&a<c-1&&(o=strchr(v[a+1],*p))){u=o-v[a+1];m=d?x:x-u*2;n=d?y-u:y;}if(d)x+=2;else y++;}d=!d;}for(l=w;l<H;l++){for(k=q;k<W;)putchar(F[k++][l]);putchar(10);}}

এটিকে কল করুন: ./crossword This site graduated finally

অবরুদ্ধ সংস্করণ:

int N,a=1,x,y,d=1,u,k,l;
int main(int c, char **v) {
    for(;a<c;)
        N+=strlen(v[a++]);
    int H = N*2, W = N*4, m = H, n = N, q=m, w=n;
    char *p,F[W][H], *o;
    memset(F, 32, W*H);
    for (a=1; a < c; a++) {
        q=(x=m)<q?m:q;
        w=(y=n)<w?n:w;
        m=-1;
        for (p=v[a]; *p; p++) {
            F[x][y] = *p;
            if (m<0&&a<c-1&&(o = strchr(v[a+1], *p))) {
                u = o-v[a+1];
                m = d ? x : x-u*2;
                n = d ? y-u : y;
            }
            if (d) x+=2; else y++;
        }
        d=!d;
    }
    for (l = w; l < H; l++) {
        for (k = q; k < W;)
            putchar(F[k++][l]);
        putchar(10);
    }
}

টিপস জন্য আপনাকে ধন্যবাদ tucuxi!


একটি চর: a++)N+=strlen(v[a])=>)N+=strlen(v[a++])
টুকুসি

আরেকটি: char F[W][H],*p=>char*p,F[W][H]
টুকুসি

3 টি অক্ষর: Remove {} একক-লাইন থেকে for, প্রতিস্থাপন k++)putchar(F[k][l]সঙ্গে)putchar[k++][l]
tucuxi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.