একটি 2 ডি ম্যাট্রিক্স ঘোরানো


30

ধরা যাক আমার কাছে নিম্নলিখিত (2 ডি) ম্যাট্রিক্স রয়েছে:

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

ম্যাট্রিক্সকে ঘড়ির কাঁটার বিপরীতে R বার ঘোরান (90 বার ডিগ্রি বর্ধনে নয়, প্রতি বার 1 টি সংখ্যা দিয়ে),

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

সমাপ্ত উদাহরণ:

ইনপুট:

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

আউটপুট:

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

(অদ্ভুত স্পেসগুলি সুন্দর কলামগুলিতে সংখ্যাগুলি সারিবদ্ধ করতে হবে)

ম্যাট্রিক্সের বাইরের "রিং" 2 ঘড়ির কাঁটার বিপরীতে ঘোরানো হয় এবং অভ্যন্তরীণ ডানদিকে 2 টিও ঘোরানো হয়। এই ম্যাট্রিক্সে কেবল দুটি রিং রয়েছে।

1 "রিং" সহ একটি উদাহরণ:

2
[[1, 2],
 [3, 4],
 [5, 6]]

আউটপুট করা উচিত:

[[4, 6],
 [2, 5],
 [1, 3]]

আপনার চ্যালেঞ্জটি হল একটি ম্যাট্রিক্স এবং একটি পূর্ণসংখ্যা নেওয়া এবং আবর্তনের Rপরে অনুবাদিত সংস্করণ আউটপুট R

4x5 ম্যাট্রিক্সের আবর্তন নিম্নলিখিত চিত্র দ্বারা প্রতিনিধিত্ব করা হয়: এখানে চিত্র বর্ণনা লিখুন

সীমাবদ্ধতাসমূহ:

  • 2 ≤ M, N ≤ 100যেখানে এম এবং এন ম্যাট্রিক্সের মাত্রা। এটি গ্যারান্টিযুক্ত যে সর্বনিম্ন এম এবং এন সমান হবে।
  • 1 ≤ R ≤ 80, যেখানে r ঘুরানোর সংখ্যা।
  • ম্যাট্রিক্সে কেবল ইতিবাচক পূর্ণসংখ্যা থাকবে।
  • মান সর্বদা স্বতন্ত্র হয় না।
  • ইনপুটটি সর্বদা 2D অ্যারের হিসাবে হওয়া উচিত (যদি আপনি 2D অ্যারে হিসাবে রানটাইম ইনপুট নিতে না পারেন তবে আপনাকে কেবল ইনপুট পাওয়ার জন্য অন্য উপায় খুঁজে বের করতে হবে)।

স্বতন্ত্র মান সহ আরও একটি পরীক্ষার কেস:

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

আউটপুট:

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

এটি , তাই সংক্ষিপ্ত উত্তরটি জেতে!





4
এই চ্যালেঞ্জের জন্য আপনার নামটি অত্যন্ত
বিড়ম্বনাজনক

1
[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 16], [5, 9, 13, 14]]16 হঠাৎ সদৃশ হয় আমি এটা হওয়া উচিত: [[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 15], [5, 9, 13, 14]]?
ক্রিস্টোফ

উত্তর:



5

অক্টাভা, 210 বাইট

function M=F(M,R);f=@(z)[-z/2:-1 !eye(!!mod(z,2)) 1:z/2];t=angle(f([x y]=size(M))'+f(y)*i);B=!!M;B(2:x-1,2:y-1)=0;d=bwdist(B,'ch');[~,I]=sortrows([d(:) t(:)]);for k=0:max(d(:));M(h)=shift(M(h=I(d(I)==k)),R);end

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

অবরুদ্ধ সংস্করণ:

function M=F(M,R)
    [x y]=size(M);
    f=@(z)[-z/2:-1 !eye(!!mod(z,2)) 1:z/2];
    t=angle(f(x)'+f(y)*i);
    B=!!M;
    B(2:x-1,2:y-1)=0;
    d=bwdist(B,'chessboard');
    [~,I]=sortrows([d(:) t(:)]);
    for k=0:max(d(:))
        M(h)=shift(M(h=I(d(I)==k)),R);
    end
end
R=2;
M=randi(10,4,7)
F(M,R)

ব্যাখ্যা:

f=@(z)[-z/2:-1 !eye(!!mod(z,2)) 1:z/2]; 

একটি ফাংশন যা একটি নম্বর পায় এবং একটি পরিসর তৈরি করে যা অর্ডার করা হয় এবং কেন্দ্রের ইনপুট 4 (এমনকি) -2 -1 1 2
ইনপুট 5 (বিজোড়) উত্পন্ন করার জন্য উত্পন্ন করে-2.5 -1.5 0 1 2
কেবল এটি অর্ডার করা এবং কেন্দ্রিক হওয়া উচিত

f(x)'+f(y)*i    

রেঞ্জগুলি থেকে উত্পন্ন একটি জটিল ম্যাট্রিক্স

(-2,-2.5) (-2,-1.5) (-2,0) (-2,1) (-2,2)
(-1,-2.5) (-1,-1.5) (-1,0) (-1,1) (-1,2)
(1,-2.5)  (1,-1.5)  (1,0)  (1,1)  (1,2)
(2,-2.5)  (2,-1.5)  (2,0)  (2,1)  (2,2)

t=angle(f(x)'+f(y)*i);                    

আয়তক্ষেত্রাকারটিকে পোলার স্থানাঙ্কে রূপান্তর করুন এবং কোণগুলি ফেরৎ দিন যাতে প্রতিটি রিং কোণগুলির জন্য ঘড়ির কাঁটার বিপরীতে সাজানো হয়

-2.25  -2.50  3.14  2.68  2.36
-1.95  -2.16  3.14  2.36  2.03
-1.19  -0.98  0.00  0.79  1.11
-0.90  -0.64  0.00  0.46  0.79


B=!!M;
B(2:x-1,2:y-1)=0;

নিম্নলিখিত ম্যাট্রিক্স উত্পন্ন

1   1   1   1   1
1   0   0   0   1
1   0   0   0   1
1   1   1   1   1

d=bwdist(B,'chessboard');

রিং সূচকগুলি তৈরি করতে দাবার বোর্ডের দূরত্ব ব্যবহার করে বি এর দূরত্বের রূপান্তর গণনা করে

0   0   0   0   0
0   1   1   1   0
0   1   1   1   0
0   0   0   0   0               

6 * 7 ম্যাট্রিক্সের জন্য আমাদের নীচের ম্যাট্রিক্স থাকবে x

0   0   0   0   0   0   0
0   1   1   1   1   1   0
0   1   2   2   2   1   0
0   1   2   2   2   1   0
0   1   1   1   1   1   0
0   0   0   0   0   0   0   

[~,I]=sortrows([d(:) t(:)]);

প্রথমে রিং সূচকের উপর ভিত্তি করে অভিধানের সাজান এবং তার পরে কোণার ক্রম অনুসারে (সাজানো উপাদানের সূচকগুলি ফিরে এসেছে)

    for k=0:max(d(:))
        M(h)=shift(M(h=I(d(I)==k)),R);
    end

এবং অবশেষে প্রতিটি রিং বিজ্ঞপ্তি পরিবর্তন।


4

পাইথন 3, 292 288 বাইট

_=eval
a=input().split()
b,a=int(a[0]),_("".join(a[1:]))[::-1]
c=len(a)
d=len(a[0])
e=range
f="int((i>=j and i+j<c-1)|2*(i>=c/2and i+d>j+c)|3*(i<c/2and i+j<d))"
l=[-1,1,0,0],[0,0,1,-1]
g=lambda x:[[x[i+l[0][_(f)]][j+l[1][_(f)]]for j in e(d)]for i in e(c)]
print(_("g("*b+"a"+")"*b)[::-1])

সরানো নতুন লাইনের সাথে ইনপুট নেয়, তবে বাড়ানোর সংখ্যার পরে এটিকে ঘোরানোর জন্য একটি স্থান রেখে দেয়।

ব্যাখ্যা:

ও.পি. এর পরামর্শ অনুযায়ী ম্যাট্রিক্সকে একাধিক কেন্দ্রীভূত রিংয়ের মডেলিংয়ের পরিবর্তে এটিকে চারটি অঞ্চলে ভাগ করতে পারেন যেখানে উপাদানগুলি একক আবর্তনের সময় উপরে, নীচে, ডান বা বামে ভ্রমণ করে। এটি দীর্ঘ ইওল-এড স্ট্রিংয়ের উদ্দেশ্যf : প্রতিটি i,jসংমিশ্রণ কোন অঞ্চলে পড়ে তা নির্ধারণ করতে। তারপরে, এর ফলাফলটি একবারে দু'বার দেখা হবে l, এমন উপাদানটি প্রদান করুন যা অবশ্যই i,jপরবর্তী পদক্ষেপে অবস্থানে ঘোরাতে হবে । কাজg যা এই সমস্তগুলি করে এবং একক পদক্ষেপের পরে নতুন ম্যাট্রিক্স গঠন করে তারপরে বার বার বলা হয় একটি নেস্টেড ফাংশন কলের উপস্থাপনা সম্বলিত উত্পন্ন স্ট্রিংটি বিভক্ত করে।

আমি যখন এটি প্রাথমিকভাবে তৈরি করেছি, আমি ঘটনাক্রমে ম্যাট্রিক্সকে ঘড়ির কাঁটার বিপরীতে পরিবর্তনের পরিবর্তে ঘড়ির কাঁটার দিকে ঘুরিয়ে দিয়েছি। একটি সঠিক ফিক্স না করে, আমি [::-1]ঘূর্ণনের আগে এবং পরে ম্যাট্রিক্সের বিপরীতে দুটি কৌশলগতভাবে স্থাপন কপি যুক্ত করেছি । এগুলি সম্ভবত 0 280 এ গল্ফ করা যেতে পারে 276 বাইটে তবে আমি এটি করতে খুব অলস।

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

_=eval
a=raw_input().split()
b,a=int(a[0]),_("".join(a[1:]))[::-1]
c=len(a)
d=len(a[0])
e=xrange
f="int((i>=j and i+j<c-1)|2*(i>=c/2and i+d>j+c)|3*(i<c/2and i+j<d))"
l=[-1,1,0,0],[0,0,1,-1]
g=lambda x:[[x[i+l[0][_(f)]][j+l[1][_(f)]]for j in e(d)]for i in e(c)]
print _("g("*b+"a"+")"*b)[::-1]

সম্পাদনা করুন: প্রতিস্থাপন 4 বাইট বন্ধ Golfed orসঙ্গে |দুইবার। andদুর্ভাগ্যক্রমে সাহায্য করা যায় না।


পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট!
হাইপারনিউটারিনো

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

1

পার্ল, 330 328 বাইট

sub f{($r,$m)=@_;$h=@m=@$m;for$s(0..(($w=$#{$m[0]})<--$h?$w:$h)/2-.5){@_=(@{$m[$s]}[@x=$s..($x=$w-$s)],(map$m[$_][$x],@y=1+$s..($y=$h-$s)-1),reverse(@{$m[$y]}[@x]),(map$m[$h-$_][$s],@y));push@_,shift
for 1..$r;@{$m[$s]}[@x]=map shift,@x;$m[$_][$x]=shift for@y;@{$m[$y]}[@x]=reverse map shift,@x;$m[$h-$_][$s]=shift for@y}@$m=@m}

আইডিয়নে চেষ্টা করে দেখুন

Ungolfed:

sub f {
    my ($r, $m) = @_;

    my @m = @$m;
    my $h = $#m;
    my $w = @{$m[0]} - 1;
    my $c = (($w < $h ? $w : $h) + 1) / 2 - 1;

    for my $s (0 .. $c) {
        my $x = $w - $s;
        my $y = $h - $s;
        my @x = $s .. $x;
        my @y = $s + 1 .. $y - 1;

        # One circle.
        @_ = (@{$m[$s]}[@x],
              (map { $m[$_][$x] } @y),
              reverse(@{$m[$y]}[@x]),
              (map { $m[$h - $_][$s] } @y));

        # Circular shift.
        push(@_, shift(@_)) for 1 .. $r;

        @{$m[$s]}[@x] = map { shift(@_) } @x;
        $m[$_][$x] = shift(@_) for @y;
        @{$m[$y]}[@x] = reverse(map { shift(@_) } @x);
        $m[$h - $_][$s] = shift(@_) for @y;
    }

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