সমস্ত এন কলামে 1 থেকে এল (এন) সহ ম্যাট্রিক্স


18

চ্যালেঞ্জ:

ইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যক এল রয়েছে এমন একটি তালিকা নিন :

3 5 2 1 6

এবং একটি ম্যাট্রিক্স তৈরি করুন যেখানে এন'থ কলামে ভেক্টর 1: এল (এন) রয়েছে , যেখানে সংক্ষিপ্ত সারিগুলি জিরো দিয়ে প্যাড করা হয়েছে।

পরীক্ষার কেস:

3   5   2   1   6
-----------------
1   1   1   1   1
2   2   2   0   2
3   3   0   0   3
0   4   0   0   4
0   5   0   0   5
0   0   0   0   6

1
-
1

1   2   3   4   3   2   1
-------------------------
1   1   1   1   1   1   1
0   2   2   2   2   2   0
0   0   3   3   3   0   0
0   0   0   4   0   0   0

নিয়মাবলী:

  • .চ্ছিক ইনপুট এবং আউটপুট ফর্ম্যাটগুলি
    • তালিকাগুলির তালিকা একটি গ্রহণযোগ্য আউটপুট ফর্ম্যাট
  • ম্যাট্রিক্স যথাসম্ভব ছোট হওয়া উচিত (আপনি এটি প্রয়োজনের তুলনায় আরও জিরো দিয়ে প্যাড করতে পারবেন না)
  • প্রতিটি ভাষায় সংক্ষিপ্ত কোড জিততে পারে
  • ব্যাখ্যা অত্যন্ত উত্সাহিত হয়

এর পরিবর্তে আমরা কি রেঞ্জগুলি অনুভূমিকভাবে বিতরণ করতে পারি?
মিঃ এক্সকোডার

না, এগুলি উল্লম্ব হওয়া উচিত। আপনি যদি এমন ভাষা ব্যবহার করেন যেখানে অনুভূমিক / উল্লম্ব শব্দের কোনও অর্থ নেই তবে এটি it'sচ্ছিক। (ভাষাগুলির জন্য প্রাসঙ্গিক হতে পারে যেখানে তালিকার তালিকাগুলি অনুভূমিক / উল্লম্ব দিকের সাথে জড়িত না)
স্টিভি গ্রিফিন

1
@ স্টেভিগ্রিফিন কোন বুদ্ধিমান ভাষা নেস্টেড তালিকার সাথে মাত্রা যুক্ত করে না?
এরিক আউটগল্ফার

4
@ এরিকথ আউটগল্ফার, এই সাইটে কতগুলি উন্মাদ ভাষা ব্যবহৃত হয়?
স্টিভি গ্রিফিন

2
একজনের জন্য એરিকথ আউটগল্ফার আর ম্যাট্রিককে নেস্টেড তালিকা হিসাবে দেখছেন না, বরং একটি দীর্ঘ তালিকা, যা সারি অনুসারে মোড়ানো।
জেএড

উত্তর:


18

আর , 40 38 বাইট

function(l)outer(m<-1:max(l),l,"<=")*m

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

ব্যাখ্যা:

outerএর প্রথম দুটি আর্গুমেন্টের উপাদানগুলির সমস্ত সংমিশ্রণে এটির তৃতীয় আর্গুমেন্ট (ফাংশন) প্রয়োগ করে, একটি ম্যাট্রিক্স উত্পন্ন করে TRUEএবং FALSEযেখানে প্রতিটি কলাম TRUEযেখানে 1:max(l)তার সাথে সম্পর্কিত উপাদানটির চেয়ে কম বা সমান l, উদাহরণস্বরূপ যেখানে l=c(3,5,2,1,6):

      [,1]  [,2]  [,3]  [,4] [,5]
[1,]  TRUE  TRUE  TRUE  TRUE TRUE
[2,]  TRUE  TRUE  TRUE FALSE TRUE
[3,]  TRUE  TRUE FALSE FALSE TRUE
[4,] FALSE  TRUE FALSE FALSE TRUE
[5,] FALSE  TRUE FALSE FALSE TRUE
[6,] FALSE FALSE FALSE FALSE TRUE

তারপরে ফলাফল ম্যাট্রিক্স ধরে নেওয়া যায় A, তারপরে A*m-> A[i,j]=A[i,j]*iযা TRUE1 এবং FALSE0 তে কোয়ার্স করে কাঙ্ক্ষিত ফলাফল তৈরি করে।


আমি মনে করি - আপনি, 2 বাইট সংরক্ষণ করতে পারবেন প্রতিস্থাপন function(l)সঙ্গেl=scan();
AndriusZ

@ এন্ড্রিয়াসজেড তবে তারপরে আমাকে সবকিছু মুড়ে printফেলতে হবে যাতে আমি সেই বাইটগুলি হারাতে পারি।
জিউসেপে

আমি মনে করি, আপনাকে সবকিছু মোড়ানোর দরকার নেই - TOI
AndriusZ

2
@ এন্ড্রিয়াসজেড আমরা অবশ্যই এর আগে এই বিষয়ে কথা বলেছি। এই মেটা প্রশ্নের একমাত্র উত্তর source(...,echo=TRUE)স্ট্যান্ডিন থেকে সম্পূর্ণ প্রোগ্রাম হিসাবে ব্যবহার এবং পড়ার জন্য একটি +4 জরিমানা দেয় , যদি আপনার কাছে বিকল্প পরামর্শ থাকে তবে তা সব উপায়েই করা উচিত, তবে যতদূর আমি অবগত আছি যে এটি আমাদের নিকটতম সম্পূর্ণ কর্মসূচিতে একটি আর sensকমত্যের জন্য এবং এটি আপাতত দাঁড়িয়েছে।
জিউসেপে




5

গণিত, 20 বাইট

PadRight@Range@#&

ইউ + এফ 3 সি 7 (ম্যাথমেটিকার বিল্টিন Transposeফাংশন) রয়েছে

ওল্ফ্রাম স্যান্ডবক্সে এটি ব্যবহার করে দেখুন

ব্যবহার

PadRight@Range@#&[{3, 5, 2, 1, 6}]
{
 {1, 1, 1, 1, 1},
 {2, 2, 2, 0, 2},
 {3, 3, 0, 0, 3},
 {0, 4, 0, 0, 4},
 {0, 5, 0, 0, 5},
 {0, 0, 0, 0, 6}
}

ব্যাখ্যা

PadRight@Range@#&

         Range@#    (* Generate {1..n} for all elements of input *)
PadRight@           (* Right-pad 0s so that all lists are equal length *)
                   (* Transpose the result *)

@ ডাউনভোটাররা কেন ডাউনটি? তুমি কি সব বোঝাতে পার?
JangHwan মিন

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

5

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

@(x)((y=1:max(x))'<=x).*y'

বেনামি ফাংশন যা একটি সারি ভেক্টরকে ইনপুট দেয় এবং ম্যাট্রিক্সকে আউটপুট দেয়।

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

ব্যাখ্যা

ইনপুট বিবেচনা করুন x = [3 5 2 1 6]। এটি 1 × 5 আকারের একটি সারি ভেক্টর।

1:max(x)সারি ভেক্টর দেয় [1 2 3 4 5 6]যা ভেরিয়েবলকে বরাদ্দ করা হয়y

এর ট্রান্সপোজ, অর্থাৎ কলাম ভেক্টর [1; 2; 3; 4; 5; 6], <=ইনপুট সহ তুলনা করা হয় (সম্প্রচারের সাথে উপাদান অনুসারে) [3 5 2 1 6]। ফলাফলটি 6 × 5 ম্যাট্রিক্স

[1 1 1 1 1;
 1 1 1 0 1;
 1 1 0 0 1;
 0 1 0 0 1;
 0 1 0 0 1;
 0 0 0 0 1]

পরিশেষে, স্থানান্তরিত [1; 2; 3; 4; 5; 6]হিসাবে প্রাপ্ত কলাম ভেক্টর দ্বারা গুণমান (সম্প্রচারের সাথে উপাদান অনুসারে) , yপছন্দসই ফলাফল দেয়:

[1 1 1 1 1;
 2 2 2 0 2;
 3 3 0 0 3;
 0 4 0 0 4;
 0 5 0 0 5;
 0 0 0 0 6]

1
আমি একটি ম্যাটল্যাব / অক্টেভ জমা দেওয়ার আশা করছিলাম। আমি এতে কোনও চিন্তাভাবনা না করে এটিকে বাস্তবায়ন করেছি, তাই এটি সম্ভবত 40 বাইটের বেশি। খুব সুন্দর সমাধান :)
স্টিভি গ্রিফিন



3

পাইথ , 6 বাইট

.tSMQZ

এখানে চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন (প্রিন্ট-প্রিন্ট সহ)!


ব্যাখ্যা

.tSMQZ - সম্পূর্ণ প্রোগ্রাম।

  এসএমকিউ - প্রত্যেকের জন্য অন্তর্ভুক্ত ইউনিারি বিন্যাস পান।
.t - ট্রান্সপোজ, কপি সহ প্যাডিং ...
     জেড - ... শূন্য।
         - অন্তর্নিহিত মুদ্রণ।

একটি অ বিল্ট-ইন TRANSPOSE সংস্করণ হবে :

mm*hd<dkQeS

এটি নিম্নলিখিত হিসাবে কাজ করে:

mm*hd<dkQeS   - Full program.

m        eS   - Map over [0, max(input)) with a variable d.
 m      Q     - Map over the input with a variable k.
   hd         - d + 1.
  *           - Multiplied by 1 if...
     <dk      - ... d is smaller than k, else 0.
              - Output implicitly.


3

আসলে , 17 বাইট

;M╗♂R⌠╜;0@α(+H⌡M┬

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

ব্যাখ্যা:

;M╗♂R⌠╜;0@α(+H⌡M┬
;M╗                store the maximal element (M) of the input in register 0
   ♂R              range(1, n+1) for each n in input
     ⌠╜;0@α(+H⌡M   for each range:
      ╜;0@α          push a list containing M 0s
           (+        append to range
             H       take first M elements
                ┬  transpose

হ্যাঁ, আসলে প্যাডিং সমর্থন সহ জিপ দরকার ...
এরিক দি আউটগলফার

2

পাইকে , 3 বাইট

এটি পাইকের নতুন বৈশিষ্ট্য, হেক্সস এনকোডিংগুলি ব্যবহার করে ... সর্বোত্তম অংশটি হ'ল আমরা জেলি বেঁধে! কাঁচা বাইট:

4D 53 AC

এখানে চেষ্টা করুন!

ASCII-পাইক সমতুল্য 4 বাইট হবে :

MS.,

কিভাবে?

4 ডি 53 এসি - সম্পূর্ণ প্রোগ্রাম।

4D - মানচিত্র।
   53 - অন্তর্ভুক্ত ব্যাপ্তি।
      এসি - জিরো দিয়ে ট্রান্সপোজ করুন।
           - স্পষ্টভাবে আউটপুট।

-------------------------------------

এমএস।, - সম্পূর্ণ প্রোগ্রাম।

এম - মানচিত্র।
 এস - অন্তর্ভুক্ত ব্যাপ্তি।
  ।, - জিরো দিয়ে ট্রান্সপোজ করুন।
       - স্পষ্টভাবে আউটপুট।

এখানে ASCII সহ একটি দুর্দান্ত-মুদ্রণ সংস্করণ রয়েছে এবং এখানে হেক্স এনকোডিং সহ একটি রয়েছে।


2

পার্ল 6 , 39 বাইট

{zip (1 X..$_).map:{|@_,|(0 xx.max-1)}}

চেষ্টা করে দেখুন

সম্প্রসারিত:

{                # bare block lambda with implicit parameter 「$_」

  zip

    (1 X.. $_)   # turn each input into a Range that starts with 1

    .map:        # map each of those Ranges using the following code

    {            # bare block lambda with implicit parameter 「@_」 
                 # (「@_」 takes precedence over 「$_」 when it is seen)

      |@_,       # slip the input into a new list

      |(         # slip this into the list

        0        # a 「0」
        xx       # list repeated by

          .max   # the max of 「$_」 (implicit method call)
          - 1    # minus 1 (so that zip doesn't add an extra row)
      )
    }
}

দ্রষ্টব্য যে zipএকবার সংক্ষিপ্ত ইনপুট তালিকাটি শেষ হয়ে গেলে শেষ হয়।


2

সি # , 136 বাইট


উপাত্ত

  • ইনপুট Int32[] i একটি অ্যারে অ্যারে
  • আউটপুট Int32[,] একটি দ্বি-মাত্রিক অ্যারে।

Golfed

i=>{int m=System.Linq.Enumerable.Max(i),l=i.Length,x,y;var o=new int[m,l];for(y=0;y<m;y++)for(x=0;x<l;)o[y,x]=i[x++]>y?y+1:0;return o;};

Ungolfed

i => {
    int
        m = System.Linq.Enumerable.Max( i ),
        l = i.Length,
        x, y;

    var o = new int[ m, l ];

    for( y = 0; y < m; y++ )
        for( x = 0; x < l; )
            o[ y, x ] = i[ x++ ] > y ? y + 1 : 0;

    return o;
};

অসম্পূর্ণ পাঠযোগ্য

// Take an array of Int32
i => {

    // Store the max value of the array, the length and declare some vars to save some bytes
    int
        m = System.Linq.Enumerable.Max( i ),
        l = i.Length,
        x, y;

    // Create the bidimensional array to output
    var o = new int[ m, l ];

    // Cycle line by line...
    for( y = 0; y < m; y++ )

        // ... and column by column...
        for( x = 0; x < l; )

            // And set the value of the line in the array if it's lower than the the value at the index of the input array
            o[ y, x ] = i[ x++ ] > y ? y + 1 : 0;

    // Return the bidimentional array.
    return o;
};

সম্পূর্ণ কোড

using System;
using System.Collections.Generic;

namespace TestBench {
    public class Program {
        // Methods
        static void Main( string[] args ) {
            Func<Int32[], Int32[,]> f = i => {
                int
                    m = System.Linq.Enumerable.Max( i ),
                    l = i.Length,
                    x, y;
                var o = new int[ m, l ];
                for( y = 0; y < m; y++ )
                    for( x = 0; x < l; )
                        o[ y, x ] = i[ x++ ] > y ? y + 1 : 0;
                return o;
            };

            List<Int32[]>
                testCases = new List<Int32[]>() {
                    new[] { 1, 2, 5, 6, 4 },
                    new[] { 3, 5, 2, 1, 6 },
                    new[] { 1, 2, 3, 4, 3, 2, 1 },
                };

            foreach( Int32[] testCase in testCases ) {
                Console.WriteLine( " INPUT: " );
                PrintArray( testCase );

                Console.WriteLine( "OUTPUT: " );
                PrintMatrix( f( testCase ) );
            }

            Console.ReadLine();
        }

        public static void PrintArray<TSource>( TSource[] array ) {
            PrintArray( array, o => o.ToString() );
        }
        public static void PrintArray<TSource>( TSource[] array, Func<TSource, String> valueFetcher ) {
            List<String>
                output = new List<String>();

            for( Int32 index = 0; index < array.Length; index++ ) {
                output.Add( valueFetcher( array[ index ] ) );
            }

            Console.WriteLine( $"[ {String.Join( ", ", output )} ]" );
        }

        public static void PrintMatrix<TSource>( TSource[,] array ) {
            PrintMatrix( array, o => o.ToString() );
        }
        public static void PrintMatrix<TSource>( TSource[,] array, Func<TSource, String> valueFetcher ) {
            List<String>
                output = new List<String>();

            for( Int32 xIndex = 0; xIndex < array.GetLength( 0 ); xIndex++ ) {
                List<String>
                    inner = new List<String>();

                for( Int32 yIndex = 0; yIndex < array.GetLength( 1 ); yIndex++ ) {
                    inner.Add( valueFetcher( array[ xIndex, yIndex ] ) );
                }

                output.Add( $"[ {String.Join( ", ", inner )} ]" );
            }

            Console.WriteLine( $"[\n   {String.Join( ",\n   ", output )}\n]" );
        }
    }
}

রিলিজ

  • v1.0 - 136 bytes- প্রাথমিক সমাধান।

মন্তব্য

  • না


1

জাভা 10, 115 বাইট

a->{int l=a.length,m=0;for(int j:a)m=j>m?j:m;var r=new int[m][l];for(;l-->0;)for(m=0;m<a[l];r[m][l]=++m);return r;}

ব্যাখ্যা:

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

a->{                  // Method with integer-array parameter and integer-matrix return-type
  int l=a.length,     //  Length of the array
      m=0;            //  Largest integer in the array, 0 for now
  for(int j:a)        //  Loop over the array
    m=j>m?            //   If the current item is larger than `m`:
       j              //    Set `m` to this item as new max
      :               //   Else:
       m;             //    Leave `m` the same
  var r=new int[m][l];//  Result-matrix of size `m` by `l`, filled with zeroes by default
  for(;l-->0;)        //  Loop over the columns
    for(m=0;m<a[l];   //   Inner loop over the rows
      r[m][l]=++m);   //    Set the cell at position `m,l` to `m+1`
  return r;}          //  Return the result-matrix


0

প্রোটন , 38 বাইট

a=>[[i<j?-~i:0for j:a]for i:0..max(a)]

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


আমার অনুমান করা যাক, এর পরে বাগ কি জায়গা?
সেয়ার কোডেরিংহিংহ

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

দেখে মনে হচ্ছে আপনি একটি টান পেয়েছেন, আপনি এখন নোটিশটি সরাতে পারেন :)
এরিক দি আউটগল্ফার


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