45 ডিগ্রি দ্বারা একটি দ্বি-মাত্রিক তালিকা ঘোরান


22

টাস্ক

লক্ষ্যটি এমন একটি প্রোগ্রাম লেখার জন্য যা কোনও ত্রিমাত্রিক তালিকাটি 45 ডিগ্রি দ্বারা ঘোরায়, তালিকাটি ফিরে আসার আগে অবশ্যই এটি 7 * 45 পর্যন্ত (একবারে) করতে সক্ষম হবে। তালিকাটি অগত্যা বর্গক্ষেত্র বা আয়তক্ষেত্রাকার হবে না। আপনার উত্তরের উদাহরণগুলির জন্য আপনাকে অবশ্যই আউটপুট অন্তর্ভুক্ত করতে হবে। এটি অবশ্যই এমন কেসগুলির জন্য কাজ করবে যা উদাহরণগুলির মধ্যে নয় ... চেনাশোনা, ত্রিভুজ ইত্যাদি You আপনি পুরো জিনিসটি করতে পূর্ব-বিদ্যমান ফাংশনটি ব্যবহার করতে পারবেন না।

সমস্ত তালিকার কমপক্ষে একটি প্রতিসাম্য অক্ষ থাকবে (এন, এস, ই, ডাব্লু)। সমস্ত সাবলিস্টকে কেন্দ্র-প্রান্তিককরণ হিসাবে ধরে নেওয়া উচিত। অদ্ভুত-সমান তালিকাগুলি সঠিকভাবে সারিবদ্ধ করতে বামদিকে স্থানান্তরিত হবে। সাবলিস্টের মাঝখানে ফাঁকগুলির জন্য উদাহরণ 4 দেখুন।

ইনপুট

আপনার প্রোগ্রামটি lতালিকা সহ একটি ভেরিয়েবল ব্যবহার করবে এবং তালিকাটি nযে পরিমাণে ঘোরানো হবে তা নির্দিষ্ট করে একটি ভেরিয়েবল ব্যবহার করবে (n * 45) ( nসর্বদা 7 এর চেয়ে কম হবে এবং 0 হতে পারে)। এটি lকোনও মুদ্রণযোগ্য ডেটা ধরণের (দশমিক, তালিকা, অন্তর্, স্ট্রিং [] .. ইত্যাদি) সহ সাবলিস্টিগুলি গ্রহণ করতে হবে, তবে সাবলিস্টগুলিতে একটি সময়ে কেবল একটি ডেটা টাইপ থাকবে।

আপনার কনসোল ইনপুট গ্রহণ বা স্ট্ডিন ব্যবহার করার দরকার নেই। লাইনগুলি পরীক্ষার মানগুলি উল্লেখ করে lএবং nঅক্ষর গণনাতে অন্তর্ভুক্ত হয় না তবে অবশ্যই জমা দেওয়া কোডে অন্তর্ভুক্ত করা উচিত।

আউটপুট

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

উদাহরণ

1

IN
l=
[[0 , 1 , 2],
 [3 , 4 , 5],
 [6 , 7 , 8]]
n=1

OUT
[    [0],
   [3 , 1],
 [6 , 4 , 2],
   [7 , 5],
     [8]    ]

2

IN
l=
[[a , b , c , d],
 [e , f , g , h]]
n=2

OUT
[[e , a],
 [f , b],
 [c , g],
 [h , d]]

3

IN
l=
[[A , B , C , D , E , F],
     [G , H , I , J],
         [K , L],
         [0 , 8],
         [M , N],
     [O , P , Q , R],
 [S , T , U , V , W , X]]
n=7

OUT
[          [F],
         [E],
       [D , J],
     [C , I],
   [B , H , L],
 [A , G , K , 8],
           [0 , N , R , X],
             [M , Q , W],
               [P , V],
             [O , U],
               [T],
             [U]          ]

4

IN
l=
[[9 , 8 , 7 , 6],
     [5],
 [4 , 3 , 2 , 1],
     [0]        ]
n=3

OUT
[  [0 , 4],
     [3],
   [2 , 5 , 9],
 [1 ,NIL, 8],
       [7],
     [6],     ]

5

IN
l=
[    [Q],
 [X ,NIL, Y],
     [Z]    ]
n=2

OUT
[    [X],
 [Z ,NIL, Q],
     [Y]     ]

4
Oooh। এটা কঠিন. মজা লাগে, যদিও!
ডক্টর

1
দুটি প্রশ্ন: 1) আমাদের তালিকাগুলি প্যাড করতে হবে না, তাই না? 2) আপনি কি সত্যিই চান যে আমরা তালিকা nবার ঘোরান and n45 ° দ্বারা নয় ? আমি জিজ্ঞাসা করছি কারণ আমি যথেষ্ট নিশ্চিত যে সাত 45 ° ঘূর্ণন প্রয়োগ করে আমি উদাহরণস্বরূপ 3 ফলাফল পাব না।
Wrzlprmft

না, আপনাকে প্যাড করতে হবে না। তবে তালিকাটি সঠিক ভিজ্যুয়াল অরিয়েন্টেশনে সাজিয়ে নিতে সক্ষম হওয়া উচিত, যদিও এটিরূপে আউটপুট হওয়া উচিত নয় ... আউটপুটটির কোনও নতুন লাইন থাকবে না। তালিকাটি n * 45 দ্বারা আবর্তিত হয়।
19urous

উত্তর:


8

পাইথন - 234 201

# example for defining lists and n
l=[[1,2,3,4],
     [5],
   [6,7,8,9]]
n=1

# counting code
j=1j
m=max(map(len,l))+len(l)
M=range(-m,m)
e=enumerate
d=[[v for x in M for i,u in e(l)for k,v in e(u)if[1,1+j,j,j-1,-1,-j-1,-j,1-j][n]*(k-(len(u)-1)/2+j*i)==x+y*j]for y in M]
print[x for x in d if x]

অবহেলিত সংস্করণ

rotation = [1,1+1j,1j,1j-1,-1,-1j-1,-1j,1-1j][n]
m = max(map(len,l))+len(l)
output = []
for y in range(-m,m):
    line = []
    for x in range(-m,m):
        for i,sublist in enumerate(l):
            for k,entry in enumerate(sublist):
                if rotation * ( k-(len(sublist)-1)/2 + i*1j ) == x + y*1j:
                    line += [entry]
    if line != []:
        output += [line]
print output

এটি ব্যবহার করে যে কোনও জটিল সংখ্যার দ্বারা (একটি জটিল সংখ্যার) গুণটি ঘোরানো এবং প্রসারিতের সাথে মিলে যায়। [1,1+1j,1j,1j-1,-1,-1j-1,-1j,1-1j]জটিল কোণগুলি প্রয়োজনীয় কোণগুলির সাথে সম্পর্কিত এবং ক্ষুদ্রতম স্কেলিং ফ্যাক্টর ব্যবহার করে যেমন একটি পূর্ণসংখ্যা জটিল ইনপুট জন্য আউটপুট আবার পূর্ণসংখ্যা জটিল।


1
আমি কীভাবে এটি কাজ করে তা বোঝার চেষ্টা করছি তবে জটিল সংখ্যায় হারিয়ে যেতে বসলাম। আমি কি ব্যাখ্যা চাইতে পারি?
12urous

1
@ অরৌস: x + iy = (x, y) এর যাক, তারপরে এটিকে 1 + i = (1,1) দিয়ে গুন করুন, আপনি 45 ডিগ্রি দ্বারা একটি ঘূর্ণন পাবেন।
কাইল কানোস

দুর্দান্ত সমাধান। আউটপুট তালিকায় উপযুক্ত প্যাডিং toোকানোর জন্য আমি এটি খাপ খাইবার চেষ্টা করছি, তবে খুব বেশি ভাগ্য নেই। এটি কি একটি তুচ্ছ সংযোজন?
tkocmathla

@ টকোকমাথলা: আমি এটি পরীক্ষা করিনি, তবে else: line += [None]শেষ লাইন থেকে চতুর্থের পরে যুক্ত করার চেষ্টা করব ।
Wrzlprmft
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.