একটি বিরল ম্যাট্রিক্স সংকুচিত করুন


18

সংক্ষেপিত স্পার্স সারি (সিএসআর, সিআরএস বা ইয়েল ফর্ম্যাট) ব্যবহার করে একটি বিচ্ছিন্ন ম্যাট্রিক্স সঙ্কুচিত করুন

এগুলি হ'ল সংক্ষেপে একই ধরণের (নতুন ইয়েল উপেক্ষা করুন)।

ইনপুট কোনও 2 ডি ডেটা কাঠামো (তালিকার তালিকা ইত্যাদি) হতে পারে: যেমন

[[0 0 0 0],
 [5 8 0 0],
 [0 0 3 0],
 [0 6 0 0]]

এবং আউটপুট তিনটি 1d ডাটা স্ট্রাকচার (তালিকা ইত্যাদি), হওয়া উচিত যে আউটপুট বোঝাতে A, IAএবং JAউদাহরণস্বরূপ,

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

প্রক্রিয়াটি উইকিপিডিয়া দ্বারা বর্ণিত:

  • অ্যারে A দৈর্ঘ্যের এনএনজেড এবং এম এর সমস্ত ননজারো এন্ট্রিগুলি বাম থেকে ডানদিকের উপর থেকে নীচে ("সারি-প্রধান") ক্রমে ধারণ করে।

  • অ্যারে আইএ দৈর্ঘ্য মি + 1 এর হয় এটি এই পুনরাবৃত্ত সংজ্ঞা দ্বারা সংজ্ঞায়িত করা হয়:

    • আইএ [0] = 0 আইএ [i] = আইএ [i - 1] + (মূল ম্যাট্রিক্সের (i - 1) -র সারিতে ননজারো উপাদানগুলির সংখ্যা)

    • সুতরাং, আইএর প্রথম এম উপাদানগুলি সূচকগুলি এম এর প্রতিটি সারিতে প্রথম নোনজারো উপাদানগুলির মধ্যে এ এ সংরক্ষণ করে এবং শেষ উপাদান আইএ [এম] এনএনজেড সংরক্ষণ করে, এ এর ​​উপাদানগুলির সংখ্যা, যা হিসাবেও ভাবা যেতে পারে ম্যাট্রিক্সের শেষের বাইরে খানিক সারিটির প্রথম উপাদানের A তে সূচক মূল ম্যাট্রিক্সের আই-তম সারির মানগুলি A [IA [i]] থেকে A [IA [i +] পর্যন্ত পড়ে 1] - 1] (উভয় প্রান্তে অন্তর্ভুক্ত), অর্থাত্ একটি সারির শুরু থেকে পরবর্তী সূচনার ঠিক আগের পরবর্তী শুরু। [5]

    • তৃতীয় অ্যারে, জেএ, এ এর ​​প্রতিটি উপাদানের এম তে কলাম সূচক ধারণ করে এবং পাশাপাশি এনএনজেডের দৈর্ঘ্যও রয়েছে।

যদি আপনার ভাষা প্রকৃত ডেটা স্ট্রাকচার সমর্থন করে না, ইনপুট এবং আউটপুট পাঠ্য হতে পারে।

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

ইনপুট 1:

[[0 0 0 0],
 [5 8 0 0],
 [0 0 3 0],
 [0 6 0 0]]

আউটপুট 1:

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

ইনপুট 2

[[10 20 0 0 0 0],
 [0 30 0 40 0 0],
 [0 0 50 60 70 0],
 [0 0 0 0 0 80]]

আউটপুট 2:

[ 10 20 30 40 50 60 70 80 ]
[  0  2  4  7  8 ]
[  0  1  1  3  2  3  4  5 ]

ইনপুট 3:

[[0 0 0],
 [0 0 0],
 [0 0 0]]

আউটপুট 3:

[ ]
[ 0 0 0 0 ]
[ ]

ইনপুট 4:

[[1 1 1],
 [1 1 1],
 [1 1 1]]

আউটপুট 4:

[ 1 1 1 1 1 1 1 1 1 ]
[ 0 3 6 9 ]
[ 0 1 2 0 1 2 0 1 2 ]

ইনপুট 5:

[[0 0 0 0],
 [5 -9 0 0],
 [0 0 0.3 0],
 [0 -400 0 0]]

আউটপুট 5:

[ 5, -9, 0.3, -400 ]
[ 0, 0, 2, 3, 4 ]
[ 0, 1, 2, 1, ]

ধরে নিন ইনপুটগুলিতে কোনও আসল সংখ্যা থাকতে পারে, আপনার গাণিতিক চিহ্ন বা ঘনিষ্ঠভাবে উপস্থাপনা বিবেচনা করার দরকার নেই (উদাহরণস্বরূপ 5,000 কখনই 5e3 হিসাবে প্রবেশ করা হবে না)। আপনি হ্যান্ডেল করার প্রয়োজন হবে না inf, -inf, NaNবা অন্য কোন 'সিউডো-সংখ্যার'। আপনি সংখ্যার আলাদা উপস্থাপনা আউটপুট করতে পারেন ( আপনি যদি এটি পছন্দ করেন তবে 5,000 5000 আউটপুট হতে পারে)।

স্কোরিং:

এটি একটি , সবচেয়ে কম বাইট জেতা।

লিডারবোর্ড

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

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

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

# Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


1-ভিত্তিক সূচকগুলি কি শেষ সারিতে ব্যবহার করা যেতে পারে?
লিও

@ জেএর পক্ষে? নং
পিওরফেরেট

1
IA[0] = 0সম্পূর্ণ অপ্রয়োজনীয় না ? এটি কেবল সংজ্ঞায়িত করা দরকার IA[i] = IA[i − 1]..., তবুও আমরা সহজভাবে বলতে পারি যে i-1 < 00 ব্যবহার করতে গেলে এটি IA [0] সর্বদা 0 এর সমান হয়, এজন্য এটি সংকোচিত করা যায় (হ্যাঁ, আমি বুঝতে পারি যে এটি আলগোরিদিমের সমালোচনা, এই চ্যালেঞ্জ না)।
ড্রাকো 18

আমাদেরও কি বিপরীত চ্যালেঞ্জ হবে?
অ্যাডম

1
ঝরঝরে! এর আগে দুটি ফর্ম্যাটেই দৌড়েনি, তবে এর আগে অন্য কেউ দেখতে পেয়ে আমি খুশি হয়েছি (আমি এই ব্যক্তির মতো হওয়া উচিত নয় যারা এই পুরানো অ্যালগরিদমে তুচ্ছ অপ্টিমাইজেশন স্পট করে)।
ড্রাকো 18

উত্তর:


6

এমএটিএল , 19 বাইট

!3#f!Dx0Gg!XsYshDq!

ইনপুট ;সারি বিভাজক হিসাবে ব্যবহার করে ।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন: 1 , 2 , 3 , 4 , 5

ব্যাখ্যা

!     % Implicit input. Transpose
3#f   % 3-output version of find: it takes all nonzero values and pushes
      % their column indices, row indices, and values, as column vectors
!     % Transpose into a row vector
D     % Display (and pop) vector of values
x     % Delete vector of row values
0     % Push 0
G     % Push input
g     % Convert to logical: nonzeros become 1
!     % Transpose
Xs    % Sum of columns. Gives a row vector
Ys    % Cumulative sum
h     % Prepend the 0 that's below on the stack
D     % Display (and pop) that vector
q     % Subtract 1 from the vector of row indices
!     % Transpose into a row vector. Implicitly display


3

হাস্কেল, 87 বাইট

f s|a<-filter(/=0)<$>s=(id=<<a,scanl(+)0$length<$>a,s>>= \t->[i|(i,e)<-zip[0..]t,e/=0])

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

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

a<-filter(/=0)<$>s           -- let a be the list of lists with all 0 removed]
                             -- e.g. [[1,0,0],[0,3,4]] -> [[1],[3,4]]

                             -- return a triple of

id=<<a                       -- a concatenated into a single list -> A 

scanl(+)0$length<$>a         -- partial sums of the length of the sublists of a
                             -- strating with an additional 0 -> IA

s>>=                         -- map the lambda over the sublists of s and concatenate
                             -- into a single list
   \t->[i|(i,e)<-zip[0..]t,e/=0]  -- the indices of the non-zero elements -> JA


2

এপিএল (ডায়ালগ) , 31 28 টি চর বা 36 33 বাইট *

⎕IO←0শূন্য ভিত্তিক সূচকের জন্য প্রয়োজন । আই / ও হ'ল তালিকার তালিকা।

{(∊d)(0,+\≢¨d←⍵~¨0)(∊⍸¨⍵≠0)}

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

{} বেনামে ফাংশন যেখানে আর্গুমেন্টটি represented দ্বারা প্রতিনিধিত্ব করে

(... )(... )(... ) তিনটি জিনিস একটি তালিকা ফিরে

  ⍵≠0 বুলিয়ান যেখানে প্রতিটি উপ-তালিকার জন্য ϵ n তালিকা থেকে যুক্তি আলাদা হয়
  ⍸¨list n তালিকা (সমতল) একক তালিকায় একত্রিত করতে
  

  ⍵~¨0 যুক্তি প্রতিটি উপ-তালিকা থেকে শূন্য অপসারণ
  d← দোকান হিসাবে
  ≢¨  ট্যালি প্রতিটি
  +\ ক্রমসঞ্চিত সমষ্টি
  0, একটি শূন্য পূর্বে লিখুন

  ∊dε nlist (চেপ্টা) একক তালিকায় একত্রিত

  


* Dyalog ক্লাসিক চালানোর জন্য, কেবল প্রতিস্থাপন সঙ্গে ⎕U2378


ভাল লাগছে, আমি কি তবে ইনপুট ফর্ম্যাট বুঝতে পারি না? f 4 4⍴এবং তারপর মান?
পিওরফেরেট

@ পিফেরফেরেট কোডটি ফাংশনটি সংজ্ঞায়িত করে f। ইনপুট সত্যিই একটি REPL, যা কল fফলাফলের উপর 4 4⍴…যা 4 × 4 ম্যাট্রিক্স ডেটা eshapes।
অ্যাডম

1
আর এসাপের জন্য আরএইচও। আমি এটা পাই!
পিওরফেরেট

1
@ শুফফেরেট আমি অনলাইনে চেষ্টা করে আপডেট করেছি ! পরীক্ষার কেসগুলি আরও ভাল দেখানোর লিঙ্ক।
অ্যাডম

2

পিএইচপি , 107 বাইট

<?for($y=[$c=0];$r=$_GET[+$l++];)foreach($r as$k=>$v)!$v?:[$x[]=$v,$z[]=$k,$y[$l]=++$c];var_dump($x,$y,$z);

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

পিএইচপি , 109 বাইট

<?$y=[$c=0];foreach($_GET as$r){foreach($r as$k=>$v)if($v){$x[]=$v;$z[]=$k;$c++;}$y[]=$c;}var_dump($x,$y,$z);

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


স্ট্রিং হওয়ার জন্য এটির কি সংখ্যাগুলি দরকার?
পিওরফেরেট

1
পিএইচপি-তে @Pureferret যে কোনও ইনপুট একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে। আমি ইনপুটটি $x[]=$v$x[]=+$v
কাস্ট

2

জাভাস্ক্রিপ্ট (ES6), 117 বাইট

a=>[a.map((b,i)=>(b=b.filter((x,c)=>x&&o.push(c)),m[i+1]=m[i]+b.length,b),m=[0],o=[]).reduce((x,y)=>x.concat(y)),m,o]

ইনপুট হল 2D সংখ্যার অ্যারে এবং আউটপুট একটি অ্যারে [A, IA, JA]

ব্যাখ্যা

a=>[
    a.map((b,i) => (                                // map each matrix row
            b = b.filter((x,c) => x                 // filter to only non-zero elements
                && o.push(c)                        // and add this index to JA
            )
            m[i+1] = m[i] + b.length,               // set next value of IA
            b                                       // and return filtered row
        ),
        m=[0],o=[]                          // initialize IA (m) and JA (o)
    ).reduce((x,y) => x.concat(y)),                 // flatten the non-zero matrix
m,o]                                                // append IA and JA

টেস্ট



1

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

{.flatmap(*.grep(+*)),(0,|[\+] .map(+*.grep(+*))),.flat.kv.flatmap:{$^a%.[0]xx?$^b}}

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

একক ম্যাট্রিক্স যুক্তি রয়েছে $_

  • .flatmap(*.grep(+*)) পুরো ম্যাট্রিক্সের ননজারো উপাদানগুলি নির্বাচন করে।
  • [\+] .map(+*.grep(+*))প্রতিটি সারিতে উপাদানগুলির সংখ্যার ত্রিভুজাকার হ্রাস (যা কিছু ভাষায় ডাকা হয় scan)। (0,|...)সেই তালিকায় একটি শূন্য প্রেন্ড করে।
  • .flat.kvম্যাট্রিক্সের সমস্ত উপাদানগুলির একটি সূচিকৃত তালিকা তৈরি করে। .flatmap: { $^a % .[0] xx ?$^b }অ্যারেতে কলামগুলির সংখ্যা দ্বারা প্রতিটি সূচকের মডুলাসের উপরে সমতল-মানচিত্র ( .[0]প্রথম সারিতে উপাদানগুলির সংখ্যা), উপাদানটি নিজেই প্রতিলিপি করেছেন, বুলিয়ান হিসাবে ব্যাখ্যা করেছেন। অর্থাৎ ননজারো উপাদানগুলি একবারে প্রতিলিপি করা হয় এবং শূন্য উপাদানগুলি শূন্য বার প্রতিলিপি করা হয় (অর্থাত, সরানো)।

1

পাইথন + সায়পি, 79 বাইট

আমার ধারণা বিল্ট-ইনগুলি নিষিদ্ধ ছিল না

from scipy.sparse import*
A=csr_matrix(input())
print A.data,A.indptr,A.indices

বিন্যাসে ইনপুট গ্রহণ করে [[0, 0, 0, 0],[5, 8, 0, 0],[0, 0, 3, 0],[0, 6, 0, 0]]


1

জাপট , 31 27 বাইট

অ্যারের অ্যারে হিসাবে ইনপুট নেয় এবং অ্যারের অ্যারে প্রদান করে।

[Uc f U®£X©NpYÃZèÃå+ iT NÅ]

এটি পরীক্ষা করুন ( -Qকেবলমাত্র দর্শনের উদ্দেশ্যে পতাকা)


ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট U
[[1,1,1],[1,1,1],[1,1,1]]

Uc f

প্রথম সাব =-অ্যারেয়ের জন্য, আমরা কোনও ফ্ল্যাটি উপাদান (যেমন, 0 সে) মুছে ফেলা ( c) Uএবং তারপরে এটি ফিল্টার ( f) করি ten
[1,1,1,1,1,1,1,1,1]

U®         Ã

আমরা একই সময়ে অন্য দুটি উপ-অ্যারে তৈরি করতে যাচ্ছি, ম্যাপিংয়ের মাধ্যমে U

£     Ã

আমরা প্রতিটি উপাদান (উপ-অ্যারে) এর উপরে ম্যাপ করি U

Xবর্তমান উপ-অ্যারের বর্তমান উপাদান এবং ©এটি যৌক্তিক এবং ( &&) তাই, Xসত্যবাদী না হলে (শূন্য নয়) পরবর্তী অংশটি কার্যকর করা হবে না।

NpY

জাপাতে, Nসমস্ত ইনপুট সমন্বিত একটি অ্যারে তাই এখানে Xসত্যবাদী হলে আমরা বর্তমান উপাদানটির pসূচক ( Y) টিপুন N
[[[1,1,1],[1,1,1],[1,1,1]],0,1,2,0,1,2,0,1,2]

মূল অ্যারের মানচিত্রে ফিরে আসুন এবং প্রতিটি উপাদান ( Z) এর জন্য আমরা সেই সাব-অ্যারেতে উপাদানগুলির সংখ্যা গণনা করি যা সত্যবাদী (শূন্য নয়)।
[3,3,3]

å+

সংমিশ্রণ করে সংখ্যার মাধ্যমে এই অ্যারে হ্রাস করুন।
[3,6,9]

iT

iদ্বিতীয় উপ-অ্যারেটি শেষ করতে সূচক 0 তে ( ) 0 প্রবেশ করান ।
[0,3,6,9]

চূড়ান্ত উপ-অ্যারের জন্য, আমরা কেবল N1 ম উপাদানটি থেকে স্লাইস করি ।
[0,1,2,0,1,2,0,1,2]


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