বিকল্পভাবে কলাম এবং 2D অ্যারের সারিগুলি স্থানান্তর করুন


15

উদ্দেশ্য

যে কোনও আকারের 2D অ্যারে দেওয়া, একটি প্রোগ্রাম লিখুন বা কলাম এবং সারিগুলি বিকল্পভাবে স্থানান্তর করতে একটি ফাংশন লিখুন

উদাহরণ

a b c d e
f g h i j
k l m n o

প্রথম কলামের সমস্ত উপাদান একটি সারি নীচে শিফট করে , দ্বিতীয় কলামটি একটি সারি উপরে শিফট করে , তৃতীয় শিফটকে একটি সারি নীচে নামিয়ে দেয় এবং প্রান্তে পৌঁছালে মোড়ানো হয়।

k g m i o
a l c n e
f b h d j  

সকল উপাদানের প্রথম সারি শিফট অধিকার , দ্বিতীয় করতে বাম , তৃতীয় থেকে ডান ইত্যাদি মোড়ানো যখন তারা প্রান্ত পৌঁছানোর।

o k g m i
l c n e a
j f b h d

আমি সেরা উত্তর হিসাবে সংক্ষিপ্ততম ওয়ার্কিং কোড নির্বাচন করার theতিহ্যটি অনুসরণ করব


অ্যারে কোনও আকার বা বিশেষত 3x5 হতে পারে?
— জো কিং

আমি কোনও ভরা 2D অ্যারের সন্ধান করছিলাম। এটি উল্লেখ না করার জন্য দুঃখিত। আমি একটি সম্পাদনা যুক্ত করব
— করণ শিশু

সত্য কথা বলতে গেলে, অনুপযুক্ত ফর্ম্যাটিংটি প্রশ্নটিকে এমন চেহারা দেখায় যেন এটি কোনও অলস SO ব্যবহারকারীর অফ-টপিক প্রশ্ন।
— ব্যবহারকারী 202729


5
@kshishoo ভবিষ্যতের চ্যালেঞ্জগুলির জন্য আপনি নকলগুলি যাচাই করতে স্যান্ডবক্স ব্যবহার করতে পারেন এবং / অথবা মূল সাইটে পোস্ট করার আগে কিছু প্রতিক্রিয়া সংগ্রহ করতে পারেন
— রড

উত্তর:



7

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

,!tZy:oEq2&YS

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

ব্যাখ্যা

,        % Do twice
  !      %   Transpose. Takes input implicitly the first time
  t      %   Duplicate
  Zy     %   Size. Gives a vector with numbers of rows and of columns
  :      %   Range from 1 to the first entry of the vector (number of rows)
  o      %   Parity: gives 0 or 1 for eacn entry
  Eq     %   Times 2, minus 1: transforms 0 into -1
  2      %   Push 2
  &YS    %   Circularly shift along the second dimension. This shifts the
         %   first row by 1 (that is, to the right), the second by -1 (to
         %   the left), etc.
         % End (implicit). Display (implicit)

6

জে , 26, 21 19 বাইট

মাইল -5 বাইট ধন্যবাদ

(|."_1~_1^#\)@|:^:2

ব্যাখ্যা:

^:2 - নিম্নলিখিত দুটি বার পুনরাবৃত্তি:

@|: - স্থানান্তর এবং

#\ - উপসর্গের দৈর্ঘ্যের সন্ধান করুন (1, 2, 3 ... সারি)

_1^ - উপরের শক্তিগুলিতে -1 বৃদ্ধি করুন, -1 1 -1 1 বিকল্পের একটি তালিকা তৈরি করুন ...

|."_1~ - উপরের তালিকা থেকে অফসেট দিয়ে ইনপুট অ্যারের প্রতিটি সারি ঘোরান

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

মূল সংস্করণ:

(($_1 1"0)@#|."0 1])@|:^:2

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

^:2 - নিম্নলিখিত দুটি বার পুনরাবৃত্তি:

|: - স্থানান্তর এবং

|."0 1] - ইনপুট অ্যারের প্রতিটি সারিটি তালিকায় অফসেটগুলি ঘোরান:

@# - অ্যারেতে সারিগুলির সংখ্যা

($_1 1"0) - বিকল্প 1_ 1 (3 -> _1 1 _1)

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


1
আপনি তৈরি করতে পারেন _1 1..ব্যবহার (|."_1~_1^2|#\)@|:^:2এছাড়াও
— মাইল

@ মাইলস ধন্যবাদ, এটি একটি দুর্দান্ত টুকরা কোড!
— গ্যালেন ইভানভ

@miles আসলে আমার দরকার নেই 2|অংশ
— গ্যালেন ইভানভ

1
হ্যাঁ, আপনি আসলে করবেন না, এটি আরও 2 টি বাইট সংরক্ষণ করেছে।
— মাইল



2

এপিএল + উইন, 30 বাইট

2 ডি অ্যারের স্ক্রিন ইনপুটটির জন্য অনুরোধ জানানো হয়

((↑⍴m)⍴¯1 1)⌽((1↓⍴m)⍴¯1 1)⊖m←⎕

2

এপিএল (ডায়ালগ ইউনিকোড) , 26 বাইট

{(¯1 1⍴⍨≢⍵)⌽(¯1 1⍴⍨≢⍉⍵)⊖⍵}

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

উপসর্গ Dfn।

কিভাবে?

{(¯1 1⍴⍨≢⍵)⌽(¯1 1⍴⍨≢⍉⍵)⊖⍵}⍝ Main function, prefix. Input matrix is ⍵.
                        ⊖⍵}⍝ Rotate the columns of ⍵ according to the left arg:
            (       ⍉⍵)    ⍝ Transpose ⍵ (makes a 3x5 matrix become 5x3)
                   ≢       ⍝ Tally (yields the number of rows of the matrix)
                  ⍨        ⍝ Swap arguments of the following fn/op
                 ⍴         ⍝ Shape
             ¯1 1          ⍝ This vector. This yields a vector of ¯1 1 with size = number of columns of ⍵.
          ⌽                ⍝ Rotate the rows of ⍵ according to the left arg:
{(¯1 1⍴⍨≢⍵)                ⍝ Does the same as the preceding expression, without transposing ⍵.


2

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

a=>(g=a=>a[0].map((_,i)=>(b=a.map(a=>a[i]),i%2?[...b.slice(1),b[0]]:[b.pop(),...b])))(g(a))

ঘূর্ণনটি করার সম্ভবত একটি গল্ফিয়ার উপায় আছে ...


2

পাইথ, 15 বাইট

L.e.>b^_1k.Tbyy

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

ব্যাখ্যা

L.e.>b^_1k.Tbyy
L           b      Define a function on a list...
          .T       ... which transposes it...
 .e.>b^_1k         ... and rotates each row alternating left and right.
             yyQ   Apply twice to the (implicit) input array.

2

কিউ / কেডিবি + , 32 বাইট

সমাধান:

{rotate'[#:[x+:]#-1 1](+)x}/[2;]

উদাহরণ:

q)3 5#.Q.a / reshape "a..o" into 3 row, 5 column grid
"abcde"
"fghij"
"klmno"
q){rotate'[#:[(+)x]#-1 1](+)x}/[2;]3 5#.Q.a
"okgmi"
"lcnea"
"jfbhd"

ব্যাখ্যা:

কলামগুলিতে ঘূর্ণন প্রয়োগ করার জন্য গ্রিডটিকে ফ্লিপ করুন, দ্বিতীয় পুনরাবৃত্তিটি আবারও ফ্লিপ হয় এভাবে ঘূর্ণনটি দ্বিতীয় পাসের সারিগুলিতে প্রয়োগ করা হয় ।

ঘূর্ণনটি -1 1 -1 1..সারিবদ্ধ / কলামের দৈর্ঘ্যের তালিকার ভিত্তিতে তৈরি হয় ।

সহজেই পড়ার সহজ সংস্করণ থেকে স্বাস্থ্যকর 9 বাইট গল্ফ করা হয়েছে

{rotate'[count[flip x]#-1 1;flip x]}/[2;] / ungolfed solution
{                                  }/[2;] / perform lambda 2 times
 rotate'[                  ;      ]       / perform rotate on each-both
                            flip x        / flip x<->y of grid
                      #-1 1               / take from list -1 1
         count[flip x]                    / the length of the flipped grid

2

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

m=>(g=m=>m[0].map((_,x)=>m.map(_=>m[y++%h][x],h=m.length,y=x&1||h-1)))(g(m))

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

মন্তব্য

m => (                 // m[] = input matrix
  g = m =>             // g is the main helper function taking a matrix m[]
    m[0].map((_, x) => // for each column at position x in m[]:
      m.map(_ =>       //   for each row of m[]:
        m[y++ % h][x], //     yield the x-th value of the row (y mod h) and increment y
        h = m.length,  //     h = number of rows
        y = x & 1      //     start with y = 1 if x is odd,
            || h - 1   //     or h - 1 if x is even
      )                //   end of inner map()
  )                    // end of outer map()
)(g(m))                // invoke g twice on the input matrix




0

এপিএল NARS, 36 বাইট, 18 অক্ষর

c←b∘b←{⍵⌽⍨-×-\⍳≢⍵}∘⍉

এই {⍵⌽⍨- × - \ ⍳≢⍵ ম্যাট্রিক্স আর্গুমেন্টের প্রতিটি সারিটি ঘুরবে ভেক্টর -1 1 -1 1 ইত্যাদি অনুসারে (যেটির ভেক্টরের দৈর্ঘ্যটি ম্যাট্রিক্স সারিগুলির দৈর্ঘ্য রয়েছে)। টেস্ট:

  ⎕←a←3 5⍴⎕A
ABCDE
FGHIJ
KLMNO
  ⎕←c a
OKGMI
LCNEA
JFBHD


0

বাশ এট আল, 84

অ-প্রতিযোগিতামূলক শেল সমাধান।

এটি এমন একটি ফাংশনকে কেন্দ্র করে তৈরি করা হয় যা সারিগুলির আবর্তনের দিককে পরিবর্তিত করে। ট্রান্সপোজড অ্যারেতে করা একই পদ্ধতিটি কলামগুলি ঘোরান। উদাহরণস্বরূপ transpose | rotate | transpose | rotate।

বিকল্প ঘূর্ণন এই জাতীয় একক অক্ষর অ্যারেতে করা যেতে পারে sed:

sed -E 's/(.*) (.)$/\2 \1/; n; s/^(.) (.*)/\2 \1/'

পক্ষান্তরণ সঙ্গে কাজ করা যেতে পারে rsবা datamash:

rs -g1 -T
datamash -t' ' transpose

একসাথে নেওয়া:

r() { sed -E 's/(.*) (.)$/\2 \1/; n; s/^(.) (.*)/\2 \1/'; }
t() { rs -g1 -T; }
<f t | r | t | r

আউটপুট:

o k g m i
l c n e a
j f b h d
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.