সর্পিল শব্দগুলি আঁকুন [বন্ধ]


11

পরিস্থিতি

ASCII ছোট হাতের অক্ষর এবং স্পেসগুলির একটি ইনপুট দেওয়া হয়েছে, অক্ষরগুলির একটি সর্পিল আঁকুন যা স্পেসগুলি বাদ দিয়ে অক্ষরের মূল ইনপুটটি সন্ধান করে।

নিয়ম

1) অক্ষরগুলি বাহ্যিকভাবে ফ্যাশনে বাম দিকে ঘড়ির কাঁটার দিকে ঘুরবে। যদি একটি বাম বাঁক সম্ভব না হয়, তবে সোজা সরান।

Given: abcdefg
Output:
  g
baf   
cde   

ইমেজ ট্রেসিং প্রথম উদাহরণ

2) নিয়ম # 1 লঙ্ঘন না করা অবধি অক্ষরগুলি পূর্বের অক্ষরগুলিতে ছড়িয়ে যেতে পারে। এছাড়াও, যদি সেই চরিত্রটি অনুপ্রাণিত হয় তবে সেই চরিত্রটি বড়হীন। কোনও চরিত্র বড়হাতে একবার হয়ে গেলে, এটি পুনরায় ব্যবহারের সময় নির্বিশেষে এটি বড়হাতে থাকবে।

Given: apples appeal
Output:
PAs
PLe
ea

চিত্র ট্রেসিং দ্বিতীয় উদাহরণ


1
সুতরাং শব্দটি যদি সর্পিলের মধ্যে রাখে তবে পরবর্তী চরিত্রটি লঙ্ঘন করে তবে প্রোগ্রামটি বন্ধ হয়ে যায়?
ম্যাট

আমি মনে করি এটি কীটিকে একটি ভাল চ্যালেঞ্জ তৈরি করে তা হ'ল আপনাকে "স্ট্যাকটি রিওয়াইন্ড" করতে হবে যাতে কথা বলতে এবং এমন বিন্দুতে পুনরায় শুরু করতে যা নিয়ম # 1 সর্বদা কাজ করে।
টিম রেড্ডি

5
বর্তমান শব্দবন্ধটি বিধি 2 পুরোপুরি alচ্ছিক বলে মনে হয়। যদি এটি বাধ্যতামূলক হওয়া উচিত তবে আমি মনে করি আরও অনেক বিস্তৃত টেস্ট স্যুটটি প্রয়োজনীয়।
পিটার টেলর

1
ইনপুট জন্য আউটপুট কি হওয়া উচিত abcdefghab?
পিটার টেলর

উত্তর:


2

জাভাস্ক্রিপ্ট, 225 221 212 বাইট

-9 বাইটস কনর ওব্রায়েনকে ধন্যবাদ

দয়া করে মনে রাখবেন যে আপনার পাঠ্য ক্ষেত্রে একে অপরের সাথে বিরোধ রয়েছে। আপনার প্রথম পরীক্ষার কেসটি সর্পিলের মাঝখানে শুরু হয়। আপনার দ্বিতীয় পরীক্ষার কেসটি সর্পিলের উপরের মাঝখানে শুরু হয়। আমি আপনার প্রথম পরীক্ষার মামলাটি দিয়েছিলাম, কারণ এটিই প্রথম আমি দেখেছি। আপনি এক বছরে আপনার প্রশ্ন সম্পাদনা করেন নি, অনুমানের জন্য দুঃখিত।

প্রথম পরীক্ষার কেস:

9<-8<-7
|     |
2<-1  6
|     |
3->4->5

দ্বিতীয় পরীক্ষার কেস:

2<-1<-6
|     |
3->4->5
|     |
7->8->9

আর কোনও অ্যাডিয়ু ছাড়াই এখানে গল্ফ কোড। আমি 100% নিশ্চিত যে যদি সম্প্রদায়টি চিপ করে তবে এটি উল্লেখযোগ্যভাবে কাটা যেতে পারে। এটি মাল্টলাইন অ্যারে প্রদান করে।

s=>eval("s=[...s.replace(/ /g,'')];i=0;k=j=1;a=[[],[],[]];b='00122210';c=b*100+'';for(;;){for(l=0;l<8;l++){if(!s[i])break;if(a[k][j]==s[i])s[i]=s[i].toUpperCase();a[k][j]=s[i];k=b[l];j=c[l];i++}if(!s[i])break}a")

প্রেটিফিকেশন স্নিপেট (কনসোল করার জন্য একটি বহুরেখা স্ট্রিং প্রিন্ট করে)। দয়া করে আমার পরীক্ষার ক্ষেত্রে # 2 এবং ওপি'র পরীক্ষার ক্ষেত্রে # 2 তে ভিন্ন নোট করুন (উপরে আপনি যদি ইতিমধ্যে না থাকেন তবে দেখুন):

(স্নিপেটগুলির সাথে আরও অভিজ্ঞতার সাথে যদি কেউ এটি সম্পাদনা করতে নির্দ্বিধায় এইচটিএমএল ইনপুট এ স্থির করতে চান তবে আমার বিছানায় যেতে হবে)।

f=
s=>eval("s=[...s.replace(/ /g,'')];i=0;k=j=1;a=[[],[],[]];b='00122210';c=b*100+'';for(;;){for(l=0;l<8;l++){if(!s[i])break;if(a[k][j]==s[i])s[i]=s[i].toUpperCase();a[k][j]=s[i];k=b[l];j=c[l];i++;g(a)}if(!s[i])break}a")

//replace argument here to change output
var arr = f("apples appeal");

function g(ar) {
  var str = "";

  for (x = 0; x < 3; x++) {
    for (y = 0; y < 3; y++) {
      str += ar[y][x] || " ";
    }
    str += "\n";
  }
  console.log(str);
}

অবহেলিত এবং ব্যাখ্যা

f=(input)=>{
    //remove spaces
    input = input.replace(/ /g, "");

    //convert to array (so I can uppercase individual letters)
    input = input.split("");

    //position in input
    var pos = 0;

    //positions inside output
    var xPos = 1;
    var yPos = 1;

    //output container (3 rows, 3 columns)
    var arr = [[],[],[]];

    //counterclockwise indexes for x
    var xOrder = "00122210";

    //counterclockwise indexes for y
    //var yOrder = "12221000"
    var yOrder = xOrder * 100 + "";

    //loop infinitely (breaks when input[pos] is undefined)
    for (;;) {
        //loop around circle
        for (var i = 0; i < 8; i++) {
            if (!input[pos]) {
                break;
            }

            //if item already in array equal next item in input, set next item in input to caps before
            if (arr[xPos][yPos] == input[pos]) {
                input[pos] = input[pos].toUpperCase(); 
            }

            //write or overwrite in array with current from input
            arr[xPos][yPos] = input[pos];

            //increment last because we do not prime our loops
            xPos = xOrder[i];
            yPos = yOrder[i];
            pos++;
        }
        if(!input[pos]) {
            break;
        }
    }
    return arr;
}

1
a.split("")সমান [...a]; s=>{...;return a;}এর সমতুল্য s=>eval("...;a")(এবং ;এটি কম গল্ফযুক্ত সংস্করণে alচ্ছিক); সব সেমিকোলন একটি দ্বারা অনুসরণ }ঐচ্ছিক
কোনোর ও'ব্রায়েন

@ কনরোও ব্রায়েন আপনাকে ধন্যবাদ :)
স্টিফেন

আপনি পরীক্ষার ক্ষেত্রে কী আউটপুট পাবেন apples appeal? আমি দেখছি ppa eas aLe, যা অবশ্যই স্পষ্টভাবে সঠিক নয় কারণ এর lপাশের আর নেই p
পিটার টেলর

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

প্রথম পরীক্ষার ক্ষেত্রে যুক্তি দ্বারা আউটপুট হবে eppa apas lple s
পিটার টেলর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.