একটি পিরামিডাল ম্যাট্রিক্স তৈরি করুন


23

পিরামিডাল ম্যাট্রিক্স একটি বর্গ ম্যাট্রিক্স যেখানে নীচের দুটি ম্যাট্রিকের মতো কেন্দ্রের পয়েন্ট থেকে সমস্ত সংখ্যা বৃদ্ধি বা হ্রাস পায়:

1  1  1  1  1
1  2  2  2  1
1  2  3  2  1
1  2  2  2  1
1  1  1  1  1

বা:

3  3  3  3  3
3  2  2  2  3
3  2  1  2  3
3  2  2  2  3
3  3  3  3  3

একটি নন-জিরো পূর্ণসংখ্যা দেওয়া n, পিরামিডাকৃতির ম্যাট্রিক্স তৈরি যেখানে নম্বর থেকে যায় 1থেকে nঅর্ডার বেড়ে যাওয়ার ক্ষেত্রে হয় (যদি n <0), অথবা হ্রাস অর্ডার (যদি n> 0) কেন্দ্র থেকে। যদি nসমান হয় তবে 4 টি কেন্দ্রের সংখ্যা থাকবে (উদাহরণগুলি দেখুন)।

যথারীতি:

  • .চ্ছিক ইনপুট এবং আউটপুট ফর্ম্যাট
    • স্পেস, ডিলিমিটার ইত্যাদি সংখ্যা Numberচ্ছিক

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

1
1

-1
1

5
1  1  1  1  1  1  1  1  1
1  2  2  2  2  2  2  2  1
1  2  3  3  3  3  3  2  1
1  2  3  4  4  4  3  2  1
1  2  3  4  5  4  3  2  1
1  2  3  4  4  4  3  2  1
1  2  3  3  3  3  3  2  1
1  2  2  2  2  2  2  2  1
1  1  1  1  1  1  1  1  1

-5
5  5  5  5  5  5  5  5  5
5  4  4  4  4  4  4  4  5
5  4  3  3  3  3  3  4  5
5  4  3  2  2  2  3  4  5
5  4  3  2  1  2  3  4  5
5  4  3  2  2  2  3  4  5
5  4  3  3  3  3  3  4  5
5  4  4  4  4  4  4  4  5
5  5  5  5  5  5  5  5  5

2
1  1  1  1
1  2  2  1
1  2  2  1
1  1  1  1

-2
2  2  2  2
2  1  1  2
2  1  1  2
2  2  2  2

-4
4  4  4  4  4  4  4  4
4  3  3  3  3  3  3  4
4  3  2  2  2  2  3  4
4  3  2  1  1  2  3  4
4  3  2  1  1  2  3  4
4  3  2  2  2  2  3  4
4  3  3  3  3  3  3  4
4  4  4  4  4  4  4  4

10
কেন সমতুল্য কেস বিজোড় ক্ষেত্রে থেকে পৃথক? ম্যাট্রিকরা সবাই ঠিক একই ধাঁচ অনুসরণ করতে পারে না এমন কোনও কারণ নেই।
গ্রেগ মার্টিন

2
কারণ ইনপুটটি পাশের প্রাচীরের দৈর্ঘ্য হওয়ার কথা ছিল, এক্ষেত্রে বিজোড় এবং এমনকি এর মধ্যে পার্থক্য রয়েছে। আমি পরিবর্তে সর্বাধিক মান যাব সিদ্ধান্ত নিয়েছি, তবে সেখানে বিজোড় এবং এমনকি পার্থক্য রেখেছি। এটি অদ্ভুত বলে মনে হতে পারে, এবং এটি একটি ভাল ব্যাখ্যা নাও হতে পারে তবে এটি কেন তারতম্য তা এর ব্যাখ্যা । :-)
স্টিভি গ্রিফিন

2
আমরা কি ধরে নিতে পারি -10 < n < 10?
তিতাস

2
এটি যথাযথ বর্গক্ষেত্রের মতো না দেখলে এটি ঠিক আছে , যতক্ষণ না এটি সংখ্যায় বলা হয়। যদি 10s এর সাথে সারিগুলি আরও বিস্তৃত হয় যে কয়েকটি 10s রয়েছে তারা ঠিক আছে ...
স্টিভি গ্রিফিন

উত্তর:


5

জেলি , 18 17 বাইট

|1ŒḄfR«þ`
AÇạẋ¡CG

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

|1ŒḄfR«þ`  Helper link. Argument: k (positive integer)

|1         Take the bitwise OR with 1. This increments k if it is even.
  ŒḄ       Bounce; yield [1, 2, ..., k | 1, ..., 2, 1].
    fR     Filter range; remove elements not in [1, ..., k] from the array.
           This results in [1, 2, ..., k, ..., 2, 1] if k is odd and in
           [1, 2, ..., k, k, ..., 2, 1] if k is even.
        `  Pass the last return value as left and right argument to:
      «þ     Minimum table; take the minimum of each pair of elements in the
             generated array, returning a 2D array.


AÇạẋ¡CG      Main link. Argument: n

A            Take the absolute value of n.
 Ç           Call the helper link on the result.
     C       Complement; yield 1 - n.
    ¡        Conditional application:
   ẋ           If repeating the return value of Ç 1 - n times results in a non-
               empty array, i.e., if n < 1:
  ạ              Take the absolute differences of the generated integers and 1 - n.
      G      Grid; join columns by spaces, rows by linefeeds.

7

এক্সেল: 126 বাইট

=MAX(MIN(MIN(CELL("row",RC)-1,CELL("col",RC)-1),MIN(((ABS(R1C1)-1)*2+3)-CELL("row",RC),((ABS(R1C1)-1)*2+3)-CELL("col",RC))),0)

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

দ্রষ্টব্য: এই উত্তরটি আর 1 সি 1 নোটেশন ব্যবহার করে। আপনি যদি নিজে চেষ্টা করে যাচ্ছেন এক্সেল বিকল্পগুলিতে আপনাকে এটি চালু করতে হবে।

প্রদত্ত সূত্রটি (২,২) এর বাইরে প্রতিটি কক্ষে উপস্থিত থাকতে হবে। আপনার কাঙ্ক্ষিত পিরামিড আকারটি (1,1) রাখুন।

সূত্রটির দ্রুত স্ক্রিন-ক্যাপ কার্যকর হচ্ছে:
এখানে চিত্র বর্ণনা লিখুন

শর্তসাপেক্ষ বিন্যাস সহ কিছু মজার অতিরিক্ত চিত্র এখানে !

* বর্তমানে এটি আপডেট করতে খুব দীর্ঘ সময় লাগে।


এটি নেতিবাচক কেসগুলি বা এমনকি কেসগুলি সঠিকভাবে পরিচালনা করে না। এছাড়াও আপনি কোডটি ছোট করতে পারেন =MAX(MIN(MIN(ROW()-1,COLUMN()-1),MIN(((ABS(A1)-1)*2+3)-ROW(),((ABS(A1)-1)*2+3)-COLUMN())),0)যা 92 বাইট হয়। এটি এখনও কেসগুলি পরিচালনা করে না এবং সেল সূত্রটি লক না থাকায় সূত্রটি ধরে আনা যায় না।
gtwebb

1
আরও গল্ফিং একই সমস্যা। =MEDIAN(MIN(ROW()-1,COLUMN()-1),ABS(A1)*2+1-MAX(ROW(),COLUMN()),0)
gtwebb

@gtwebb আমাকে বলার জন্য ধন্যবাদ। আমি ঠিক করতে হবে

-1। এটি কাজ করে না। এটি নেতিবাচক ইনপুট পরিচালনা করে না। এটি এমনকি ইনপুট পরিচালনা করে না। আপনি যদি প্রতিটি প্রযোজ্য কক্ষে এই সূত্রটি Rangeরাখছেন তবে আপনার প্রয়োজন হয় 126 বাইটের চেয়ে অনেক বেশি হ্যাকের প্রয়োজন।
অ্যাডমবর্কবার্ক

7

পাইথন 2, 109 99 98

n=input()
r=range(1,abs(n)+1)
l=r+r[~n|-2::-1]
for j in l:print[abs((n<0)*~-n+min(i,j))for i in l]

তালিকা তৈরি করুন

l = [1,2,3,4,5,4,3,2,1]

এবং এটি একটু খেলা।


সম্পাদনা করুন: দুটি বাইটের জন্য তালিকা + থেক্স লিন তৈরির নতুন উপায়


If n is even, then there will be 4 center numbers
রড

@ রড নো কি করে আপনি তাই মনে?
পাচোলিক

3
এটি নিয়মের একটি
রড

@ রড ওহ মাত্র কয়েক মিনিট আগে সম্পাদনা করা হয়েছে।
পাচোলিক

2
এটি নতুন নয়, কেবল হাইলাইট করা হয়নি: সি
রড

6

এমএটিএল , 26 24 বাইট

oXyG|to-:"TTYaQ]G0<?G+q|

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন (পরীক্ষার স্যুট হিসাবে পরিবেশন করতে কিছুটা সংশোধিত কোড)।

ব্যাখ্যা

কোডটি ইতিবাচক ইনপুট ধরে ধরে আউটপুট অ্যারে তৈরি করে n। অ্যারেটি 1বিজোড় ইনপুট হিসাবে বা এমনকি ইনপুটটির জন্য খালি অ্যারে হিসাবে সূচিত হয় (এটি ইনপুটটির সমতুল্যের সমান আকারের সাথে একটি পরিচয় ম্যাট্রিক্স হিসাবে তৈরি করা হয়)। তারপরে নীচেরগুলি nএমনকি ইনপুটগুলির জন্য বারবার এবং n-1বিজোড় ইনপুটটির জন্য বারবার করা হয় : রয়েছে এমন ফ্রেমযুক্ত অ্যারেটি প্রসারিত 0করুন 1এবং সমস্ত উপাদানগুলিতে যুক্ত করুন।

উদাহরণস্বরূপ, ইনপুট জন্য পদক্ষেপগুলি হ'ল n:

  • প্রাথমিক অ্যারে:

    1
    
  • ফ্রেম সহ প্রসারিত করুন:

    0 0 0
    0 1 0
    0 0 0
    
  • যুক্ত করুন 1:

    1 1 1
    1 2 1
    1 1 1
    
  • ফ্রেম সহ প্রসারিত করুন:

    0 0 0 0 0
    0 1 1 1 0
    0 1 2 1 0
    0 1 1 1 0
    0 0 0 0 0
    
  • যুক্ত করুন 1:

    1 1 1 1 1
    1 2 2 2 1
    1 2 3 2 1
    1 2 2 2 1
    1 1 1 1 1
    

এটি ইতিবাচক ইনপুট জন্য সঠিক আউটপুট দেয়। যদি ইনপুটটি নেতিবাচক হয় তবে অ্যারেটি ইনপুট বিয়োগ যোগ করে 1এবং পরম মান গ্রহণ করে সংশোধন করা দরকার :

    3 3 3 3 3
    3 2 2 2 3
    3 2 1 2 3
    3 2 2 2 3
    3 3 3 3 3

আপনি এমএটিএল অনলাইনে অ্যারে ক্রমবর্ধমান (মধ্যবর্তী পদক্ষেপগুলি দেখানোর জন্য সংশোধিত কোড) দেখতে পারেন ! দোভাষী এখনও একটি বিটা। যদি এটি কাজ না করে তবে "রান" টিপুন বা পৃষ্ঠাটি পুনরায় লোড করুন।

মন্তব্য করা কোড

o        % Take input implicitly and push 0 if even or 1 if odd
Xy       % Identity matrix of that size. Gives either 1 or empty array
G|       % Absolute value of input
to-      % Subtract 1 if odd
:"       % For loop: repeat that many times
  TTYa   %   Add a frame of zeros in the two dimensions
  Q      %   Add 1 to all elements
]        % End for
G        % Push input again
0>       % is it negative?
?        % If so
  G      %   Push input again
  +      %   Add
  q      %   Subtract 1
  |      %   Absolute value
         % End if implicitly
         % Display implicitly

আমি দেখছি আপনি অ্যানিমেশন প্রশ্ন থেকে কোডটি পুনরায় ব্যবহার করেছেন। অসাধারণ! মজার অংশটি হ'ল, এই কোডটি এখনও আপনার প্রশ্নে জিতবে, যদিও এটি আপনার অন্যান্য সংস্করণের চেয়ে দীর্ঘতর;))
ম্যাজিক অক্টোপাস উরান

1
@ কারাসোকম্পুটিং হ্যাঁ, এটি একই: সদৃশ, প্রদর্শন, 1 বিরতি 1 সেকেন্ড, পরিষ্কার আউটপুট :-)
লুইস মেন্ডো

এছাড়াও, কেন তা নিশ্চিত নয় তবে ১৪ এর উপরে যে কোনও ইনপুট ১৪ এ থামবে that এটি বাতিল করুন, এটি অনলাইন কনসোলের "অপারেশন সময়সীমা শেষ" এর একটি সীমাবদ্ধতা।
ম্যাজিক অক্টোপাস উরান

@ কারাসোকম্পুটিং ত্রুটিটি বলে "অপারেশন সময় শেষ"। আমি অনুমান করি যে দোভাষীর পক্ষে এটি খুব দীর্ঘ সময় নেয়। সেকেন্ড বলতে বিরতি হ্রাস করার.2
লুইস মেন্ডো

@ কারাসোকম্পুটিং হ্যাঁ এটি অনলাইন অনুবাদকের সময়সীমা শেষ out আমরা বর্তমানে 30 সেকেন্ডে চাকরি সীমাবদ্ধ করছি। লুইস যেমন পরামর্শ দিয়েছেন, আপনি বিরতি দেওয়ার সময়টি হ্রাস করতে পারবেন
স্যুভার

3

পাইথন ২.7: 123 122 120 বাইট

প্রোবগুলি এখনও কয়েকটি বাইট সংরক্ষণ করতে পারে ...

from numpy import*
n=input()
N=abs(n)
e=N*2-N%2
a=ones([e,e])
for i in range(N):a[i:e-i,i:e-i]=(i+1)*(n>0)or-n-i
print a

edit1: N=abs(n)1 বাইট সংরক্ষণ করতে

edit2: (i+1)*(n>0)or-n-i2 বাইট সংরক্ষণ করতে


3

হাস্কেল, 119 113 110 104 102 101 বাইট

f x|(h,t)<-splitAt(mod x 2)$[x,x-1..1]++[1.. -x]=foldl(\m n->(n#)<$>(n<$m)#m)[[y]|y<-h]t
x#y=x:y++[x]

পূর্ণসংখ্যার তালিকার তালিকা হিসাবে ম্যাট্রিক্স প্রদান করে, উদাহরণস্বরূপ: f 2-> [[1,1,1,1],[1,2,2,1],[1,2,2,1],[1,1,1,1]]

কিভাবে এটা কাজ করে:

            [x,x-1..1]++[1.. -x]      -- make list from x down to 1 followed by
                                      -- 1 to (-x). One of the sublists will be
                                      -- empty. The resulting list contains the
                                      -- numbers of the pyramid from inside to out.
   (h,t)<-splitAt(mod x 2)            -- bind h to the first element if x is odd
                                      -- or to the empty list if x is even
                                      -- bind t to the rest (tail or full list)

foldl (     ) [[y]|y<-h] t            -- fold the following function into t with a
                                      -- starting value of [] if x is even or
                                      -- [[h]] if x is odd

   \m n ->                            -- the current matrix m with the next number
                                      -- n is transformed into a new matrix:

               (n#)<$>(n<$m)#m        -- prepend and append a n to 
                                      -- m prepended and append by a line of n's

x#y=x:y++[x]                          -- helper function to prepend and append an
                                      -- element x to a list y

2

পার্ল, 175 বাইট

জন্য 1 বাইট অন্তর্ভুক্ত -p

($t,$v,$w)=($_,(abs)x2);$k=$_.$k for 1..$v;map{$r.=$_ for(@v=1..$_-1),$_ x(2*$v---$w%2),reverse@v;$r.=$/}1..$v;$_=$r.~~reverse$r;eval"y/1-$w/$k/"if$t<0;$w%2&&s/

.*//||s;

;

(এখানে একটি ট্রিলিং নিউলাইন রয়েছে যা মার্কডাউন দিয়ে কীভাবে প্রদর্শন করতে হয় তা আমি জানি না, তবে আপনার এটি প্রয়োজন)।

চাহিদা -pসেইসাথে -M5.010বা -Eচালানোর জন্য:

perl -pE '($t,$v,$w)=($_,(abs)x2);$k=$_.$k for 1..$v;map{$r.=$_ for(@v=1..$_-1),$_ x(2*$v---$w%2),reverse@v;$r.=$/}1..$v;$_=$r.~~reverse$r;eval"y/1-$w/$k/"if$t<0;$w%2&&s/

.*//||s;

;
' <<< 5

অভিশাপ, এটি অনেক দীর্ঘ ... আমার কিছু সময় থাকার সময় আমি অন্য কিছু পদ্ধতির চেষ্টা করব।


আপনি কেন ব্যবহার করবেন eval?
তিতাস

@ টিটাস কারণ বিভক্ত y///হয় না, তাই ডাবল উদ্ধৃতিগুলি ইন্টারপোল্ট করতে $wএবং $kতারপরে evalকার্যকর করতে হয় y///
দাদা

2

পাইথন 2, 109 বাইট

n=input()
a=abs(n)
s=a*2-a%2
r=range(s)
for y in r:print[(min,max)[n<0](x+1,s-x,y+1,s-y)-(n<0)*s/2for x in r]

2

জে, 29 26 বাইট

1+**[:<./~**i.,2&|1&}.i.@-

ব্যবহার

   f =: 1+**[:<./~**i.,2&|1&}.i.@-
   f 1
1
   f _1
1
   f 2
1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1
   f _2
2 2 2 2
2 1 1 2
2 1 1 2
2 2 2 2
   f 3
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
   f _3
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 3 3 3 3

ব্যাখ্যা

ইতিবাচক এবং নেতিবাচক জন্য পরিসীমা i.ক্রিয়া আউটপুট যা এখানে দরকারী is[0, 1, ..., n-1]n[n-1, n-2, ..., 0]n

1+**[:<./~**i.,2&|1&}.i.@-  Input: integer n
                         -  Negate n
                      i.@   Creates range for -n
               2&|          Take n modulo 2, returns 0 or 1
                  1&}.      If n is odd, drop the first value from the range for -n
                            Else do nothing and pass it unmodified
              ,             Append it to
            i.              The range for n
          *                 Get the sign of n
           *                Multiply elementwise with the joined ranges
    [:<./~                  Form a table of the minimum values of the range
  *                         Get the sign of n
   *                        Multiply elementwise with the joined ranges
1+                          Add 1 to each and return

2

গণিত, 78 বাইট

Abs[Fold[ArrayPad[#,1,#2]&,Table[0,#,#]&@Mod[#,2,1],Range[Abs@#-1]]+1~Min~-#]&

ব্যাখ্যা

Table[0,#,#]&@Mod[#,2,1]

প্রাথমিক ম্যাট্রিক্স তৈরি করুন: বিজোড় হলে 1x1, এমনকি 2x2 হলেও।

Range[Abs@#-1]

1 থেকে অ্যাবস (ইনপুট) - 1 এ একটি তালিকা তৈরি করুন।

Fold[ArrayPad[#,1,#2]&, ..., ...]

পূর্বোক্ত তালিকাটি ব্যবহার করে প্রাথমিক অ্যারেটি প্যাড করুন।

... +1~Min~-#

1 বা-ইনপুট যোগ করুন, যেটি ছোট।

Abs

সম্পূর্ণ ম্যাট্রিক্সে পরম মান প্রয়োগ করুন।


1

পিএইচপি, 177 157 বাইট

for($y=-$n=abs($z=$argv[1])+1;++$y<$n;)if($y&&($n&1||$y-1)){for($x=-$n;++$x<$n;)if($x&&($n&1||$x-1)){$v=max(abs($x),abs($y));echo$z<0?$v:$n-$v," ";}echo"
";}

সাথে চালানো php -r '<code>

সারি এবং কলামগুলির মধ্য দিয়ে লুপগুলি, কেন্দ্রের দূরত্বের উপর নির্ভর করে মানগুলি মুদ্রণ করে।

  • $n=abs($z)+1: +1কয়েক +1এবং -1পরবর্তী প্রকাশগুলিতে সংরক্ষণ করে
  • লুপগুলি -$n+1(শর্তে প্রাক-বর্ধন!) থেকে $n-1( -abs($z)থেকে abs($z)) যায়
  • লাইন / কলাম 0 (এবং বিজোড়ের জন্য $n: 1) এড়িয়ে গেছে
    ( $n&1এখানে এমনকি কলামগুলির জন্যও সত্য! মনে আছে +1?)
  • ধনাত্মক $ z এর জন্য মুদ্রণটি এর থেকেও উপকৃত হয় +1

1

হাস্কেল, 191 183 173 169 168 বাইট

r=reverse;m=map
x!y=(((++)<*>(x.r)).).zipWith(++).m y
g n|n<0=m(m$abs.((n-1)+)).g$abs n|1<2=[id!id,tail!init]!!mod n 2=<<m r$r$m(\x->(x<$[1..x])++[x+1..n])[1..n]
g.(0-)

ব্যবহার:

mapM_ print $ (g.(0-)) 3

[1,1,1,1,1]
[1,2,2,2,1]
[1,2,3,2,1]
[1,2,2,2,1]
[1,1,1,1,1]

নিমিকে ধন্যবাদ 2 10 20 24 বাইটের জন্য!


1
negateহল (0-)
নিমি

1
আপনি পরিবর্তন করতে পারেন fথেকে [id!id,tail!init]!!mod n 2এবং তারপর ইনলাইন তা gএবং ব্যবহার 1<2শাখার কোন মধ্যবর্তী ফলাফলের জুড়তে অনুমতি গার্ড: g n| ... |q<-r<$>a n=([id!id,tail!init]!!mod n 2)q$a n। মূল ফাংশনের জন্য আপনার কোনও নাম লাগবে না।
নিমি

1
ওহ, আপনি ইনলাইন করতে aখুব (এবং ফিরে যান 1<2পাহারা): g n| ... |1<2=[id!id,tail!init]!!mod n 2=<<map r$r$(\x->(x<$[1..x])++[x+1..n])<$>[1..n]
নিমি

1
আজকের জন্য গত এক: m=map!: ...(++).m yএবং g: g n|n<0=m(m(abs.((n-1)+)))$g$abs n|1<2=[id!id,tail!init]!!mod n 2=<<m r$r$m(\x->(x<$[1..x])++[x+1..n])[1..n]
নিমি

1

জাভাস্ক্রিপ্ট (ES6), 107 বাইট

(n,l=Math.abs(n+n-n%2))=>[...Array(l--)].map((_,i,a)=>a.map((_,j)=>(j=Math.min(i,l-i,j,l-j),n<0?-n-j:j+1)))

lঅ্যারের আকার হয়। n<0?-n-j:j+1বিশ্রী বলে মনে হয় কিন্তু আমি ভাল কিছু খুঁজে পাচ্ছি না।


1

ভিম, 152 143 বাইট

আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে, বিশেষত শেষ দুটি লাইনে তবে আমার মস্তিষ্ক ভাজা আছে।

D:let@z=@-/abs(@-)
a"nywYp:s/\d/x/g<C-v>
YggP:%s/.*/x \0 x<C-v>
:%s/x\+/\=@n-@z/g<C-v>
<Esc>v0"qda<C-r>=@z<0?1:@-*@z
<Esc>@=@-%2?"":"YPJYp"
@=@-*@z-1.(@-*@z>1?"@q":"")

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

এখানে এটি অপ্রিন্টযোগ্য অক্ষরের সাথে xxd ফর্ম্যাটে রয়েছে:

0000000: 443a 6c65 7440 7a3d 402d 2f61 6273 2840  D:let@z=@-/abs(@
0000010: 2d29 0a61 226e 7977 5970 3a73 2f5c 642f  -).a"nywYp:s/\d/
0000020: 782f 6716 0a59 6767 503a 2573 2f2e 2a2f  x/g..YggP:%s/.*/
0000030: 7820 5c30 2078 160a 3a25 732f 785c 2b2f  x \0 x..:%s/x\+/
0000040: 5c3d 406e 2d40 7a2f 6716 0a1b 7630 2271  \=@n-@z/g...v0"q
0000050: 6461 123d 407a 3c30 3f31 3a40 2d2a 407a  da.=@z<0?1:@-*@z
0000060: 0a1b 403d 402d 2532 3f22 223a 2259 504a  ..@=@-%2?"":"YPJ
0000070: 5970 220a 403d 402d 2a40 7a2d 312e 2840  Yp".@=@-*@z-1.(@
0000080: 2d2a 407a 3e31 3f22 4071 223a 2222 29    -*@z>1?"@q":"")

ব্যাখ্যা

এটি কেন্দ্রের বাইরে থেকে পিরামিড তৈরি করে, কেন্দ্রের নম্বরটি xএস এর সাথে ঘিরে রেখেছে :

x x x
x 5 x
x x x

তারপরে এটি xপরের সংখ্যার সাথে এসকে প্রতিস্থাপন করে এবং এটি xএস এর সাথে আবার ঘিরে :

x x x x x
x 4 4 4 x
x 4 5 4 x
x 4 4 4 x
x x x x x

... ইত্যাদি। এমনকি সংখ্যার জন্য এটি একই কাজ করে তবে এটি 2x2 বেস দিয়ে শুরু হয়।

এখানে কোডটি "উর্বরিত" রয়েছে। এটি কিছুটা অপ্রথাগত যে আমি ম্যাক্রোটিকে একটি বাফারে টাইপ করে "রেকর্ড" করি (অতএব সমস্ত <C-v>গুলি) এবং তারপরে এটি একটি রেজিস্টারে মুছে ফেলা, যা কী-স্ট্রোকগুলি বাস্তবায়ন না করেই ম্যাক্রো রচনা করার সবচেয়ে ভাল উপায় আমি খুঁজে পেয়েছি।

D:let@z=@-/abs(@-)<CR>       " Delete the input (into @-) and set @z to -1 if @- is negative; otherwise 1
a                            " Enter insert mode to compose the macro
  "nyw                         " Copy the number under the cursor to @n
  Yp                           " Copy this line and paste it below
  :s/\d/x/g<C-v><CR>           " Replace digits in the copy with 'x'
  YggP                         " Copy this line and paste it at the top of the buffer
  :%s/.*/x \0 x<C-v><CR>       " Add an 'x' before and after each line
  :%s/x\+/\=@n-@z/g<C-v><CR>   " Replace all 'x'es (and 'xx'es etc.) with the next number
<Esc>v0"qd                   " Done composing macro; delete it into @q (buffer is now empty)
a<C-r>=@z<0?1:@-*@z          " Append the center number (1 or abs(@-)) to the buffer
<Esc>@=@-%2?"":"YPJYp"       " If the input is even, make a 2x2 square
@=@-*@z-1.(@-*@z>1?"@q":"")  " Execute the macro abs(@-)-1 times if it's > 1


0

আর, 112 বাইট

k=abs(n);l=2*k;m=diag(l);for(i in 1:k){m[i:(l+1-i),i:(l+1-i)]=i};if(n%%2==1){m=m[-k,-k]};if(n<0){m=abs(m-1+n)};m

nকর্মক্ষেত্রে পূর্ণসংখ্যার প্রয়োজন , অন্যথায় n=scan()অতিরিক্ত 8 বাইটের জন্য চালান ।

k=abs(n)
l=2*k
m=diag(l)                    # Initialize quadratic 2*|n| matrix
for(i in 1:k){
    m[i:(l+1-i),i:(l+1-i)]=i # Assign values to matrix elements according
                             # to their index
}
if(n%%2==1){
   m=m[-k,-k]                # If n is odd, delete middle row and column
}
if(n<0){
    m=abs(m-1+n)             # If n < 0, flip values
}
m                            # Print matrix
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.