সি #, 203 202 196 193 178 বাইট
n=>{var r=new int[n,n];for(int o=n-2+n%2>>1,i=r[o,o]=1,c=2,w=o,h=o,b=1-2*(i%2),j;n>i++;){r[h,w+=b]=c++;for(j=0;j<i-1;++j)r[h+=b,w]=c++;for(j=0;j<i-1;++j)r[h,w-=b]=c++;}return r;}
@ স্টেফ্যানডেলপোর্টকে একটি বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে।
ফিলিপনার্ডিবাটিস্টাকে 22 বাইট সংরক্ষণ করা হয়েছে।
স্কোয়ারগুলি কীভাবে তৈরি করা হয় তা নিম্নলিখিত পর্যবেক্ষণ দ্বারা এটি কাজ করে:

আপনি দেখতে পাচ্ছেন প্রতিটি বিট পূর্ববর্তী স্কোয়ারে যুক্ত হয়েছে। এমনকি সংখ্যার জন্য আমরা যেখানে ছিলাম তার ডানদিকে চলেছি, বর্গ যেখানে ছিল তার চেয়ে নীচে এবং শেষে বাম দিকে left বিজোড় সংখ্যাগুলি মূলত বিপরীত হয়, আমরা একটি বামে চলে যাই, যতক্ষণ না বর্তমান উচ্চতার উপরে একটি ছিল এবং তারপরে ডান প্রান্তে।
সম্পূর্ণ / ফর্ম্যাট সংস্করণ:
using System;
using System.Linq;
class P
{
static void Main()
{
Func<int, int[,]> f = n =>
{
var r = new int[n, n];
for (int o = n - 2 + n % 2 >> 1, i = r[o, o] = 1, c = 2, w = o, h = o, b = 1 - 2 * (i % 2), j; n > i++;)
{
r[h, w += b] = c++;
for (j = 0; j < i - 1; ++j)
r[h += b, w] = c++;
for (j = 0; j < i - 1; ++j)
r[h, w -= b] = c++;
}
return r;
};
Console.WriteLine(String.Join("\n", f(3).ToJagged().Select(line => String.Join(" ", line.Select(l => (l + "").PadLeft(2))))) + "\n");
Console.WriteLine(String.Join("\n", f(4).ToJagged().Select(line => String.Join(" ", line.Select(l => (l + "").PadLeft(2))))) + "\n");
Console.WriteLine(String.Join("\n", f(5).ToJagged().Select(line => String.Join(" ", line.Select(l => (l + "").PadLeft(2))))) + "\n");
Console.ReadLine();
}
}
public static class ArrayExtensions
{
public static T[][] ToJagged<T>(this T[,] value)
{
T[][] result = new T[value.GetLength(0)][];
for (int i = 0; i < value.GetLength(0); ++i)
result[i] = new T[value.GetLength(1)];
for (int i = 0; i < value.GetLength(0); ++i)
for (int j = 0; j < value.GetLength(1); ++j)
result[i][j] = value[i, j];
return result;
}
}
4? বা যে কোনও এমনকি সংখ্যা।