जावास्क्रिप्ट, 225 221 212 बाइट्स
-9 बाइट्स कॉनर ओ'ब्रायन को धन्यवाद
कृपया ध्यान दें कि आपके पाठ एक दूसरे के साथ संघर्ष करते हैं। आपका पहला परीक्षण मामला सर्पिल के बीच में शुरू होता है। आपका दूसरा परीक्षण मामला सर्पिल के शीर्ष मध्य में शुरू होता है। मैं आपके पहले परीक्षण मामले के साथ गया था, क्योंकि यह पहला ऐसा था जिसे मैंने देखा था। आपने एक वर्ष में अपना प्रश्न संपादित नहीं किया है, इसलिए अनुमान के लिए खेद है।
पहला टेस्ट केस:
9<-8<-7
| |
2<-1 6
| |
3->4->5
दूसरा टेस्ट केस:
2<-1<-6
| |
3->4->5
| |
7->8->9
बिना किसी और विज्ञापन के, यहाँ गोल्फ कोड है। मुझे शत-प्रतिशत यकीन है कि अगर कम्युनिटी चीप करती है तो इसमें काफी कटौती की जा सकती है। यह एक मल्टीलाइन सरणी देता है।
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")
Prettification स्निपेट (कंसोल के लिए एक मल्टीलाइन स्ट्रिंग प्रिंट करता है)। कृपया मेरे टेस्ट केस # 2 और ओपी के टेस्ट केस # 2 में भिन्न नोट करें (ऊपर देखें कि क्या आपके पास पहले से नहीं है):
(यदि स्निपेट के साथ अधिक अनुभव वाला कोई व्यक्ति HTML इनपुट में इसे ठीक करना चाहता है तो इसे संपादित करने के लिए स्वतंत्र महसूस करें, मुझे बिस्तर पर जाने की आवश्यकता है)।
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;
}