ম্যাট্রিক্স টর্নেডো থেকে সাবধান!


27

ম্যাট্রিক্স টর্নেডো হ'ল অন্য টর্নেডোর মতো: এটি কেন্দ্রের চারদিকে ঘোরানো জিনিসগুলি নিয়ে গঠিত। এই ক্ষেত্রে, বায়ুর পরিবর্তে ম্যাট্রিক্সের উপাদানগুলি।

এখানে ম্যাট্রিক্স টর্নেডোর উদাহরণ রয়েছে:

ম্যাট্রিক্স টর্নেডো ক্রমে in

প্রথমে আমরা ম্যাট্রিক্সকে স্কোয়ার রিংগুলিতে ভাগ করে শুরু করি, প্রতিটি বিভাগে এমন উপাদান রয়েছে যা একই দূরত্বে সীমানা থেকে আরও দূরে থাকে। এই বিভাগগুলি কেন্দ্রের চারদিকে ঘড়ির কাঁটার দিকে ঘোরানো হবে। আসল টর্নেডোগুলিতে, কেন্দ্রের দিকে তীব্রতা বৃদ্ধি পায় এবং একইভাবে ম্যাট্রিক্স টর্নেডোতে আবর্তনের ধাপটি হয়: বাইরেরতম অংশটি (লাল একটি) 1 ধাপে আবর্তিত হয়, পরবর্তী (হলুদ) একটি 2 দ্বারা আবর্তিত হয়, এবং তাই উপর. একটি ঘূর্ণন পদক্ষেপটি কেন্দ্রের চারপাশে 90 ° ঘূর্ণন।

টাস্ক:

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

ইনপুট:

ইনপুটটি nযেখানে অর্ডার স্কোয়ার ম্যাট্রিক্স হওয়া উচিত n >= 1। ম্যাট্রিক্সের উপাদানগুলি সম্পর্কে কোনও অনুমান করা উচিত নয়, তারা যে কোনও কিছু হতে পারে।

আউটপুট:

একই ক্রমের একটি বর্গক্ষেত্রের ম্যাট্রিক্স যা ইনপুট ম্যাট্রিক্সে ট্রোনাদো প্রভাব প্রয়োগের ফলাফল হবে।

উদাহরণ:

অর্ডার একটি ম্যাট্রিক্স n = 1:

[['Hello']]               ===>    [['Hello']]

অর্ডার একটি ম্যাট্রিক্স n = 2:

[[1 , 2],                 ===>    [[5 , 1],
 [5 , 0]]                          [0 , 2]]

অর্ডার একটি ম্যাট্রিক্স n = 5:

[[A , B , C , D , E],             [[+ , 6 , 1 , F , A],
 [F , G , H , I , J],              [- , 9 , 8 , 7 , B],
 [1 , 2 , 3 , 4 , 5],     ===>     [/ , 4 , 3 , 2 , C],
 [6 , 7 , 8 , 9 , 0],              [* , I , H , G , D],
 [+ , - , / , * , %]]              [% , 0 , 5 , J , E]]

আমি মনে করি আপনি স্পষ্ট করতে চান যে আবর্তনগুলি 90। ঘূর্ণন।
এরিক দি আউটগল্ফার

এছাড়াও, আপনি অন্য কোথাও থেকে এই চ্যালেঞ্জ গ্রহণ করেছেন? যদি তা হয় তবে আপনাকে অবশ্যই অ্যাট্রিবিউশন সরবরাহ করতে হবে।
এরিক আউটগল্ফার

1
@ এরিকথ আউটগল্ফার ১) আমি এটি পরিষ্কার করে দিয়েছি। 2) এই চ্যালেঞ্জ আমার।
ইব্রাহিম মাহরির

4
@ জিউসেপ্প নির্ভর করে আপনি যে গোলার্ধের উপরে রয়েছেন;)
জো কিং

12
প্রথমে আমি বলতে চাই যে আমি এটি একটি ভাল চ্যালেঞ্জ বলে মনে করি: দুর্দান্ত কাজ! তবে আমি এই পয়েন্টটিও প্লাগ করতে চাই কারণ আমার মনে হয় আপনার পছন্দটি বলার জন্য যে এটি কোনও ধরণের ডেটা হতে পারে তা আপনার চ্যালেঞ্জটিকে একটি বিশ্রী জায়গায় ফেলে দেয়। একইভাবে ইনপুট তালিকাগুলির তালিকা হওয়ার বিষয়ে আপনার বক্তব্যটির সাথে আপনি এমন ভাষাগুলি সীমাবদ্ধ রেখেছেন যা ওভারহেড কাজ না করে এই সমস্যাটি সমাধান করতে পারে। আমি মনে করি এই প্রয়োজনীয়তাগুলি শিথিল করা হলে চ্যালেঞ্জ আরও ভাল। আমি আশা করি আপনি এই মত সুন্দর চ্যালেঞ্জ পোস্ট করা চালিয়ে যান! :)
FryAmTheEggman

উত্তর:


5

পাইথন 3 , 100 বাইট

import numpy
def f(a):
 if len(a): a=numpy.rot90(a,axes=(1,0));a[1:-1,1:-1]=f(a[1:-1,1:-1]);return a

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


8
ক্লাসিক পাইথন, কেবলমাত্র ড্রপিং a[1:-1,1:-1]=f(a[1:-1,1:-1])এটি বিশ্বের সবচেয়ে সাধারণ বিষয় যা সরাসরি 2-মাত্রিক অ্যারের পুরো অভ্যন্তরটি পেতে এবং সেট করা যায়
ETH প্রোডাকশনগুলি

1
@ এথ প্রডাকশনগুলি ন্যায্য হওয়ার জন্য এর অংশটি উত্তরাধিকার সূত্রে প্রাপ্তnumpy
জো কিং

1
numpy.rot90(a,1,(1,0))3 বাইট দ্বারা সংক্ষিপ্ত এবং এটি কাজ করা উচিত।
গ্রিফার

1
কোনো পরীক্ষার বিষয় ছাড়া Tio-লিঙ্ক থাকার মানেটা কী ..? S এখানে এটা সাথে আছেন (এ স্থান বাদ if len(a):a=...জন্য -1 বাইট)।
কেভিন ক্রুজসসেন

5

কাঠকয়লা , 44 বাইট

≔EθSθWθ«≔Eθ⮌⭆觧θνλθθM¹⁻¹Lθ≔E✂θ¹±¹¦¹✂κ¹±¹¦¹θ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। কেবল চরিত্রের স্কোয়ারগুলিতেই কাজ করে কারণ চারকোলের ডিফল্ট আই / ও সাধারণ অ্যারে ন্যায়বিচার করে না। ব্যাখ্যা:

≔EθSθ

অক্ষর বর্গ পড়ুন।

Wθ«

ফাঁকা না হওয়া পর্যন্ত লুপ করুন।

≔Eθ⮌⭆觧θνλθ

এটি ঘোরান।

θM¹⁻¹Lθ

এটি মুদ্রণ করুন, কিন্তু তারপরে কার্সারটি মূল কোণ থেকে এক বর্গাকারে তির্যকভাবে সরান।

≔E✂θ¹±¹¦¹✂κ¹±¹¦¹θ

অ্যারে থেকে বাইরে ছাঁটাই।


5

জেলি , 27 বাইট

J«þ`UṚ«Ɗ‘ịZU$LСŒĖḢŒHEƊƇṁµG

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

আমি মনে করি এটি আরও খাটো হতে পারে।

           Input: n×n matrix A.
J          Get [1..n].
 «þ`       Table of min(x, y).
    UṚ«Ɗ   min with its 180° rotation.

Now we have a matrix like: 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

‘ị          Increment all, and use as indices into...
     LС    List of [A, f(A), f(f(A)), …, f^n(A)]
  ZU$       where f = rotate 90°

Now we have a 4D array (a 2D array of 2D arrays).
We wish to extract the [i,j]th element from the [i,j]th array.

ŒĖ     Multidimensional enumerate

This gives us: [[[1,1,1,1],X],
                [[1,1,1,2],Y],
                ...,
                [[n,n,n,n],Z]]

ḢŒHEƊƇ     Keep elements whose Ḣead (the index) split into equal halves (ŒH)
           has the halves Equal to one another. i.e. indices of form [i,j,i,j]
           (Also, the head is POPPED from each pair, so now only [X] [Y] etc remain.)

ṁµG        Shape this like the input and format it in a grid.

1
আপনি সম্ভবত কেবল µGপাদলেখ রাখতে পারেন এবং দাবি করতে পারেন যে আপনার
জমাটি

5

পার্ল 6 , 78 73 72 বাইট

নোহেলহোফকে -৫ বাইটের জন্য ধন্যবাদ!

$!={my@a;{(@a=[RZ] rotor @_: sqrt @_)[1..*-2;1..@a-2].=$!}if @_;@a[*;*]}

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

পুনরাবৃত্তির কোড ব্লক যা সমতল 2D অ্যারে নেয় এবং একই ধরণের ফ্ল্যাটেড অ্যারে প্রদান করে।

ব্যাখ্যা:

$!={      # Assign code block to pre-declared variable $!
    my@a; # Create local array variable a
   {
     (@a=[RZ]  # Transpose:
             rotor @_: sqrt @_;  # The input array converted to a square matrix
     )[1..*-2;1..@a-2].=$!  # And recursively call the function on the inside of the array
   }if @_;    # But only do all this if the input matrix is not empty
   @a[*;*]  # Return the flattened array
}

আপনি অ্যারের সমতল করার @a[*;*]পরিবর্তে ব্যবহার করতে পারেন map |*,@a। (অপরিচ্ছন্ন অ্যারে এবং মাল্টি-ডাইমেনশন সাবস্ক্রিপ্টগুলির সাথে কাজ করার কোনও উপায় থাকলে এটি চমৎকার হবে তবে আমি তার একটিও ভাবতে পারি না))
নয়েলহেনফ

কিন্তু @a[1..*-2;1..@a-2].=$!কাজ করে।
nwellnhof

5

অক্টাভ , 86 81 বাইট

f(f=@(g)@(M,v=length(M))rot90({@(){M(z,z)=g(g)(M(z=2:v-1,z)),M}{2},M}{1+~v}(),3))

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

আমি সচেতন যে পুনরাবৃত্ত বেনামে ফাংশনগুলি অষ্টাটভে কিছু করার জন্য সংক্ষিপ্ততম পদ্ধতি নয়, তবে এগুলি এখন পর্যন্ত সবচেয়ে মজাদার পদ্ধতি। এটিই হ'ল সংক্ষিপ্ততম বেনামে ফাংশনটি নিয়ে আমি আসতে পেরেছি তবে আমি আউটগল্ফড হতে পছন্দ করব।

ব্যাখ্যা

রিকার্সিভ ফাংশন অনুযায়ী সংজ্ঞায়িত করা হয় এই ceilingcat দ্বারা উত্তর। পুনরাবৃত্তির কল q=f(f=@(g)@(M) ... g(g)(M) ...সহ এইরকম একটি বেনামী ফাংশনের মূল কাঠামো g(g)(M)। যেহেতু এই অনির্দিষ্টকালের recurse হবে, আমরা একটি শর্তাধীন সেল অ্যারের মধ্যে recursive কল মোড়ানো: {@()g(g)(M),M}{condition}()। শূন্য আর্গুমেন্ট তালিকার সাথে বেনামে ফাংশনটি শর্তটি নির্বাচিত হওয়ার পরে মূল্যায়ন বিলম্বিত করে (যদিও পরে, আমরা দেখতে পাচ্ছি যে আমরা সেই যুক্তি তালিকাটি সংজ্ঞায়িত করতে ব্যবহার করতে পারি z)। এখনও অবধি এটি স্রেফ মৌলিক হিসাবরক্ষণ হয়েছে।

এখন আসল কাজের জন্য। আমরা চাই যে rot90(P,-1)পি একটি ম্যাট্রিক্সের সাথে ফাংশনটি ফিরে g(g)আসুক, যার উপর এম এর কেন্দ্রীয় অংশে পুনরাবৃত্তি বলা হয়েছিল। আমরা এম। এর সূচীকরণে z=2:end-1যেটি লুকিয়ে রাখতে পারি সেট করে শুরু করি M(z,z), এইভাবে ম্যাট্রিক্সের কেন্দ্রীয় অংশটি নির্বাচন করতে হবে যা দরকার পুনরাবৃত্তির কল দ্বারা আরও টর্নেডোড করা হবে। ,3অংশ নিশ্চিত করে যে ঘুর্ণন ঘড়ির কাঁটার দিকে আছে। আপনি যদি দক্ষিণ গোলার্ধে থাকেন তবে আপনি এই বিটটি -২ বাইটের জন্য সরিয়ে ফেলতে পারেন।

আমরা তখন করি M(z,z)=g(g)M(z,z)। তবে এই অপারেশনের ফলাফলের মানটি পুরো Pম্যাট্রিক্সের পরিবর্তে পরিবর্তিত কেন্দ্রীয় অংশ । অতএব, আমরা {M(z,z)=g(g)M(z,z),M}{2}যা করি মূলত স্টি গ্রিফিনের এই উত্তর থেকে চুরি করা হয় ।

শেষ conditionঅবধি, ইনপুটটি খালি থাকলে পুনরাবৃত্তি থামে।


দক্ষিণ গোলার্ধের জন্য +1
সিলিংক্যাট

আমি বেনামী ফাংশন পুনরাবৃত্তির প্রায় আমার মাথা মোড়ানো এখনো, তাই আমি এটা একটি প্রয়াস দেবে না চেষ্টা করিনি, কিন্তু আমি দেখতে কৌতুহলী যদি পুনরাবৃত্তির লুপ তুলনায় খাটো এই এক
স্টিভি গ্রিফিন

@ স্টিভি গ্রিফিন আমি কী করতে পারি তা দেখতে পাবো :)
সানচিইস

@ স্টেভি গ্রিফিন যাইহোক, অনুগ্রহ করে অ্যাক্টেভে এই চ্যালেঞ্জটির জন্য একটি লুপ-ভিত্তিক সংস্করণ পোস্ট করতে চ্যালেঞ্জ অনুভব করুন। আমি সত্যিই ভাবছি যদি আপনি পুনরাবৃত্তির পদ্ধতিকে হারাতে পারেন।
শানিশাইজ

4

আর , 87 বাইট

function(m,n=nrow(m)){for(i in seq(l=n%/%2))m[j,j]=t(apply(m[j<-i:(n-i+1),j],2,rev));m}

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



এটা অনুমোদিত? চিত্রটি একটি ঘড়ির কাঁটার তীর দেখায় এবং এর নীচে
বর্ণিতভাবে

আমি অবশ্যই প্রশ্নটি দশবার পড়েছি এবং এটি কখনই ঘড়ির কাঁটার দিকে লক্ষ্য করে না (তাই আমার মন্তব্য)। হায়রে।
জিউসেপে

এহ, এটি সম্পর্কে আমাকে বলুন ... আমি পোস্টগুলি ভুল
প্রচারের

1
দুর্ভাগ্যক্রমে 1x1 ম্যাট্রিক্স কাজ করবে না (কারণ seq(0.5)খালি ভেক্টরের পরিবর্তে 1 টি প্রত্যাবর্তন করে)
digEmAll

4

এমএটিএল , 25 24 23 22

t"tX@Jyq-ht3$)3X!7Mt&(

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

এমএটিএল ইনডেক্সিং কখনই সহজ নয়, তবে কিছু গল্ফ দিয়ে এটি বর্তমানের সেরা জেলি উত্তরকে হিট করে ...

t                       % Take input implicitly, duplicate.  
 "                      % Loop over the columns of the input*
   X@                   % Push iteration index, starting with 0. Indicates the start of the indexing range.
     Jyq-               % Push 1i-k+1 with k the iteration index. Indicates the end of the indexing range
         t              % Duplicate for 2-dimensional indexing.
  t       3$)           % Index into a copy of the matrix. In each loop, the indexing range gets smaller
             3X!        % Rotate by 270 degrees anti-clockwise
                7Mt&(   % Paste the result back into the original matrix. 

* একটি n x nম্যাট্রিক্সের জন্য, এই প্রোগ্রামটি nপুনরাবৃত্তি করে, যখন আপনার সত্যিই কেবল n/2ঘূর্ণন প্রয়োজন । যাইহোক, এমএটিএল (এবি) এর ইনডেক্সিং যথেষ্ট নমনীয় যে অসম্ভব রেঞ্জকে সূচক করা কেবল একটি অপ-অপশন। এইভাবে, কেবল সঠিকভাবে পুনরাবৃত্তির সংখ্যা পাওয়ার জন্য বাইটগুলি নষ্ট করার দরকার নেই।



3

কে (এনএনজি / কে) , 41 39 38 বাইট

{s#(+,/'4(+|:)\x)@'4!1+i&|i:&/!s:2##x}

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

{ } যুক্তি দিয়ে ফাংশন x

#xদৈর্ঘ্য x- ম্যাট্রিক্সের উচ্চতা

2##x দুটি অনুলিপি - উচ্চতা এবং প্রস্থ (একই হিসাবে ধরে নেওয়া হয়েছে)

s:s"আকৃতি" জন্য বরাদ্দ

!sআকৃতি সঙ্গে একটি ম্যাট্রিক্স সব সূচকের sযেমন !5 5হয়

(0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4)

এটি একটি 2-সারি ম্যাট্রিক্স (তালিকার তালিকা) এবং এর কলামগুলি 5x5 ম্যাট্রিক্সের সূচকের সাথে সামঞ্জস্য করে।

&/ দুই সারির উপরে সর্বনিম্ন:

0 0 0 0 0 0 1 1 1 1 0 1 2 2 2 0 1 2 3 3 0 1 2 3 4

i&|i:বরাদ্দ করুন i, ( |) বিপরীত করুন , এবং &সাথে মিনিমা ( ) নিনi

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

এগুলি 5x5 ম্যাট্রিক্সের সমতল রিং নম্বরগুলি:

4!1+ 1 যোগ করুন এবং 4 জন বাকী অংশ গ্রহণ করুন

(+|:)এটি এমন একটি ফাংশন যা বিপরীতক্রমে ঘোরানো হয় ( |- আমাদের :এটি জঘন্য হতে জোর করা প্রয়োজন ) এবং তারপরে ট্রান্সপোসিং ( +- যেহেতু এটি "ট্রেন" এ সঠিকতম ক্রিয়া নয়, আমাদের একটি প্রয়োজন নেই :)

4(+|:)\xxমধ্যবর্তী ফলাফল সংরক্ষণ করে এটি 4 বার প্রয়োগ করুন

,/' প্রতিটি সমতল

+ TRANSPOSE

( )@' বামে প্রতিটি মান ডানদিকে প্রতিটি সূচককে সূচক করুন

s# পুনরায় আকার দিন s


2
আমি আপনার
কোডটির

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

ধন্যবাদ! আপনার সমাধানগুলি আমাকে কে (বা এমনকি এনএনজি / কে :) শিখতে শুরু করে
গ্যালেন ইভানোভ

@ গ্যালেন ইভানোভ জে (এবং এপিএল?) এর সাথে পরিচিত হওয়ার কারণে আপনি ইতিমধ্যে সেখানে অর্ধপথে রয়েছেন। কে আরও ছোট এবং সরল, তাই আমি এটি শিখার পক্ষে অত্যন্ত প্রস্তাব দিই এবং অবশ্যই আমি যে কোনও সময় অর্চার্ডে এ সম্পর্কে চ্যাট করতে পেরে খুশি । এনএনজি / কে হ'ল আসল জিনিসের কেবলমাত্র একটি উপসেট তবে এটিকে দ্রুত এবং ব্যবহারিক করে তোলার লক্ষ্য আমার।
এনএনজি

হ্যাঁ, আমি মনে করি আমি এটি চেষ্টা করে যাচ্ছি।
গ্যালেন ইভানভ 6

3

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

f=(a,k=m=~-a.length/2)=>~k?f(a.map((r,y)=>r.map(v=>y-m>k|m-y>k|--x*x>k*k?v:a[m+x][y],x=m+1)),k-1):a

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

কিভাবে?

W

m=W12tx,y=max(|ym|,|xm|)

tx,yW=5m=2

(2222221112210122111222222)

k=m(x,y)

tx,yk

অন্যগুলি অপরিবর্তিত রয়েছে।

এটি বলার সমতুল্য যে আমাদের যদি একটি ঘর ঘোরানো হয় না :

(ym>k) OR (my>k) OR (X2>k2) with X=mx

কোডটিতে যা পরীক্ষা ব্যবহৃত হয়:

a.map((r, y) =>
  r.map(v =>
    y - m > k | m - y > k | --x * x > k * k ?
      v
    :
      a[m + x][y],
    x = m + 1
  )
)

kk=1k=3/2W

~k === 0

3

জেলি , 24 বাইট

ṙ⁹ṙ€
ḊṖ$⁺€ßḷ""ç1$ç-ZUµḊ¡

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

আমি মনে করি এটি আরও খাটো হতে পারে।

- লিন


আমি এরকম একটি সমাধান সম্পর্কে অবাক হয়েছি! এটি ḷ""আমার কাছে icalন্দ্রজালিক দেখাচ্ছে an কোনও ব্যাখ্যা যুক্ত করার যত্ন?
লিন

@ লিন আমি শেষ কথাটি শুনেছিলাম তা শোনার জন্য magন্দ্রজালিক ḷ""। এটি কেবল ḷ"একটি অতিরিক্ত অতিরিক্ত "... ওহ, একটি সামান্য সম্ভাবনাও এটি ḷ"এমন একটি যা আমি "আবিষ্কার" করেছি যা এত বেশি ব্যবহৃত হয় না কারণ এটি প্রায়শই একক পরমাণুর সাথে প্রতিস্থাপিত হতে পারে (এই ক্ষেত্রে নয়, হিসাবে ইনপুট এছাড়াও থাকতে 0পারে)।
এরিক দ্য আউটগল্ফার

2

হাস্কেল , 108 বাইট

e=[]:e
r=foldl(flip$zipWith(:))e
g!(h:t)=h:g(init t)++[last t]
f[x,y]=r[x,y]
f[x]=[x]
f x=r$(r.r.r.(f!).r)!x

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

অ্যারে 90 rot ঘোরানোর জন্য আমি লাইকোনির ট্রান্সপোজ এবং এটিকে কিছুটা সংশোধন করেছি:

  e=[]:e;foldr(zipWith(:))e.reverse
 e=[]:e;foldl(flip$zipWith(:))e

ব্যাখ্যা

r একটি অ্যারে 90 by দ্বারা ঘোরান °

(!)এটি একটি উচ্চ-স্তরের ফাংশন: "কেন্দ্রে প্রয়োগ করুন"। g![1,2,3,4,5]হয় [1] ++ g[2,3,4] ++ [5]

f টর্নেডো ফাংশন: বেস কেসগুলি আকার 1 এবং 2 হয় (কোনওভাবে 0 কাজ করে না)।

শেষ লাইনটি যেখানে যাদুটি ঘটে: আমরা r.r.r.(f!).rমাঝারি সারিগুলিতে প্রয়োগ করি xএবং তারপরে ফলাফলটি ঘোরাই। আসুন সেই মাঝারি সারিগুলিকে এম । আমরা মধ্যম উপর recurse করতে চান কলাম এর এম , এবং যারা এ পেতে, আমরা ঘুরান পারেন এম এবং তারপর ব্যবহার (f!)। তারপর আমরা ব্যবহার r.r.rঘোরাতে এম মূল স্থিতিবিন্যাস ফিরে।


2

জাভা 10, 198 192 বাইট

m->{int d=m.length,b=0,i,j;var r=new Object[d][d];for(;b<=d/2;b++){for(i=b;i<d-b;i++)for(j=b;j<d-b;)r[j][d+~i]=m[i][j++];for(m=new Object[d][d],i=d*d;i-->0;)m[i/d][i%d]=r[i/d][i%d];}return r;}

-6 বাইটস @ সিলিংক্যাটকে ধন্যবাদ ।

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

ব্যাখ্যা:

m->{                         // Method with Object-matrix as both parameter and return-type
  int d=m.length,            //  Dimensions of the matrix
      b=0,                   //  Boundaries-integer, starting at 0
      i,j;                   //  Index-integers
  var r=new Object[d][d];    //  Result-matrix of size `d` by `d`
  for(;b<=d/2;b++){          //  Loop `b` in the range [0, `d/2`]
    for(i=b;i<d-b;i++)       //   Inner loop `i` in the range [`b`, `d-b`)
      for(j=b;j<d-b;)        //    Inner loop `j` in the range [`b`, `d-b`)
        r[j][d+~i]=          //     Set the result-cell at {`j`, `d-i-1`} to:
          m[i][j++];         //      The cell at {`i`, `j`} of the input-matrix
    for(m=new Object[d][d],  //   Empty the input-matrix
        i=d*d;i-->0;)        //   Inner loop `i` in the range (`d*d`, 0]
      m[i/d][i%d]            //     Copy the cell at {`i/d`, `i%d`} from the result-matrix
        =r[i/d][i%d];}       //      to the replaced input-matrix
  return r;}                 //  Return the result-matrix as result

bমূলত আমরা কোন রিং এ আছি তা বোঝাতে ব্যবহৃত হয়। এবং এটি এরপরে প্রতিটি পুনরাবৃত্তির সময় ঘড়ির কাঁটার দিকের অভ্যন্তরের সমস্ত কিছু সহ এই রিংটি ঘোরানো হবে।

ইনপুট-ম্যাট্রিক্সের প্রতিস্থাপনটি সম্পন্ন করা হয়েছে কারণ জাভা পাস-রেফারেন্স হয়, তাই কেবল সেটিংয়ের r=mঅর্থ হ'ল কোষ থেকে অনুলিপি করার সময় উভয় ম্যাট্রিক পরিবর্তিত হয়, ভুল ফলাফল তৈরি করে। অতএব আমাদের একটি নতুন- Objectম্যাট্রিক্স (নতুন রেফারেন্স) তৈরি করতে হবে এবং পরিবর্তে প্রতিটি কক্ষে মানগুলি অনুলিপি করতে হবে।


1

ম্যাটল্যাব, 93 বাইট

function m=t(m),for i=0:nnz(m),m(1+i:end-i,1+i:end-i)=(rot90(m(1+i:end-i,1+i:end-i),3));end;end

আমি নিশ্চিত এটি আরও কিছুটা চালিত হতে পারে।

ব্যাখ্যা

function m=t(m),                                                                          end % Function definition
                for i=0:nnz(m),                                                       end;    % Loop from 0 to n^2 (too large a number but matlab indexing doesn't care)
                                                            m(1+i:end-i,1+i:end-i)            % Take the whole matrix to start, and then smaller matrices on each iteration
                                                      rot90(                      ,3)         % Rotate 90deg clockwise (anti-clockwise 3 times)
                               m(1+i:end-i,1+i:end-i)=                                        % Replace the old section of the matrix with the rotated one


1

হাস্কেল, 274 বাইট

wএটি হ'ল মূল ফাংশন, যা [[a]] -> [[a]]আপনি প্রত্যাশা করবেন এমন ধরণ রয়েছে ।

আমি নিশ্চিত যে আরও অভিজ্ঞ হাস্কেল গল্ফার এর উপর উন্নতি করতে পারে।

w m|t m==1=m|0<1=let m'=p m in(\a b->[h a]++x(\(o,i)->[h o]++i++[f o])(zip(tail a)b)++[f a])m'(w(g m'))
p m|t m==1=m|0<1=z(:)(f m)(z(\l->(l++).(:[]))(r(x h(i m)):(p(g m))++[r(x f(i m))])(h m))
t[]=1
t[[_]]=1
t _=0
h=head
f=last
x=map
i=tail.init
g=x i.i
z=zipWith
r=reverse

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