আমাকে একটি নম্বর সাপ বাতাস!


34

একটি ইনপুট পূর্ণসংখ্যা দেওয়া n, একটি সংখ্যা সাপ, যে, আঁকা একটি গ্রিড পরিমাপ n x nসংখ্যার গঠিত 1মাধ্যমে n^2যে নিম্নলিখিত ফ্যাশন একে অপরের কাছাকাছি ক্ষত করা হয়:

ইনপুট n = 3:

7 8 9
6 1 2
5 4 3

ইনপুট n = 4:

 7  8  9 10
 6  1  2 11
 5  4  3 12
16 15 14 13

ইনপুট n = 5:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

( প্রকল্প ইউলারের কাছ থেকে এই সমস্যার দ্বারা অনুপ্রাণিত ।)

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


4
উদাহরণ: 4? বা যে কোনও এমনকি সংখ্যা।
TheLethalCoder

1
আমরা কি ধরে নিতে পারি ইনপুটটি বিজোড়?
মিঃ এক্সকডার



1
প্রত্যুত্তরগুলিতে অনেকগুলি সমাধান এবং লিঙ্ক সহ perlmonks.com/?node_id=487200 দেখুন ।
বি_জোনাস

উত্তর:


43

এমএটিএল , 3 বাইট

1YL

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

অন্তর্নির্মিত ... ¯ \ _ (ツ) _ / ¯ ¯


31
কেন ... এটি একটি বিল্ট ইন কেন?
TheLethalCoder

2
আমি অনুমান করছি যে এটি "ম্যাজিক স্কোয়ার" স্টাফগুলির সাথে কিছু করার আছে?
ম্যাজিক অক্টোপাস উরন

8
@TheLethalCoder কারণ মতলব এটা ছিল এবং আমি এটা উপযোগী হতে হবে ( যা এটা হল প্রকৃতপক্ষে )
লুইস Mendo

18

সি #, 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 বাইট সংরক্ষণ করা হয়েছে।

স্কোয়ারগুলি কীভাবে তৈরি করা হয় তা নিম্নলিখিত পর্যবেক্ষণ দ্বারা এটি কাজ করে:

বর্গের চিত্র যেখানে এন = 5

আপনি দেখতে পাচ্ছেন প্রতিটি বিট পূর্ববর্তী স্কোয়ারে যুক্ত হয়েছে। এমনকি সংখ্যার জন্য আমরা যেখানে ছিলাম তার ডানদিকে চলেছি, বর্গ যেখানে ছিল তার চেয়ে নীচে এবং শেষে বাম দিকে 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;
    }
}

1
++i<=n;হয়ে উঠতে পারে n>++i, আর কিছুই দেখতে পাচ্ছি না, +1।
লিফডওয়েভেন

1
n%2<1?2:1থেকে 2-x%2? আমি এটি সি # তে পরীক্ষা করে দেখিনি, তবে সি এবং পাইথনে এটি কাজ করেছিল।
ফিলিপ নারদী বাটিস্তা

1
for(int o=n-2+n%2>>1,i=r[o,o]=1,c=2,w=o,h=o,j;n>i++;){var b=i%2<1; ....কিছুটা গল্ফ করলেন
ফিলিপ

@ ফিলিপনার্দিবাটিস্তা আশ্চর্যজনক কখনও এই দুজনের কথা ভাবেননি! ধন্যবাদ।
TheLethalCoder

1
var b=1-2*(i%2);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++;
ফিলিপ নারদী বাটিস্তা

15

ডায়ালগ এপিএল, 70 56 45 41 বাইট

,⍨⍴∘(⍋+\)×⍨↑(⌈2÷⍨×⍨),(+⍨⍴1,⊢,¯1,-)(/⍨)2/⍳

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

(+⍨⍴1,⊢,¯1,-)(/⍨)2/⍳

সূচকগুলির মধ্যে পার্থক্য গণনা করে; 1এবং ¯1ডান এবং বাম জন্য, ¯⍵এবং উপরে এবং নীচে জন্য।

1,⊢,¯1,-আসে যেমন 1 ⍵ ¯1 ¯⍵, +⍨⍴দৈর্ঘ্যের এই অ্যারের প্রসারিত ⍵×2, তাই চূড়ান্ত 2/⍳একটি পুনরাবৃত্তি গণনা প্রতি মাসের দ্বিতীয় উপাদান বেড়ে তাদের প্রতিটি পুনরায় রিপিট করতে পারেন:

      (1,⊢,¯1,-) 4
1 4 ¯1 ¯4
      (+⍨⍴1,⊢,¯1,-) 4
1 4 ¯1 ¯4 1 4 ¯1 ¯4
      (2/⍳) 4
1 1 2 2 3 3 4 4
      ((+⍨⍴1,⊢,¯1,-)(/⍨)2/⍳) 4
1 4 ¯1 ¯1 ¯4 ¯4 1 1 1 4 4 4 ¯1 ¯1 ¯1 ¯1 ¯4 ¯4 ¯4 ¯4

তারপর,

(⌈2÷⍨×⍨),

সর্পিল উপরের বাম উপাদান প্রস্তুত করে,

×⍨↑

এই দূরত্ব তালিকার প্রথম ⍵ 2 উপাদানগুলিকে সীমাবদ্ধ করুন ,

+\

संचयी যোগফল সম্পাদন করে,

⍵[i] = ⍵[⍵[i]]প্রতিটি উপাদান সূচকের সাথে মূল ম্যাট্রিক্স অনুবাদ করতে এবং শেষ পর্যন্ত সূচকগুলি গ্রেড করুন ( )

,⍨⍴

⍵×⍵ম্যাট্রিক্স হিসাবে আকার ।



9

সি, 321 307 295 284 283 282 বাইট

বাইট গল্ফ করার জন্য @ জাচারি টি এবং @ জনাথন ফ্রেঞ্চ উভয়কেই ধন্যবাদ!

#define F for(b=a;b--;)l
i,j,k,a,b,m;**l;f(n){n*=n;l=calloc(a=m=3*n,4);F[b]=calloc(m,4);for(l[i=j=n][j]=a=k=1;n>k;++a){F[i][++j]=++k;F[++i][j]=++k;++a;F[i][--j]=++k;F[--i][j]=++k;}for(i=0;i<m;++i,k&&puts(""))for(j=k=0;j<m;)(a=l[i][j++])>0&&a<=n&&printf("%*d ",(int)log10(n)+1,k=a);}

জিরোগুলির একটি দ্বি-মাত্রিক অ্যারে বরাদ্দ করে, তারপরে মাঝখান থেকে কোথাও এটি পূরণ করা শুরু করে। শেষ অবধি মানগুলি শূন্যের চেয়ে বড় তবে ইনপুটটির স্কোয়ারের চেয়ে ছোট বা সমান।

এটি অনলাইন চেষ্টা করুন!

বিন্যাসকৃত:

#define F for(b=a; b--;)l
i, j, k, a, b, m; **l;
f(n)
{
    n *= n;
    l = calloc(a=m=3*n, 4);

    F[b] = calloc(m, 4);

    for(l[i=j=n][j]=a=k=1; n>k; ++a)
    {
        F[i][++j] = ++k;
        F[++i][j] = ++k;
        ++a;

        F[i][--j] = ++k;
        F[--i][j] = ++k;
    }

    for(i=0; i<m; ++i, k&&puts(""))
        for(j=k=0; j<m;)
            (a=l[i][j++])>0 && a<=n && printf("%*d ", (int)log10(n)+1, k=a);
}

1
এটি প্রতিস্থাপন করা সম্ভব i,j,k,a,b,m;f(n){n*=n;int**l=calloc(a=m=3*n,4);সঙ্গে i,j,k,a,b,m,**l;f(n){n*=n;l=calloc(a=m=3*n,4);একটি বাইট সংরক্ষণ করতে?
জাচারা

1
আপনি প্রতিস্থাপন করতে সক্ষম হতে পারে k<=n;সঙ্গে n>k;একটি বাইট সংরক্ষণ করুন।
জোনাথন ফ্রেচ

6

পিএইচপি , 192 বাইট

for($l=strlen($q=($a=$argn)**2)+$d=1,$x=$y=$a/2^$w=0;$i++<$q;${yx[$w%2]}+=$d&1?:-1,$i%$d?:$d+=$w++&1)$e[$x-!($a&1)][$y]=sprintf("%$l".d,$i);for(;$k<$a;print join($o)."\n")ksort($o=&$e[+$k++]);

এটি অনলাইন চেষ্টা করুন!

একইভাবে অ্যারের পরিবর্তে একটি স্ট্রিং তৈরি করুন

পিএইচপি , 217 বাইট

for($l=strlen($q=($a=$argn)**2)+$d=1,$x=$y=($a/2^$w=0)-!($a&1),$s=str_pad(_,$q*$l);$i++<$q;${yx[$w%2]}+=$d&1?:-1,$i%$d?:$d+=$w++&1)$s=substr_replace($s,sprintf("%$l".d,$i),($x*$a+$y)*$l,$l);echo chunk_split($s,$a*$l);

এটি অনলাইন চেষ্টা করুন!


1
[-1,1][$d&1]->$d&1?:-1
তিতাস

@ টিটাস আপনাকে ধন্যবাদ আমি এটি দেখতে
পাইনি

1
এখানে আরও একটি বাইট: for(;$k<$a;print join($o)."\n")ksort($o=&$e[+$k++]);। আর একজন এক: "%$l".d। এবং আরও একটি: $x*$l*$a+$y*$l-> ($x*$a+$y)*$l
তিতাস

1
এবং আমি মনে করি যে দ্বিতীয় সংস্করণে আপনি $sএকটি প্যাডেড আন্ডারস্কোর (বা চিঠি বা অঙ্ক) থেকে আরম্ভ করতে পারেন ; চরিত্রটি ওভাররাইট করা হবে।
তিতাস

@ টিটাস আপনাকে ধন্যবাদ এবং আপনি .dনিজের নিজস্ব পদ্ধতিতে 2 বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন
জার্গ হালসারম্যান

6

পিএইচপি, 185 176 174 বাইট

for(;$n++<$argn**2;${xy[$m&1]}+=$m&2?-1:1,$k++<$p?:$p+=$m++%2+$k=0)$r[+$y][+$x]=$n;ksort($r);foreach($r as$o){ksort($o);foreach($o as$i)printf(" %".strlen($n).d,$i);echo"
";}

পাইপ হিসাবে চালান -nRবা এটি অনলাইনে পরীক্ষা করুন

ভাঙ্গন

for(;$n++<$argn**2;     # loop $n from 1 to N squared
    ${xy[$m&1]}+=$m&2?-1:1, # 2. move cursor
    $k++<$p?:               # 3. if $p+1 numbers have been printed in that direction:
        $p+=$m++%2+             # increment direction $m, every two directions increment $p
        $k=0                    # reset $k
)$r[+$y][+$x]=$n;           # 1. paint current number at current coordinates

ksort($r);              # sort grid by indexes
foreach($r as$o){       # and loop through it
    ksort($o);              # sort row by indexes
    foreach($o as$i)        # and loop through it
        printf(" %".strlen($n).d,$i);   # print formatted number
    echo"\n";               # print newline
}

6

এপিএল (ডায়ালগ ক্লাসিক) , 32 29 বাইট

1+×⍨-{⊖∘⌽⍣⍵⌽{⌽⍉,⌸⍵+≢⍵}⍣2⍣⍵⍪⍬}

এটি অনলাইন চেষ্টা করুন!

ব্যবহার ⎕io←1। 0-বাই -1 ম্যাট্রিক্স ( ⍪⍬) দিয়ে শুরু হয়। 2N বার ( ⍣2⍣⍵) ম্যাট্রিক্সের উচ্চতা ( ≢⍵) এর প্রতিটি উপাদানের সাথে যুক্ত করে, 1 2...heightতার ডানদিকে ( ,⌸) রেখে এবং ( ⌽⍉) ঘোরান । এটি শেষ হয়ে গেলে, ফলাফলের দিকনির্দেশনা সংশোধন করে ( ⊖∘⌽⍣⍵⌽) এবং এন 2 +1 ( 1+×⍨-) থেকে বিয়োগ করে সংখ্যাগুলি বিপরীত করে ।


5

গণিত, 177 বাইট tes

(n=#;i=j=Floor[(n+1)/2];c=1;d=0;v={{1,0},{0,-1},{-1,0},{0,1}};a=Table[j+n(i-1),{i,n},{j,n}];Do[Do[Do[a[[j,i]]=c++;{i,j}+=v[[d+1]], {k,l}];d=Mod[d+1,4],{p,0,1}],{l,n-1}];Grid@a)&

8
ওয়াইত, গণিতায় এর জন্য কোনও বিল্ট-ইন নেই?
মিঃ এক্সকোডার

5

সি ++, 245 228 বাইট

void f(){for(int i=0,j=-1,v,x,y,a,b;i<n;i++,j=-1,cout<<endl)while(++j<n){x=(a=n%2)?j:n-j-1;y=a?i:n-i-1;v=(b=y<n-x)?n-1-2*(x<y?x:y):2*(x>y?x:y)-n;v=v*v+(b?n-y-(y>x?x:y*2-x):y+1-n+(x>y?x:2*y-x));cout<<setw(log10(n*n)+1)<<v<<' ';}}

এটি অনলাইন চেষ্টা করুন!

ফাংশনটি এই যুক্তি প্রয়োগ করে তার x, y অবস্থানের উপর নির্ভর করে ম্যাট্রিক্সের প্রতিটি সংখ্যার মান গণনা করে এবং মুদ্রণ করে :

সাপের মান অনুসারে অবস্থানের উপর নির্ভর করে গণনা

ফর্ম্যাট সংস্করণ :

#include <iostream>
#include <iomanip>
#include <math.h>

using namespace std;

void f(int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            int value = 0;

            // Invert x and y when n is even
            int x = n % 2 == 0 ? n - j - 1 : j;
            int y = n % 2 == 0 ? n - i - 1 : i;
            if (y < (n - x))
            {
                // Left-top part of the matrix
                int padding = x < y ? x : y;
                value = n - 1 - padding * 2;
                value *= value;
                value += y >= x ? n - x - y : n + x - y - (y * 2);
            }
            else
            {
                // Right-bottom part of the matrix
                int padding = x > y ? n - x : n - y;
                value = n - padding * 2;
                value *= value;
                value += x > y ? y - padding + 1 : n + y - x - (padding * 2) + 1;
            }

            cout << setw(log10(n * n) + 1);
            cout << value << ' ';
        }

        cout << endl;
    }
}

int main()
{
    int n;
    while (cin >> n && n > 0)
    {
        f(n);
        cout << endl;
    }
}

5

পাইথন 3 , 249 247 বাইট

আমি একটি 2 ডি অ্যারে আরম্ভ করি এবং প্রারম্ভিক পয়েন্টটি পাই, যা বিজোড় n বা অফসেট (-1, -1) এমনকি n এর কেন্দ্র, তারপরে বর্তমান 'রিং' নম্বর দিয়ে পূরণ / কার্সার ধরণটি স্কেল করি। আমার মনে হচ্ছে আমি দিকনির্দেশগুলি ব্যাখ্যা করার জন্য একটি কৌশল মিস করছি তবে আমি সস্তা কিছু নিয়ে আসিনি।

def f(n):
 M=[n*[0]for a in range(n)]
 x=y=n//2-1+n%2
 M[x][y]=i=s=1
 while 1:
  t=s*2
  for d in'R'+'D'*(t-1)+'L'*t+'U'*t+'R'*t:
   if i==n*n:print(*M,sep='\n');return
   v=[1,-1][d in'LU']
   if d in'UD':x+=v
   else:y+=v
   M[x][y]=i=i+1
  s+=1

এটি অনলাইন চেষ্টা করুন!

-২ ধন্যবাদ জাচারি টি!


আপনি কিভাবে আপনার বাইট গণনা? ট্যাব, স্পেস এবং নিউলাইনগুলিও গণনা করে
ফিলিপ নারদী বাটিস্তা

আমি প্রতি "with n এবং \ t" "এর সাথে প্রতিস্থাপন করেছি এবং একটি লেন নিয়েছি ()। আমি কেবল উপরের অনুলিপি করে এটিকে পুনরায় পাঠিয়েছি যাতে নিশ্চিত হয়ে যায় যে আমি কোনও পরিবর্তন করি নি এবং পুনরায় গণনা করতে ভুলে যাই তবে আমি একই নম্বর পেয়েছি। আমি কি কিছু রেখে গেলাম?
নচতুরাম

আমি গণনা করছি \tএবং \n1 বাইট হিসাবে এবং এখনও 249 বাইট পাচ্ছি
ফিলিপ নারদী বাটিস্তা

e: I আমার আরও ভাল / সহজ পদ্ধতি ব্যবহার করা উচিত? এগুলি সর্বদা আমার কাছে len("def f(n): M=[n*[0]for a in range(n)] x=y=n//2-(n%2<1) M[x][y]=i=s=1 while 1: t=s*2 for d in'R'+'D'*(t-1)+'L'*t+'U'*t+'R'*t: if i==n*n:print(*M,sep='\n');return v=[1,-1][d in'LU'] if d in'UD':x+=v else:y+=v M[x][y]=i=i+1 s+=1") 223
পরিবর্তিতভাবে

সাধারণত পাঠ্য সম্পাদকরা আপনাকে কতগুলি অক্ষর নির্বাচন করা হয়েছে তা বলুন, তাই CTRL + A এবং এটি যা পড়বে তা পড়ুন
ফিলিপ নারদী বাটিস্তা

5

ওল্ফ্রাম ভাষা (গণিত) , (...) 83 বাইট

বাইট UTF8 হওয়া মাপা, \[LeftFloor]( ) এবং \[RightFloor]( ) এর প্রতিটি বাইট 3 টি বাইট হিসাবেগণিতের কোনও বিশেষ বাইট চরিত্র সেট নেই।

Table[Max[4x^2-Max[x+y,3x-y],4y
y-{x+y,3y-x}]+1,{y,b+1-#,b=⌊#/2⌋},{x,b+1-#,b}]&

এটি অনলাইন চেষ্টা করুন!


প্রতিটি 4 টির জন্য বন্ধ ফর্ম ব্যবহার করে, তারপরে কাঙ্ক্ষিত ফলাফল পেতে সর্বাধিক সতর্কতার সাথে লাগে।

পূর্ণসংখ্যার 2D অ্যারে প্রদান করে। এটি অনুমোদিত কিনা আমি নিশ্চিত নই, এবং যদিও এটির মন্তব্যে জিজ্ঞাসা করা হয়েছে , ওপি কোনও উত্তর দেয়নি।


4

ক্লোজার, 206 বাইট

(defmacro F[s]`(if(~'r(+ ~'p ~'v ~s))~'v ~s))
#(loop[i 1 p(*(quot(dec %)2)(inc %))v 1 r{}](if(<(* % %)i)(partition %(map r(range i)))(recur(inc i)(+ p v)({1(F %)-1(F(- %))%(F -1)(- %)(F 1)}v)(assoc r p i))))

আমি অনুমান করি এটি একটি শালীন সূচনা, একটি হ্যাশ-ম্যাপের ক্রমক্রমে বোর্ড তৈরি করে এবং তারপরে এটি n x nতালিকাতে বিভক্ত করে । এটি defmacroবেশ দীর্ঘ হওয়া সত্ত্বেও কোডটি এর বাইরেও তার চেয়ে কম। এটি বর্ণনা করার জন্য আরও একটি সুসিন্ট বাক্য গঠন আছে?

বেশিরভাগ বাইট শুরুর পয়েন্ট গণনা করে এবং পরবর্তী গতিবেগের চেহারা আপ যুক্তি তৈরি করে v। সম্ভবত একটি নেস্টেড vecভাল হতে পারে, কিন্তু তারপরে আপনার নজর রাখতে দুটি সূচক এবং বেগ পেয়েছেন।


3

জে , 41 বাইট

(]|.@|:@[&0](|.@|:@,.*/@$+#\)@]^:[1:)2*<:

এটি অনলাইন চেষ্টা করুন!

এনজিএন এর এপিএল জমা দেওয়ার মতো একই কাজ করে তবে 1-বাই -1 ম্যাট্রিক্স দিয়ে শুরু হয় এবং 2 × N − 2 বার পুনরাবৃত্তি করে।


নিজেকে হারাতে আপনি কি আমার বিকল্প পদ্ধতির উন্নতি করতে পারেন (এখন 41-এ বাঁধা)? আমি এটিকে এ পর্যন্ত আমার সেরা গল্ফ দিয়েছি, তবে আমি সন্দেহ করি যে কমপক্ষে আরও কয়েকটি বাইট বন্ধ হয়ে যেতে পারে।
জোনাহ

1

পাইথন 165 (বা 144)

from pylab import *
def S(n):
 a=r_[[[1]]];r=rot90;i=2
 while any(array(a.shape)<n):
  q=a.shape[0];a=vstack([range(i,i+q),r(a)]);i+=q
 if n%2==0:a=r(r(a))
 print(a)

এটি একটি অদ্ভুত অ্যারে তৈরি করে, তারপরে এটি ঘোরায় এবং সঠিক আকারটি না পৌঁছানো পর্যন্ত একটি দিক যুক্ত করে। একই শুরুর পয়েন্টটি সমান এবং বিজোড় সংখ্যার জন্য ব্যবহার করা দরকার কিনা তা প্রশ্নটি নির্দিষ্ট করে দেয় না, যদি এটি না হয় তবে if n%2==0:a=r(r(a))21 বাইট সংরক্ষণ করে লাইনটি সরানো যেতে পারে।


1
এটি পাইথন নয়, এটি পাইথন + নম্পূর্ণ
এএসসিআইআই-

@ এএসসিআইআই-কেবল কোথাও গ্রহণযোগ্য ভাষার নামের একটি মাস্টার তালিকা রয়েছে? এটি পুরোপুরি বৈধ পাইথন।
ব্যবহারকারী2699

এটি একটি লাইব্রেরি ব্যবহার করে, তাই আপনার পাশাপাশি গ্রন্থাগারের নামও অন্তর্ভুক্ত করা দরকার ... অনুমোদিত ভাষাগুলির জন্য, আপনি যে চালাতে পারবেন এমন সর্বজনীনভাবে উপলব্ধ বাস্তবায়নের কোনও ভাষা অনুমোদিত
এএসসিআইআই-

@ এএসসিআইআই-কেবল কোথায় লেখা আছে? আমি বেশিরভাগ অজগর উত্তর দিয়ে এটি দেখিনি।
ব্যবহারকারী2699

হ্যাঁ, কারণ তাদের বেশিরভাগ অদ্ভুত ব্যবহার করেন না ... এবং stdlib কোনও বাহ্যিক গ্রন্থাগার হিসাবে গণনা করে না
ASCII- কেবল

0

জে , 41 বাইট

,~$[:/:[:+/\_1|.1&,(]##@]$[,-@[)2}:@#1+i.

মানক বিন্যাস

,~ $ [: /: [: +/\ _1 |. 1&, (] # #@] $ [ , -@[) 2 }:@# 1 + i.

এই অ্যাপ্রোচটি প্লে উইথ জে ভলিউমের উপর ভিত্তি করে তৈরি করা হয়েছে ( উরিয়েলের এপিএল অনুরূপ কৌশল ব্যবহার করে)।

আমি মনে করি এটি দ্বিতীয় জে জবাবকে ন্যায়সঙ্গত করার পক্ষে অপ্রত্যাশিত এবং মার্জিত,

মূলত, আমরা পদ্ধতিগত বা জ্যামিতিক কিছু করি না। পরিবর্তে, আমরা গাণিতিকভাবে একটি সহজ ক্রম তৈরি করি যা স্ক্যানের সংমিশ্রণ এবং গ্রেড আপ হয়ে গেলে বাম থেকে ডানে, উপরে থেকে নীচে বর্ধিত সংখ্যার সঠিক ক্রম দেয়। তারপরে আমরা এটিকে ম্যাট্রিক্সে রূপ দেই এবং সম্পন্ন হব।

সময় অনুমতি পেলে আমি আরও বিশদ ব্যাখ্যা যুক্ত করব, তবে সংযুক্ত নিবন্ধটি গভীরভাবে এটি ব্যাখ্যা করবে।

এটি অনলাইন চেষ্টা করুন!


0

পাইথন 3 (স্ট্যাকলেস) , 192 188 179 150 বাইট

lambda n:[list(map(v,list(range(t-n,t)),[y]*n))for t in[1+n//2]for y in range(n-t,-t,-1)]
v=lambda x,y,r=0:y>=abs(x)and(3-2*r+4*y)*y+x+1or v(y,-x,r+1)

এটি অনলাইন চেষ্টা করুন!

এখানে আলগোরিদিমটি গ্রিডে প্রতিটি স্থানাঙ্কের জন্য একটি ফ্যাসার গঠন করে এবং তারপরে 90 ডিগ্রিটিকে ঘড়ির কাঁটার দিকে ঘোরানো হয় যতক্ষণ না ফাসার উপরের কর্ণগুলির মধ্যে থাকে। স্থানাঙ্ক এবং ঘড়ির কাঁটার ঘূর্ণনের সংখ্যার ভিত্তিতে মান গণনা করতে একটি সাধারণ সূত্র ব্যবহার করা যেতে পারে:

(2Y+ +1)2-(Y-এক্স)-2YR

90-ডিগ্রি ফ্যাসার রোটেশন থেকে 4-বাইট সংরক্ষণ করা জটিল সংখ্যা ছাড়াই সহজেই করা যায়


0

আর , 183 বাইট

x=scan()
b=t(d<-1)
while(2*x-1-d){m=max(b)
y=(m+1):(m+sum(1:dim(b)[2]|1))
z=d%%4
if(z==1)b=cbind(b,y)
if(z==2)b=rbind(b,rev(y))
if(z==3)b=cbind(rev(y),b)
if(z==0)b=rbind(y,b)
d=d+1}
b

এটি অনলাইন চেষ্টা করুন!

আউটপুট একটি ম্যাট্রিক্স সাপ (বা সাপের ম্যাট্রিক্স, যাই হোক না কেন)। এটি সম্ভবত সবচেয়ে দক্ষ পদ্ধতি নয় এবং সম্ভবত এটি গল্ফ করা যেতে পারে তবে আমি ভেবেছিলাম এটি প্রদর্শন করার মতো worth আমি আসলে এটার জন্য বরং গর্বিত!

পদ্ধতিটি ভিতরে থেকে বাইরে থেকে ম্যাট্রিক্স তৈরি করে, সর্বদা সংযোজনের আগে ম্যাট্রিক্সের কলামগুলির সংখ্যার সমতুল্য সংখ্যার অতিরিক্ত সংখ্যার যোগ করে। নীচের প্যাটার্নটি হয় কলাম দ্বারা বা সারি দ্বারা বাঁধাই করা হয়, আবার কিছু মানকে বিপরীত করে যাতে তারা সঠিক ক্রমে যুক্ত হয়।

193 বাইট

সঠিক উপরে হিসাবে একই, কিন্তু চূড়ান্ত bহয়

matrix(b,x)

এটি অনলাইন চেষ্টা করুন!

যা সামান্য ক্লিনার আউটপুট দেয় তবে আমি আউটপুট সম্পর্কিত কোনও বিশেষ মানদণ্ড দেখতে পাইনি, তাই আমি ভুল না হলে প্রথম উত্তরটি কাজ করা উচিত।

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