আসকি-শিল্প সঙ্কুচিত


12

চ্যালেঞ্জ

স্ট্রিং হিসাবে বা স্ট্যান্ডার্ড ইনপুটের মাধ্যমে মুদ্রণযোগ্য আসকি অক্ষরগুলির একটি আয়তক্ষেত্রাকার গ্রিড দেওয়া, কোনও ফাংশন বা প্রোগ্রাম লিখুন যা ফাঁকা স্থান অক্ষরগুলি নীচে একটি গাদাতে ভেঙে দেয়।

নিয়ম:

  • আউটপুট ইনপুট হিসাবে একই মাত্রা এবং অক্ষর আছে।
  • এ অ স্থান অক্ষর (row a,column b)একটি স্থান অক্ষর থাকতে পারে না ' '(a-1, b), (a-1,b-1)বা (a-1,b+1), যেখানে সারি নীচে সবচেয়ে থেকে গণিত আছে। এর ফলস্বরূপ যে সমস্ত উল্লম্ব পাইলগুলি পাশের ধসে পড়ে।
  • একটি স্থান (initial height - final height)ছাড়াই অক্ষর বেশিরভাগ জায়গায় বাম বা ডান দিকে ভ্রমণ করতে পারে (চিত্র 1 দেখুন)।
  • আপনি ধরে নিতে পারেন যে পর্দার বাইরে স্ক্রোলটি না পড়ে ছবিটি ধসে পড়ার পর্যাপ্ত জায়গা রয়েছে।

চিত্র 1: যথাক্রমে @#$প্রদর্শিত অক্ষরের জন্য সম্ভাব্য চূড়ান্ত অবস্থানগুলি x,y,z

..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.

যে ক্রমে অক্ষরগুলি পতিত হয় সেটিকে অবাধে চয়ন করা যেতে পারে। ট্রেলিং স্পেসগুলি ঠিক নেই তবে পেছনের নতুন লাইনগুলি।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর!

উদাহরণ

                 (__)
                 (oo)
           /------\/
          / |    ||
         *  /\---/\
            ~~   ~~
..."Have you mooed today?"...

একটি সম্ভাব্য আউটপুট:

 
 
 
                --(_
           /----|/|(o_)
          /|/~\---~\\/o)
..."Have*you~mooed~today?"...

কেবল স্পষ্ট করে বলতে গেলে, প্রতিটি সময় এলোমেলোভাবে তৈরির পরিবর্তে যেভাবে অক্ষরগুলি পড়েছে সেগুলি হার্ড-কোডড হতে পারে?
ETH প্রোডাকশনস

18
সেই গরুটি তোমার সাথে কি করেছে ?? :(
ফ্লিপট্যাক

পছন্দ করুন আমার উদাহরণটি নীচে থেকে উপরে, বাম থেকে ডানদিকে এলোমেলো ক্রম বা অন্য কোনও কিছু ঠিক আছে, যতক্ষণ নিয়ম মানা হয়।
অ্যাঙ্গস

@ Flp.Tkc এটি কেবল একটি মডেল।
অ্যাঙ্গস

1
@ আবিষ্কারযোগ্য জলছবি যদি কোনও চরিত্র পর্দার বাইরে পড়ে যায় তবে এটি তাদের নয়, আপনার নয়।
অ্যাঙ্গস

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 100 90 88 বাইট

f=s=>s==(l=s.search`
`,s=s.replace(eval(`/(\\S)([^]{${l-1},${l+1}}) /`),` $2$1`))?s:f(s)
s=`                 (__)        
                 (oo)        
           /------\\/         
          / |    ||          
         *  /\\---/\\          
            ~~   ~~          
..."Have you mooed today?"...`
console.log(s)
console.log(f(s))

স্ট্রিংয়ের কমপক্ষে দুটি লাইন থাকতে হবে এবং সমস্ত লাইন সমান দৈর্ঘ্যে প্যাড হবে। উদাহরণ চিত্রের আউটপুট:

              ( --           
            /|---/|-(o__     
          */~~\---~\|\/o))   
..."Have you/mooed~today?"...

মনে রাখবেন যে এটি সম্ভব হলে উপাদানগুলি ডানদিকে নিয়ে যাওয়ার চেষ্টা করে, *the Haveএবং the এর মধ্যে পড়ে না you

সম্পাদনা: @ETH প্রডাকশনগুলির জন্য 10% ধন্যবাদ সংরক্ষণ করা হয়েছে @ ড্যানিয়েল ইন্ডিকে ধন্যবাদ দিয়ে আরও 2 টি বাইট সংরক্ষণ করা হয়েছে।

রেটিনা 0.8.2 , 50 বাইট

+`(?<=(.)*)(\S)(.*¶(?<-1>)?(?>(?<-1>.)*).?) 
 $3$2

এটি অনলাইন চেষ্টা করুন! আমার জাভাস্ক্রিপ্ট উত্তরের একটি সামান্য ভিন্ন পদ্ধতির, এটি অ-স্থানের অক্ষরের নীচে একটি জায়গার সাথে মিল রাখতে একটি ভারসাম্যপূর্ণ গোষ্ঠী ব্যবহার করে; (?<-1>)?স্থান বাঁদিকে একটি কলাম হতে সময় দেয় .?স্থান ডানদিকে একটি কলাম হতে পারবেন।

রেটিনা , 40 বাইট

~0L$`.(.*)¶
+s`(\S)(.{$.1,$.&}) ¶ $$2$$1

এটি অনলাইন চেষ্টা করুন! আমার জাভাস্ক্রিপ্ট উত্তর পোর্ট। 0L$পারমাণবিক পর্যায় ইনপুট নেয় এবং কমান্ড যে আসলে প্রতিস্থাপন, যা দ্বারা আসল ইনপুটের মূল্যায়ন করা হয় সঞ্চালিত ফলে দ্বিতীয় লাইন দুই লেন্থ কর্মের পরিবর্তে ~যৌগ পর্যায়ে।


এটি একটি দুর্দান্ত অ্যালগরিদম! \nএটি দুটি অঙ্কে নামিয়ে আনার জন্য আপনি আক্ষরিক নতুন লাইনের সাথে প্রতিস্থাপন করতে পারেন ;-)
ETH প্রোডাকশনগুলি

এছাড়াও, আমি মনে করি আপনি এটি করতে পারেন l=s.search`\n` কয়েক বাইট সংরক্ষণ করতে ।
ETH প্রোডাকশনগুলি


@ ড্যানিয়েলইন্ডি f=পুনরাবৃত্তির জন্য প্রয়োজনীয়, তবে এটি এখনও আমার 2 বাইট সংরক্ষণ করে, ধন্যবাদ!
নীল

আপনি ঠিক বলেছেন, দুঃখিত: পি
ড্যানিয়েলইন্ডি

3

পাইথন 2, 298 বাইট

a=input()
L=len(a);s=' '
a=[list(s*L+l.ljust(L+max(map(len,a))))for l in a]
t=1
while t:
 t=0
 for y in range(L-1):
  for x in range(len(a[y])):
   c=a[y][x];C=a[y+1][x-1:x+2]
   if s!=c and s in C:t=1;a[y][x]=s;a[y+1][[[x+1,x][C[1]==s],x-1][C[0]==s]]=c
for l in map(''.join,a):print l[L:].rstrip()

স্ট্রিংগুলির তালিকা হিসাবে ইনপুট নেয় (প্রতি লাইনে একটি)

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

['                 (__)',
'                 (oo)',
'           /------\/',
'          / |    ||',
'         *  /\---/\ ',
'            ~~   ~~',
'..."Have you mooed today?"...']

আউটপুট:

              (
            -----/|-(o__
         //|~~\---~\|\/o))
..."Have*you/mooed~today?"...

3

সি, 252 বাইট

e=1,l,c,i,j,p,r,w,a[999];f(){while((i=getchar())>0)a[w++]=i,i<16?l++:0,l?0:c++;while(e)for(i=e=0;i<c;i++)for(j=l;j>=0;j--)e=(r=a[p=j*(c+1)+i]-32?a[r=p+c+1]-32?a[r=p+c]-32?a[r=p+c+2]-32?0:r:r:r:0)?l=a[p],a[p]=a[r],a[r]=l:e;for(i=0;i<w;)putchar(a[i++]);}

অবহেলিত পরীক্ষার কোড:

#include <stdio.h>

e=1,l,c,i,j,p,r,w,a[999];
f()
{
    // counting lines and columns
    while ((i = getchar())>0)a[w++] = i, i<16 ? l++ : 0, l ? 0 : c++;
    // main shaking loop
    while (e) // repeat while collapsing
        for (i = e = 0; i < c; i++) // columns loop
            for (j = l; j >= 0; j--) // lines loop
                e = ( // remember that collapsing was
                     r = // find place to collapse
                         a[p = j*(c + 1) + i] - 32 ? // if not space
                             a[r = p + c + 1] - 32 ? // if char under the current is not a space
                                 a[r = p + c] - 32 ? // see one position left
                                    a[r = p + c + 2] - 32 ? 0 // then one position right
                                                          : r
                                    : r
                                 : r
                             : 0
                         ) ? // and if place was found
                           l=a[p],a[p]=a[r],a[r]=l // replace values in positions p and r
                           : e;
    //print resulting picture
    for(i=0;i<w;)putchar(a[i++]);
}

int main(void)
{
    int cnt;
    FILE * testf = fopen("caw.txt","w");
    char testd[][31] = {
        "                 (__)        \n",
        "                 (oo)        \n", 
        "           /------\\/         \n", 
        "          / |    ||          \n", 
        "         *  /\\---/\\          \n", 
        "            ~~   ~~          \n", 
        "...\"Have you mooed today ? \"...",
        "" };
    // prepare data for test
    printf("Initial data:\n");
    for(cnt = 0; cnt < 7; cnt++)
    {
        printf("%s", testd[cnt]);
        fprintf(testf, testd[cnt]);
    }
    fclose(testf);
    // redirect standard input
    freopen("caw.txt", "r", stdin);
    printf("\n\nResult:\n");
    // start test
    f();
}

পরীক্ষার ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


2

অ্যালগোডো (অ-প্রতিযোগী)

ইনপুট - অধঃপতন উদাহরণ ব্যবহৃত।

সেটআপ

চলমান - ডিফল্ট মাধ্যাকর্ষণ এবং বাউন্সিং।

চলমান

আউটপুট - নির্ভুলতা অবজেক্টগুলিতে ঘর্ষণ এবং ঘনত্ব সেটিংসের মাধ্যমে সমন্বয় করা যেতে পারে।

আউটপুট

অ্যালগোডো লজিক প্রোগ্রামেবল


কেন এই প্রতিযোগিতা হয়? প্রতিদ্বন্দ্বিতা সাধারণত চ্যালেঞ্জের চেয়ে নতুন ভাষায় উত্তরগুলির জন্য সংরক্ষিত থাকে।
অ্যাডহক গার্ফ হান্টার

যদিও অ্যালগোডু সত্যিকারের যুক্তি করতে পারে তবে এই সিমুলেশনটি মেঝেতে ইনপুটটির একটি ছাঁটাই প্রিন্ট-আউট ফেলে দেওয়া এবং এটির ছবি তোলার সমান। আমি নিশ্চিত না যে কীভাবে কীভাবে প্রোগ্রামটিভ উপায়ে সেই আউটপুটটি ক্যাপচার করা যায়।
wyldstallyns

এবং "জিরো বাইট প্রোগ্রাম! আমি জিতেছি" বলে ভুল বলে মনে হয়েছিল!
wyldstallyns

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

আমি সেই মেটা খুলে দেব।
wyldstallyns

1

জাভাস্ক্রিপ্ট, 286 বাইট

b=>eval('f=b=>b==null||" "==b;b=b.split`\n`.map(b=>[...b]);a:for(;;){for(c=0;c<b.length-1;c++)for(g=b[c],d=0;d<g.length;d++){h=g[d];if(!f(h)){e=0;f(b[c+1][d])?e=2:f(b[c+1][d-1])?e=1:f(b[c+1][d+1])&&(e=3);if(e){b[c+1][d+e-2]=h;b[c][d]=" ";continue a}}}break}b.map(b=>b.join``).join`\n`')

উদাহরণ

// Here I assume that you've assigned the above function to `fall`
console.log(fall(`
                 (__)
                 (oo)
           /------\/
          / |    ||
         *  /\---/\\
            ~~   ~~
..."Have you mooed today?"...`))

আউটপুট:

                -       
            /--(-\--(__  
          /|~~---/~||/oo))
..."Have*you/mooed~today?"...

আরেকটি উদাহরণ:

console.log(fall(`
 (\__/)  .~    ~. ))
 /O O  ./      .'
{O__,   \    {
  / .  . )    \\
  |-| '-' \    }
 .(   _(   )_.'
'---.~_ _ _&`))

আউটপুট:

    _ , /            
  OO/__'_.. .         
 {.(|-|.(O'))/.~{      
/('---.~___-_&)_.'}\~.'))

অবহেলিত ফাংশন

function fall(input) {
  let move = true
  let lines = input.split("\n").map(line => line.split(""))
  let isSpace = c => c == null || c == " "
  loop: for (;;) {
    for (let y = 0; y < lines.length - 1; y++) {
      let line = lines[y]
      for (let x = 0; x < line.length; x++) {
        let ch = line[x]
        if (!isSpace(ch)) {
          let dx = 0
          if (isSpace(lines[y+1][x])) { dx = 2 }
          else if (isSpace(lines[y+1][x-1])) { dx = 1 }
          else if (isSpace(lines[y+1][x+1])) { dx = 3 }
          if (dx) {
            lines[y + 1][x + dx - 2] = ch
            lines[y][x] = " "
            continue loop
          }
        }
      }
    }
    break
  }
  return lines.map(line => line.join("")).join("\n")
}

ফাঁকা না থাকার জন্য পরীক্ষা করার একটি ছোট উপায় হ'ল c>" "যেখানে cআপনি যা চরিত্রটি পরীক্ষা করছেন তা প্রতিনিধিত্ব করে।
নিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.