জাভাস্ক্রিপ্ট, 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;
}