একটি পার্থক্য পিরামিড ভিজ্যুয়ালাইজ করুন


15

একটি পার্থক্য পিরামিড হ'ল একটি পিরামিড যেখানে প্রতিটি নতুন তির্যকটি হ'ল শেষ ত্রিভুজের উপাদানগুলির মধ্যে পার্থক্যগুলির পরম মান value উদাহরণস্বরূপ, যদি আমরা অ্যারে দিয়ে শুরু করি

2 5 4 9 3 4

এখন, আমরা এগুলি একটি তির্যক কলামে সাজাই:

     2
      5
       4
        9
         3
          4

এখন, আমরা পরবর্তী ত্রিভুজটি পূরণ করি। এই অ্যারের ক্রমাগত উপাদানগুলির মধ্যে পরম পার্থক্যগুলি হ'ল:

3 1 5 6 1

সুতরাং এটি আমাদের পরবর্তী তির্যক।

     2
    3 5
     1 4
      5 9
       6 3
        1 4

পিরামিডটি পূরণ না হওয়া পর্যন্ত পুনরাবৃত্তি করুন:

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

চ্যালেঞ্জ

পরিসীমাতে ইতিবাচক পূর্ণসংখ্যার একটি তালিকা দেওয়া [0, 9], সেই নির্দিষ্ট অ্যারের জন্য পার্থক্য পিরামিডের এই ASCII- শিল্প উপস্থাপনা তৈরি করুন। ইনপুটটিতে কমপক্ষে দুটি উপাদান থাকা নিশ্চিত guaran আপনি এই সংখ্যাগুলি কোনও যুক্তিসঙ্গত বিন্যাসে নিতে পারেন। (অ্যারে / তালিকা / আপনি এটি যাই বলুন না কেন, একটি স্ট্রিং, কমান্ড লাইন আর্গুমেন্ট ইত্যাদি etc.) প্রতিটি লাইনে ট্রেলিং স্পেস এবং একের পর এক নতুন ট্র্যাকিংয়ের অনুমতি দেওয়া হয়।

পরীক্ষা IO

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

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

[4, 7]

 4
3 7

[3, 3, 3]

  3
 0 3
0 0 3

[1, 3, 6, 3, 4, 9]

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


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

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

যথারীতি, এটি কোড-গল্ফ, সুতরাং মানক লুফোলগুলি প্রয়োগ হয় এবং বাইট জেতে সংক্ষিপ্ত উত্তর!


এই OEIS এবং এই অনুমান দ্বারা অনুপ্রাণিত ।

উত্তর:


8

জেলি , 16 বাইট

IA$ṖпUṚz”@ṚGḟ”@

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

পটভূমি

পার্থক্য তৈরি করা বেশ সোজা। ইনপুট জন্য

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

IA$Ṗп (একাধিক উপাদান থাকা সত্ত্বেও ইনক্রিমেন্টের নিখুঁত মান) নিম্নলিখিত র‌্যাগড 2 ডি অ্যারে ফলন করে।

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

Uকলামগুলির ক্রম এবং সারিগুলির ক্রম বিপরীত করে , নিম্নলিখিতটি প্রদান করে।

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

এখন, আমরা এর সাহায্যে সারি এবং কলামগুলি স্থানান্তর করি z”@, যা স্থানান্তর করার আগে সমস্ত সারিকে একই দৈর্ঘ্যে প্যাড করে। ফলাফল নিম্নলিখিত।

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

সারি বিপরীত দেয়

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

2D অ্যারেটিকে একটি সাদা স্থান-বিভাজিত স্ট্রিংয়ে রূপান্তর করতে, আমরা অন্তর্নির্মিত গ্রিড পরমাণু ( G) ব্যবহার করি। এটি ফাঁকা এবং সারি সারি লাইনফিড দ্বারা কলামগুলিতে যোগদান করে, নিম্নলিখিত ফলাফল প্রদান করে result

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

যা করার বাকি তা হ'ল ḟ”@ফলন সহ প্যাডিং চরিত্রটি সরিয়ে ফেলা

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

যা কাঙ্ক্ষিত আউটপুট।


2

সিজেম, 29 বাইট

q~{_2ew::-:z}h]W%zzeeSff*W%N*

এটি অনলাইন চেষ্টা করুন! (প্রথম এবং শেষ লাইন একটি লাইনফিড-বিচ্ছিন্ন পরীক্ষা স্যুট সক্ষম করে))

এটি এই উত্তর থেকে ত্রিভুজ-ঘূর্ণন এবং বিন্যাস কোডটি ব্যবহার করে এবং ত্রিভুজ নিজেই এই উত্তর হিসাবে একই নীতি দিয়ে উত্পন্ন হয় ।


2

জে, 46 42 39 36 বাইট

(#\-#)|."_1#{.[:":@|./.<@#2&(|@-/\)]

একটি সরাসরি-এগিয়ে বাস্তবায়ন। প্রতিটি জুটির মধ্যে ধারাবাহিক পার্থক্যের একটি সারণী উত্পন্ন করে এবং ইনপুট অ্যারের দৈর্ঘ্যের সমান সংখ্যকবার পুনরাবৃত্তি করে। তারপরে ত্রিভুজের সারি গঠনের জন্য সেই টেবিলের প্রতিটি তির্যকটি অনুসরণ করে। বাকিগুলি একটি পিরামিডে সারিগুলি ফর্ম্যাট করছে।

ব্যবহার

   f =: (#\-#)|."_1#{.[:":@|./.<@#2&(|@-/\)]
   f 2 5 4 9 3 4
     2     
    3 5    
   2 1 4   
  2 4 5 9  
 1 3 1 6 3 
0 1 4 5 1 4
   f 4 7
 4 
3 7
   f 8 7 3 2 4 5 9 1 6
        8        
       1 7       
      3 4 3      
     0 3 1 2     
    2 2 1 2 4    
   0 2 0 1 1 5   
  0 0 2 2 3 4 9  
 1 1 1 1 1 4 8 1 
0 1 0 1 0 1 3 5 6

ব্যাখ্যা

(#\-#)|."_1#{.[:":@|./.<@#2&(|@-/\)]  Input: list A
                         #            Get len(A)
                       <@             Box it
                                   ]  Get A
                          2&(     )   Repeat len(A) times on A initially
                          2      \      Get each iverlapping sublist of size 2
                                /       Reduce it using
                             |@-          The absolute value of the difference

                                      This will form a table where each row contains the
                                      successive differences
              [:     /.               Operate on the diagonals of that table
                   |.                 Reverse each diagonal
                ":@                   Format each into a string
           #                          Get len(A)
            {.                        Take that many from the strings of diagonals
 #\                                   Get the length of each prefix of A
                                      Makes the range [1, 2, ..., len(A)]
    #                                 Get len(A)
   -                                  Subtract the len(A) from each in the prefix range
                                      Makes [-len(A)+1, ..., -1, 0]
      |."_1                           Rotate each string left using each value
                                      A negative rotate left = rotate right
                                      Output the pyramid


1

পাইথন 3, 144 বাইট

def f(x):
 y=[x]
 for i in range(len(x)-1):y+=[['']*-~i+[abs(y[i][j]-y[i][j+1])for j in range(i,len(y[i])-1)]]
 for i in zip(*y):print(*i[::-1])

একটি ফাংশন যা xযুক্তির মাধ্যমে তালিকার ইনপুট নেয় এবং ফলাফলটি STDOUT এ মুদ্রণ করে।

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

প্রোগ্রামটি কোনও তালিকার ইনপুট নেয় xএবং নেস্টেড তালিকার yমতো সূচনা করে y[0] = xy(শুরুতে x) সর্বশেষ তালিকার সম্পূর্ণ পার্থক্যগুলি yদৈর্ঘ্যের একটি তালিকা না 1পৌঁছানো পর্যন্ত তালিকা হিসাবে উত্পন্ন এবং সংযোজন করা হয়; প্রতিটি পর্যায়ে, তালিকা যেমন যে সমস্ত তালিকা ব্যবধান সহ প্রাক padded হয় yমত একই দৈর্ঘ্যের আছে x। এর পরে, yস্থানান্তরিত হয় এবং প্রতিটি আউটপুট লাইনের জন্য একটি টিপল থাকে তবে বিপরীত হয়। ট্রান্সপোজের প্রতিটি টিপল আনপ্যাক করা হয়, বিপরীত হয় এবং মুদ্রিত হয়, পার্থক্য পিরামিডটি STDOUT এ রেখে দেয়।

আইডিয়নে চেষ্টা করে দেখুন

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