ম্যাট্রিক্সে প্রতিটি সারি এবং কলাম ঘোরান


15

চ্যালেঞ্জ

এর n x nসাথে পূর্ণসংখ্যার একটি ম্যাট্রিক্স দেওয়া হয়েছেn >= 2

1 2
3 4

এবং সঠিক 2nউপাদানগুলির সাথে পূর্ণসংখ্যার একটি তালিকা

[1,2, -3, -1]

আবর্তিত ম্যাট্রিক্স আউটপুট। এই ম্যাট্রিক্সটি নিম্নলিখিত উপায়ে তৈরি করা হয়েছে:

  • তালিকার প্রথম পূর্ণসংখ্যাটি ধরুন এবং এই মানটি দিয়ে প্রথম সারিকে ডানদিকে ঘোরান।
  • পরবর্তী পূর্ণসংখ্যাটি ধরুন এবং এই মানটি দিয়ে প্রথম কলামটি নীচে ঘোরান।
  • পরবর্তী পূর্ণসংখ্যাটি ধরুন এবং দ্বিতীয় মানটিকে এই মান ইত্যাদি দ্বারা ডানদিকে ঘোরান যতক্ষণ না আপনি ম্যাট্রিক্সের প্রতিটি সারি এবং কলামটি একবার ঘোরান।

তালিকায় নেতিবাচক পূর্ণসংখ্যা থাকতে পারে যার অর্থ আপনি ডান / নীচের পরিবর্তে সারি / কলামটি বাম / উপরে সরিয়ে নিন। পূর্ণসংখ্যা শূন্য হলে সারি / কলামটি ঘোরান না।

উপরের ইনপুটটি ব্যবহার করে উদাহরণ

তালিকা উপাদান ম্যাট্রিক্স ব্যাখ্যা
-------------------------------------------------- ----------
1 2 1 দ্বারা 1 ম সারির ডানদিকে ঘোরান
                   3 4

2 2 1 দ্বারা 1 ম কলামটি নীচে ঘোরান
                   3 4

-3 2 1 2 য় বাম দ্বিতীয় সারিতে ঘোরান
                   4 3

-1 2 3 2 দ্বারা 2 র্থ কলাম ঘোরান
                   4 1

বিধি

  • আপনি সর্বাধিক প্রচলিত ইনপুট ফর্ম্যাট চয়ন করতে পারেন। আপনি কোনটি ব্যবহার করেন তা কেবল এটি পরিষ্কার করুন।
  • ফাংশন বা সম্পূর্ণ প্রোগ্রাম অনুমোদিত।
  • ইনপুট / আউটপুট জন্য ডিফল্ট নিয়ম
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।
  • এটি , তাই সর্বনিম্ন বাইট-কাউন্ট জেতা। টাইব্রেকার আগে জমা দেওয়া হয়।

পরীক্ষার মামলা

ইনপুট ফর্ম্যাটটি ম্যাট্রিক্সের জন্য তালিকার একটি তালিকা এবং পূর্ণসংখ্যার জন্য একটি সাধারণ তালিকা।

[[1,2], [3,4]], [1,2, -3, -1] -> [[2,3], [4,1]]
[[1,2], [3,4]], [1,1,1,1] -> [[3,2], [4,1]]
[[1,2], [3,4]], [0,0,0,0] -> [[1,2], [3,4]]
[[1,2, -3], [- 4,5,6], [7, -8,0]], [1, -2,0, -1,3,4] -> [[7, 5,0], [- 3, -8,2], [- 4,1,6]]
[[1,2, -3], [- 4,5,6], [7, -8,0]], [3,12, -3,0, -6, -3] -> [[1 , 2, -3], [- 4,5,6], [7, -8,0]]

শুভ কোডিং!


ম্যাপকারের সাহায্য করা উচিত ...
msh210

উত্তর:


6

সিজেম, 13 বাইট

{{a.m>1m<z}/}

একটি নামবিহীন ব্লক (ফাংশন) যা ম্যাট্রিক্স এবং স্ট্যাকের উপরে তালিকাটি (সেই ক্রমে) নেয় এবং তাদের জায়গায় নতুন ম্যাট্রিক্সটি ফেলে।

সমস্ত পরীক্ষার কেস চালান।

একই ধারণা, একই বাইট গণনা, বিভিন্ন বাস্তবায়ন:

{{\(@m>a+z}/}
{{(Im>a+z}fI}
{{:\Im>]z}fI}

ব্যাখ্যা

আদর্শভাবে আমরা তালিকার প্রতিটি নির্দেশকে একইরকম করতে চাই এবং ম্যাট্রিক্সের প্রথম সারিটি ঘোরানোর জন্য এটি ব্যবহার করি। প্রতিটি নির্দেশের পরে কিছুটা ম্যাট্রিক্সকে কিছুটা রুপান্তর করে এবং শেষ পর্যন্ত সেই সমস্ত অতিরিক্ত রূপান্তর বাতিল হয়ে যায় তা নিশ্চিত করে এটি বেশ সহজেই করা যায়। সুতরাং প্রতিটি নির্দেশ প্রক্রিয়া করার পরে, আমরা সমস্ত সারিগুলি একটি উপরে আবর্তিত করি (যেমন পরবর্তী নির্দেশাবলী পরবর্তী সারিটি প্রসেস করে) এবং তারপরে ম্যাট্রিক্স স্থানান্তর করি, যেমন আমরা আসলে পরবর্তী কলামগুলি প্রক্রিয়াজাত করি। এই অতিরিক্ত রূপান্তরগুলি তালিকার নির্দেশাবলীর কাছে অর্থকৌলিক এবং ঠিক আমাদের সময়কালে একটি পিরিয়ড রয়েছে 2n

কোড হিসাবে:

{      e# For each instruction...
  a    e#   Wrap it in a singleton array.
  .m>  e#   Combine it element-wise with the matrix to rotate right. This is
       e#   a fairly common idiom to apply a binary operation only to the first
       e#   element of an array, since element-wise operations just retain all the
       e#   unpaired elements of the longer array.
  1m<  e#   Rotate the rows one up.
  z    e#   Transpose.
}/

4

এপিএল (ডায়ালগ প্রসারিত) , 17 15 14 13 বাইট

অ্যাডাম -3 বাইট

(⍉1⊖⌽`@1⍢⌽)/⌽

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

ইনপুটটিকে একটি তালিকা হিসাবে গ্রহণ করে যেখানে প্রথম উপাদানটি ম্যাট্রিক্স এবং বাকী উপাদানগুলি ঘূর্ণনের পরিমাণ। যদি left বাম পরিবর্তে ডানদিকে ঘোরানো হয়, এটি সিজেমকে পরাজিত করবে।

(⍉1⊖⌽@1 1⍢⌽)/⌽    Monadic train:
(⍉1⊖⌽@1 1⍢⌽)      Helper function to rotate and transpose once.
                        Takes args  (amount to rotate) and  (current array)
                      Function to rotate left
        1 1             2-element vector containing 1.
                        The second 1 is redundant, but saves 1 byte over (,1).
     ⌽@1 1             Function to rotate the 1st row left by ⍺.
     ⌽@1 1⍢⌽          Reverse ⍵, rotate 1st row left by ⍺, then reverse again.
                        This rotates the first row of  to the *right*.
  1                   Rotate all the rows upward,
                                                  then transpose.
(⍉1⊖⌽@1 1⍢⌽)/⌽   Fold (/) this function over the reversed input.
                     If our input is ⍵, _1, _2, ..., _2n,
                     the reversed input will be _2n, ..., _1, ⍵.
                     The / operator applies the function right to left,
                     so the  is necessary.

{⍉1⊖⌽⍺⌽@(⍳1)⌽⍵}(⍉1⊖⌽@(⍳1)⍢⌽)তবে আপনি আমাকে ব্যাখ্যা করতে পারবেন কেন বা এর @1পরিবর্তে কাজ করবে না ? এছাড়াও, ওপি আপনাকে বিপরীতে ইনপুট নেওয়ার অনুমতি দিতে পারে। @(⍳1)@(,1)
অ্যাডম

সুতরাং দেখা যাচ্ছে যে dfns ' atযা বর্ধিত পিছনে রয়েছে @কোনও সামঞ্জস্যপূর্ণ এক্সটেনশন নয়। তবে আপনি এমন নেটিভ ব্যবহার করতে পারেন যার @সাহায্যে `@1একটি বাইট ওভার সাশ্রয় হয় @1 1
অ্যাডাম

এপিএল বনাম জেতে কী আলাদাভাবে কাজ করে? আমি এটিকে জেতে অনুবাদ করার চেষ্টা করছি এবং এটি আরও অনেক শব্দাবলীর সন্ধান করছি ...
জোনা

2

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

def f(m,v):
    for i,x in enumerate(v):x%=len(m);r=m[i/2];m[i/2]=r[-x:]+r[:-x];m=zip(*m)
    return m

টেস্ট

fটিপলগুলির একটি তালিকা প্রদান করে। ফাংশন বডিটির প্রতিটি লাইন 1 টি ট্যাব অক্ষরের সাথে যুক্ত হয়।


একটি সোজা কি return zip(*m)আপনি 5 বাইট বাঁচাতে হবে না ?
ডেনকার

@ ডেনারএফি: আপনি কি m=zip(*m);return mঠিক সাথে প্রতিস্থাপনের পরামর্শ দিচ্ছেন return zip(*m)? আমি এটি করতে পারি না কারণ লুপের m=zip(*m)একটি অংশfor
ভল্টাহ

হ্যাঁ, এটা আমার ছিল। লুপের মধ্যে এটি দেখেনি, আমার খারাপ।
ডেনকার 15

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