অ্যান্টি-ডায়াগোনালগুলি ঘোরান


32

পটভূমি

বেশিরভাগ যুক্তিসঙ্গত প্রোগ্রামিং ভাষায়, 2D অ্যারের সারি বা কলামগুলি ঘোরানো খুব সহজ। এই চ্যালেঞ্জে, আপনার কাজটি এর পরিবর্তে অ্যান্টি-ডায়াগোনালগুলি ঘোরানো । মনে রাখবেন যে 2D অ্যারের অ্যান্টি-ডায়াগোনগুলি হ'ল এটির 1 ডি স্লাইসগুলি উত্তর-পূর্ব দিকে নেওয়া ↗ ↗

ইনপুট

যে কোনও যুক্তিসঙ্গত বিন্যাসে একটি অ-খালি আয়তক্ষেত্রাকার 2D অ্যারে single দ্রষ্টব্য যে অ্যারেটি বর্গাকার নাও হতে পারে।

আউটপুট

একই অ্যারে, তবে প্রতিটি অ্যান্টি-ডায়াগোনাল সহ ডানদিকে এক ধাপ ঘোরানো।

উদাহরণ

3x4ইনপুট অ্যারে বিবেচনা করুন

0 1 2 3
4 5 6 7
8 9 0 1

এই অ্যারের অ্যান্টি-ডায়াগোনালগুলি

0
4 1
8 5 2
9 6 3
0 7
1

তাদের ঘোরানো সংস্করণগুলি হয়

0
1 4
2 8 5
3 9 6
7 0
1

সুতরাং সঠিক আউটপুট হয়

0 4 5 6
1 8 9 0
2 3 7 1

বিধি এবং স্কোরিং

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

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

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

অতিরিক্ত পরীক্ষার মামলা

Input:
4
Output:
4

Input:
5 6 1
Output:
5 6 1

Input:
0 1
6 2
Output:
0 6
1 2

Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3

Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1

Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7 

উত্তর:


20

সিজেম, 20

{z_)\zLa+(@+\.+s\,/}

একটি ফাংশন ব্লক হিসাবে লিখিত। এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

ইনপুটটি এটির মতো দেখা যায়:

ইনপুট ডায়াগ্রাম

এটি হ'ল, আমরা উপরের সারি এবং ডান কলামটি ম্যাট্রিক্সের বাকী অংশ থেকে পৃথক করি এবং তীর দ্বারা প্রদর্শিত ক্রমে সেই উপাদানগুলি বিবেচনা করি।

তারপরে আউটপুটটি এরকম:

আউটপুট চিত্র

বাকী আয়তক্ষেত্রাকার ব্লকটি পুরো ত্রিভুজভাবে সরানো হয় এবং প্রান্ত উপাদানগুলি নতুন তীর দ্বারা প্রদর্শিত ক্রম / অবস্থানগুলিতে পুনরায় সাজানো হয়।

কোডটি প্রায় হুবহু এটি করে, আউটপুটটি প্রথমে তীরের নীচে সরাসরি উত্পন্ন হওয়ার সাথে ব্যতীত (সুতরাং ম্যাট্রিক্সে একটি লেজ রয়েছে, পি অক্ষরের মতো), তারপরে সংশোধন করা হয়েছে।

z      zip (transpose) the matrix
_      make a copy
)      take out the last row (right column before transposing)
\      swap with the rest of the matrix
z      transpose back
La+    append an empty row (needed for the single-column case,
        which leaves an empty matrix here)
(      take out the first row (top row without the corner)
@+     bring the right column to the top of the stack and concatenate
        obtaining an array of the edge elements (marked with the blue arrow)
\      swap with the remaining part (big white block in the diagrams)
.+     concatenate element by element
        each edge element is concatenated with a row of the white block
        after the white block runs out, the remaining elements form new rows
s      convert the whole thing to a string (concatenating all rows)
\      swap with the copy of the transposed matrix
,      get its length (number of original columns)
/      split the string into rows of that length

পাইথ উত্তরটিও 20 বাইট, তবে আপনার আগে ছিল, তাই আমি এটি গ্রহণ করছি।
জগারব

9

সিজেম, 44 43 42 40 বাইট

qN/:ReeSf.*:sz1fm<{Rz,{(S-(o\}*~]{},No}h

এটি এখানে পরীক্ষা করুন।

হুম, আমার প্রথম প্রয়াসের চেয়ে অনেক ভাল, তবে আমার মনে হচ্ছে ডেনিস যেভাবেই হোক কম সমাধানে এটি সমাধান করবে ...

ইনপুট এবং আউটপুট ASCII গ্রিড হিসাবে হয়:

0123
4567
8901

দেয়

0456
1890
2371


3
@ টিমিডি আমার এটিকে সম্পাদনা করার জন্য গ্রেস পিরিয়ডের শেষ অবধি অপেক্ষা করা উচিত ছিল right৪ থেকে নীচে ৪৩ এ।: পি
মার্টিন এন্ডার

হ্যাঁ! এটা একটা হয়ে মেমে
ইন্ট্রিপিডকোডার

1
আমি চূড়ান্তভাবে গিয়েছিলাম এবং একটি গল্ফিং ভাষা শিখেছিলাম যাতে আমি 4 বাইট 3 থেকে গল্ফ করতে এবং লিংক চেইনে যোগদান করতে পারি :)
খুলড্র্যাসেথ ন'ব্রায়া

6

জে, 24 চর

এক তর্ক নিয়ে কাজ করা।

$$<@(1&|.)/./:&;</.@i.@$

জে এর অপারেটর /.নামে ওব্লিক নামে পরিচিত । এটি এটিকে বিপরীত করতে পারে না, সুতরাং পুনর্নির্মাণটি তুচ্ছ নয়, তবে আপনি অ্যারের উপাদানগুলির ক্রমবিন্যাস হিসাবে "তালিকাবদ্ধ ওলিক্যাকে" বিবেচনা করতে পারেন। সুতরাং আমরা বিপরীতমুখী সঙ্গে যে বিন্যাস /:(dyadic সাজান ), যে আকার (জন্য "তালিকা obliques" বিন্যাস রেখে </.@i.@$) ডান এবং আমাদের নতুন তির্যক মান উপর, সঠিকভাবে, আবর্তিত বাম। তারপর আমরা ভাল পুরানো ব্যবহার করে পুরানো আয়তক্ষেত্রাকার অ্যারের মধ্যে এই তালিকা পুনর্নির্মাণ $$

   3 4$i.10
0 1 2 3
4 5 6 7
8 9 0 1
   ($$<@(1&|.)/./:&;</.@i.@$) 3 4$i.10
0 4 5 6
1 8 9 0
2 3 7 1

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


এটি ঠিক এখানে পিক জে। সাবাশ.
যোনা

5

জে, 38 30 বাইট

8 এলগরিদমশর্ককে 8 টি বাইট সংরক্ষণ করা হয়েছে।

{./.((}.~#),~({.~#),.])}:"1@}.   

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

ব্যবহার:

   ]input=.0 1 2 3, 4 5 6 7,: 8 9 0 1
0 1 2 3
4 5 6 7
8 9 0 1
   ({./.((}.~#),~({.~#),.])}:"1@}.) input
0 4 5 6
1 8 9 0
2 3 7 1

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


1
নিচে 30 গৃহস্থালির কাজ: {./.প্রতিস্থাপন }:@{.,{:"1, এবং আপনি কাছাকাছি ট্রেন আলোকসম্পাতের দুটি টিলড চিহ্ন সংরক্ষণ করতে পারেন: {./.((}.~#),~({.~#),.])}:"1@}.
অ্যালগরিদমশর্ক

4

জুলিয়া, 153 149 139 বাইট

A->(length(A)>1&&((m,n)=size(A);r(X)=for i=1:n X[:,i]=reverse(X[:,i])end;r(A);for i=-m:m A[diagind(A,i)]=circshift(diag(A,i),1)end;r(A));A)

এটি একটি নামহীন ফাংশন তৈরি করে যা একটি অ্যারে গ্রহণ করে এবং পরিবর্তিত ইনপুট অ্যারেটি ফিরিয়ে দেয়।

Ungolfed:

# Create a function to reverse the columns of a matrix
function revcols!(X)
    for = 1:size(X, 2)
        X[:,i] = reverse(X[:,i])
    end
    return X
end

# Our main function
function zgarb!(A)
    # Only perform operations if the array isn't one element
    if length(A) > 1
        # Record the number of rows
        m = size(A, 1)

        # Reverse the columns in place
        revcols!(A)

        # Shift each diagonal
        for i = -m:m
            A[diagind(A, i)] = circshift(diag(A, i), 1)
        end

        # Reverse the columns back
        revcols!(A)
    end
    return A
end

অ্যালগরিদমিক পরামর্শ এবং 4 বাইট সংরক্ষণের জন্য মার্টিন বাটনারকে ধন্যবাদ!


3

ES6, 75 বাইট

এটি অ্যারেগুলির একটি অ্যারেটিকে প্যারামিটার হিসাবে গ্রহণ করে এবং এটি জায়গায় পরিবর্তিত করে।

a=>{t=a.shift();a.map(r=>{t.push(r.pop());r.unshift(t.shift())});a.push(t)}

Ungolfed:

function anti_diagonal(array) {
    var temp = array.shift(); // strip off the first row
    array.forEach(row => temp.push(row.pop())); // strip off the last elements of each row
    array.forEach(row => row.unshift(temp.shift())); // distribute the elements to the beginning of each row
    array.push(temp); // the remaining elements become the last row
}

আরও স্পষ্টতার জন্য @ অ্যাডিটসুর ডায়াগ্রামটি দেখুন।


আপনি পরিবর্তন করে 2 বাইট বাঁচাতে পারে {t.push(r.pop());r.unshift(t.shift())}থেকেt.push(r.pop())+r.unshift(t.shift())
user81655

3

পাইথ, 20 বাইট

J+PhQ.)MQ++L.(J0tQ]J

উপরের সারি এবং ডান কলামটি মুছে ফেলার জন্য অ্যাডিস্টুর পদ্ধতির ব্যবহার করে, তারপরে এগুলি বাম এবং নীচে আটকে দিন। কিন্তু পরিবর্তনীয় ডেটা স্ট্রাকচার সহ, স্থানান্তর নয়।


2

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

@(a)[(b=[a(1,1:end),a(2:end,end)'])(1:(s=size(a)(1)))',[a(2:end,1:end-1);b(s+1:end)]]

আমি আশা করি আমি endএস থেকে মুক্তি পেতে পারি ।


1

পাইথন 2 , 113 104 94 বাইট

f=lambda i,b=[]:i and[b and b[:1]+i[0][:-1]]+f(i[1:],b[1:]or i[0][:-1]+[l[-1]for l in i])or[b]

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

এটি @ অ্যাডিটসুর পদ্ধতির মোটামুটি আক্ষরিক ব্যাখ্যা। মিথ্যা হিসাবে খালি তালিকা চিকিত্সার জন্য পাইথনের সিনট্যাক্স অতিরিক্ত 10 বাইট সংরক্ষণ করতে সহায়তা করেছে।


আমার যাওয়ার সাথে সাথে সারিগুলি ফেলে দিয়ে 8 টি বাইট সংরক্ষণ করা হয়েছে
স্মাইলঅ্যান্ডনড


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