বিকল্পভাবে কলাম এবং 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.