সর্বাধিক অ-শূন্য উপাদানগুলির সাথে সারিটির সূচক


26

এটি একটি সহজ: ইনপুট হিসাবে পূর্ণসংখ্যার একটি ম্যাট্রিক্স নিন এবং সর্বাধিক অ-শূন্য উপাদানগুলির সাথে সারির সূচকটি আউটপুট করুন। আপনি ধরে নিতে পারেন যে সর্বাধিক শূন্য উপাদানগুলির সাথে কেবল একটি সারি থাকবে।

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

এগুলি 1-ইনডেক্সড, আপনি 0 বা 1-ইনডেক্সেড চাইলে চয়ন করতে পারেন।

1
0
row = 1
---
0  -1
0   0
row = 1
---
1   1   0   0   0
0   0   5   0   0
2   3   0   0   0
0   5   6   2   2
row = 4
---
0   4   1   0
0   0  -6   0
0   1   4  -3
2   0   0   8
0   0   0   0
row = 3

উত্তর:


8

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

!gs&X>

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

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

!     % Transpose
g     % Logical: convert non-zeros to 1
s     % Sum of each column, or sum of row if there's a single row
&X>   % Arg max. Implicitly display


6

05 এ বি 1 ই , 8 6 বাইট

ΣĀO}θk

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

-২ বাইটস এরিক দি আউটগলফারকে ধন্যবাদ

ব্যাখ্যা

ΣĀO}θk
Σ  }   # Sort input by following code
 Ā      # Is element not 0? (vectorized)
  O     # Sum
    θk # Get index of "largest" element
       # Implicit print

-2 এর Āপরিবর্তে ব্যবহার করুন Ä0›
এরিক আউটগলফার

ইয়ে ঠিক বুঝতে পেরেছিলেন যে আমার কাছে যা ছিল তার চেয়ে সেই অংশটি করার আরও ভাল উপায় আছে। অভিশাপ আমার মনে হচ্ছে আমি প্রতিদিন একটি নতুন 05AB1E কমান্ড শিখছি ^^
দাতবোই

6

আর , 31 বাইট

pryr::f(which.min(rowSums(!m)))

একটি বেনামী ফাংশন প্রদান করে যা একটি ম্যাট্রিক্স গ্রহণ করে:

function(m)which.min(rowSums(!m))

rowSums!m0 থেকে 1 এবং অন্য কিছুর 0. তে রূপান্তর করে সারিগুলির which.minযোগফল দেয়, প্রথম সারির 1-ভিত্তিক সূচকটি প্রদান করে যার মধ্যে ন্যূনতম যোগফল থাকে (অর্থাত্, কোন সারিতে স্বল্পতম শূন্য রয়েছে)।

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


আপনার দরকার which.min()যেহেতু অ-শূন্য উপাদানগুলি মিথ্যা হয়ে উঠবে !m
ব্যবহারকারী 2390246

@ ব্যবহারকারী 2390246 ওহ, বাহ, আমি পুরোপুরি প্রশ্নটি ভুলভাবে লিখেছি। স্থির, আপনাকে ধন্যবাদ।
জিউসেপ

5

হাস্কেল, 46 42 41 বাইট

snd.minimum.(`zip`[1..]).map(filter(==0))

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

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

    map                    -- for each row
        (filter(==0))      -- collect the 0s
    (`zip`[1..])           -- pair with row index  (<#0s>, <index>)
  minimum                  -- find the minimum
snd                        -- extract index from pair

নিস! আমার চেয়ে ভাল, কিছু শেখা ভাল good
হেনরি

4

সি #, 69 বাইট

using System.Linq;m=>m.IndexOf(m.OrderBy(r=>r.Count(n=>n!=0)).Last())

List<int[]>ইনপুট হিসাবে একটি নেয় এবং 0-সূচী ফলাফল দেয়।



3

পাইথন 3, 54 48 বাইট

lambda a:a.index(min(a,key=lambda r:r.count(0)))

6 বাইট বন্ধ শেভ পুরানো সমাধান:

lambda a:min(range(len(a)),key=lambda i:a[i].count(0))

1
এটি কেবলমাত্র পাইথন 2 উত্তরের পরিবর্তনের সাথে সরাসরি মিলছে তা লক্ষ্য করেছেন।
সেন্সরযুক্ত ব্যবহারকারীর নাম

3

এপিএল (ডায়ালগ) , 11 বাইট

(⊢⍳⌈/)+/0≠⎕

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

0≠⎕ বুলিয়ান ম্যাট্রিক্স যেখানে অ-শূন্য

+/ সমষ্টি সারি

( নীচের ট্যাসিট ফাংশনটি যোগফলের তালিকায় প্রয়োগ করুন

⌈/ সর্বাধিক

 সূচক

 যুক্তি তালিকায়

)




2

জেলি , 5 বাইট

TL$€M

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

1-ইন্ডেক্স।

এতগুলি 5 বাইট সংস্করণ ...

TL$€M, T€L€M, TJ$€M, T€J€M, ¬¬Ṣ€M, ṠAṢ€M, ṠAS€M, AṠṢ€M, AṠS€M, ¬ċ€0M, ...


কেন তারা সবাই শব্দের মতো দেখাচ্ছে?
এয়ারড কোইনারিংহিংহিং

2

হাস্কেল - 69 68 বাইট

স্যারাকুসার জন্য একটি বাইট সংরক্ষণ করে!

সারিগুলি শূন্য সূচকযুক্ত

g=filter
m y=head$g((==maximum y).(y!!))[0..]
f=m.map(length.g(0/=))

ব্যবহার

f [[1,1,0,0,0],[2,3,0,0,0],[0,5,6,2,2],[1,1,1,1,1]]

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


সংজ্ঞা g=filterআপনাকে একটি বাইট সংরক্ষণ করে
সেরাকুসা

এমনকি আপনি সঙ্গে আরো কয়েকটি বাইট অপসারণ করতে পারেন m y=length$takeWhile(<maximum y)yএবং সংক্ষেপিত lengthপরিবর্তেfilter
Siracusa

2

Clojure, 64 বাইট

ভাগ্যক্রমে মূলটির সমান দৈর্ঘ্য: ইনপুটটিতে নেতিবাচক সংখ্যার সাথে এটিও কাজ করে:

#(nth(sort-by(fn[i](count(filter #{0}(% i))))(range(count %)))0)

মূল:

#(last(sort-by(fn[i](count(filter pos?(% i))))(range(count %))))

ম্যাট্রিক্সে সংখ্যাগুলি পূর্ণসংখ্যা হয়। তাই pos?সঠিক নয়
ক্লিফ্রুট

সত্য, আমি নেতিবাচক পূর্ণসংখ্যার জন্য অ্যাকাউন্ট করতে ভুলে গেছি। এখনই স্থির।
নিকোনিহার

2

কিউ / কেডিবি +, 25 17 16 বাইট

সমাধান:

(*)(<)sum(+)0=/:

উদাহরণ:

q)(*)(<)sum(+)0=/:enlist(1;0)
0
q)(*)(<)sum(+)0=/:(0 -1;0 0)
0
q)(*)(<)sum(+)0=/:(1 1 0 0 0;0 0 5 0 0;2 3 0 0 0;0 5 6 2 2)
3
q)(*)(<)sum(+)0=/:(0 4 1 0;0 0 -6 0;0 1 4 -3;2 0 0 8;0 0 0 0)
2

ব্যাখ্যা:

first iasc sum flip 0=/:  / ungolfed
                      /:  / each right, apply a function to each item to the right
                    0=    / returns boolean 1b or 0b if item in each list is equal to zero
               flip       / flip (rotate) the output
           sum            / sum these up
      iasc                / return indices if we were to sort ascending
first                     / take the first one

নোট:

সমস্যাটি মোটামুটি সোজা, এই সমাধানটি অত্যধিক জটিল বোধ করে। সাবমিট হিট করার সাথে সাথে আমি আমার উপায়গুলির ত্রুটিটি বুঝতে পারি।

বোনাস:

এখানে 169 9 বাইটের মধ্যে ওজনের আক এর সমাধান রয়েছে - কে বিল্ট-ইনগুলি ব্যবহার করার সময় আমাদের বন্ধনী প্রয়োজন না হওয়ার কারণে প্রায় একই কিন্তু 7 বাইট ছোট হয় এবং ফলস্বরূপ কিছু কিউ কীওয়ার্ডের চেয়ে সংক্ষিপ্ত হয়ে যায় ( যেমন +/জন্য sum(হবে (+/)কুই মধ্যে))।

*<+/+0=/:



1

ভি , 18 বাইট

òø0
jòÚDuu/"
dGؾ

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

বেশিরভাগ ভি উত্তরগুলির বিপরীতে, এটি 0-সূচকযুক্ত।

00000000: f2f8 300a 6af2 da44 7575 2f12 220a 6447  ..0.j..Duu/.".dG
00000010: d8be                                     ..

কোনও সংখ্যাগত সমর্থন ছাড়াই কোনও ভাষার পক্ষে খারাপ নয়! ;P

আমি এটিও আবিষ্কার করেছি যে কাউন্ট কমান্ডের বড় হাতের অক্ষর Ø, যা মারাত্মকভাবে ভেঙে গেছে।


1

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

def f(x):
    for e in x:
        e.sort()
    y=x[:]
    y.sort()
    return x.index(y[-1])

প্রথমে প্রতিটি সারিটি সারণি করুন [0,0,..,0,x,x,x]যাতে এন্ট্রিগুলি সম্পূর্ণ ম্যাট্রিক্সকে সাজান, যাতে শেষ প্রবেশটি yসারিটি সন্ধান করা হয়। অনুলিপিটি y=x[:]প্রয়োজনীয়, যেহেতু অভ্যন্তরীণভাবে .sort()কাজ করে, সুতরাং আমরা বাছাইয়ের পরে মূল সূচকটি জানি না।

আমি এই সমাধানটি আরও গল্ফ করার জন্য কোনও সহায়তার প্রশংসা করি। প্রতিটি লাইনের সাদা স্থানের কারণে বেশিরভাগ বাইট হারিয়ে যায়। কোডটি নিজেই কেবল 68 বাইট দীর্ঘ।

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


1
আমি পাইথন জানি না তবে আপনি কি এর থেকে বেশিরভাগ সাদা স্থানকে সরাতে পারবেন না?
TheLethalCoder

@ দ্য লেথলকোডার পাইথন কোডব্লকগুলির জন্য বন্ধনীগুলির পরিবর্তে বন্ধনী বা কীওয়ার্ডের পরিবর্তে ইন্ডেন্টেশন ব্যবহার করে (উদাহরণস্বরূপ .. শেষ)।
পি। সিহর

1
তারপরেও পাইথনকে মোটামুটি পরিমাণে গল্ফ করা যেতে পারে। নিম্নলিখিতটি আপনার মূল কোডের সমতুল্য:def f(a):b=list(map(sorted,a));return b.index(sorted(b)[-1])
সেন্সরযুক্ত ব্যবহারকারীর নাম

এই উত্তরটি লুপ এবং একটি ফাংশন ব্যবহার করে তবে কোনও নতুন লাইনের সাথে নয় তাই আমি ধরে নিয়েছি আপনি এটির অনেকগুলি সরিয়ে ফেলতে পারেন যদিও এটি পাইথন 2 হলেও হোয়াইটস্পেসের বিধিনিষেধ একই রকম হওয়া উচিত।
TheLethalCoder


1

পাইথন 2 , 64 55 52 48 বাইট

  • 9 রাইট শেভ করার জন্য @ রডকে ধন্যবাদ !! : এর গণনা করুন 0এবং এর min()পরিবর্তে ব্যবহার করুনmax()
  • @ রড আরও 3 টি বাইট সংরক্ষণ করেছেন: input()পরিবর্তে ব্যবহার করুনdef
  • @ovs 4 টি বাইট সংরক্ষণ করেছে : lambdaহ্যাশ-ম্যাপের ব্যবহার
lambda x:x.index(min(x,key=lambda n:n.count(0)))

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



ধন্যবাদ @ovs এটি ঠিক কীভাবে কাজ করে তা আমি বুঝতে পারি নি।
অফিসিয়ালাইম

1
এটা তোলে কমবেশি একই লজিক আপনি আপনার উত্তরে ছিল যে, কিন্তু ব্যবহার minসঙ্গে keyপ্যারামিটার
ডান্ডা

1

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

0-ইন্ডেক্স। ইনপুট হিসাবে 2D অ্যারে নেয়।

a=>(a=a.map(x=>x.filter(y=>y).length)).indexOf(Math.max(...a))

আপনি কি এটির জন্য একটি ব্যাখ্যা যুক্ত করতে পারেন? কি filter"ফিল্টার" শূণ্যসমূহ পরোক্ষভাবে?
TheLethalCoder

আপনি সারির সূচক আসতে অনুমিত করছি ...
নিল

এখনও আরও কিছুটা গল্ফ দেওয়ার চেষ্টা করছে, @ লেথালকোডার, আমার কাজ শেষ হয়ে গেলে একটি ডেমো এবং একটি ব্যাখ্যা যুক্ত করবে। এর মধ্যে, ভুয়া তা মাথায় রেখে আরও তথ্যের জন্য এখানে দেখুন । filter0
শেগি

@ নীল: এখনই স্থির।
শেগি

@ শেগি আমি ধরে নিয়েছিলাম যে filterবিষয়টি ঠিক তা নিশ্চিত করার ক্ষেত্রে হয়েছিল।
TheLethalCoder


1

পাইথ, 6 বাইট

xQh/D0

প্রদর্শন

সর্বাধিক অ-শূন্য উপাদানগুলির সাথে সারিটি সন্ধান করার পরিবর্তে আমি সর্বনিম্ন শূন্য উপাদানগুলির সাথে সারিটি পাই।

/D0: শূণ্যের ( ) Dগণনা দ্বারা ( ) অর্ডার /( 0)। সুস্পষ্টভাবে প্রয়োগ করা হয়েছে Q, ইনপুট।

h: প্রথম এবং সর্বনিম্ন, উপাদান নিন।

xQ: Element উপাদানটির xইনপুট ( Q) এ সূচক ( ) সন্ধান করুন ।


আমার কূপটি ঠিক এই ছিল। এটি অনুভূত অনুভূত হয়েছে এবং যেমন আমি কিছু অনুভব করছিলাম তবে মনে হচ্ছে এটি করার কোনও পরিষ্কার উপায় নেই :(
ফ্রাইআম দ্য এজিগম্যান


1

জাভা 8, 145 বাইট

import java.util.*;m->{int t=0,s=0,i=0,r=0;for(;i<m.size();i++){List l=(List)m.get(i);for(;l.remove(0L););s=l.size();if(s>t){t=s;r=i;}}return r;}

কুরুচিপূর্ণ, কিন্তু এটি কার্যকর ..

ব্যাখ্যা:

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

import java.util.*;         // Required import for List

m->{                        // Method with List parameter and integer return-type
  int t=0,s=0,i=0,          //  Temp integers
      r=0;                  //  Result integer
  for(;i<m.size();i++){     //  Loop over the List of Lists
    List l=(List)m.get(i);  //   Get the inner List
    for(;l.remove(0L););    //   Remove all zeros
    s=l.size();             //   Get the size of the List
    if(s>t){                //   If this size is larger than the previous
      t=s;                  //    Set `t` to this size
      r=i;                  //    And set the result to the index of this row
    }
  }                         //  End of loop
  return r;                 //  Return result-integer
}                           // End of method

1

জাভা (ওপেনজেডিকে 8) , 119 101 বাইট

m->{int i=m.length,M=0,I=0,c;for(;i-->0;){c=0;for(int x:m[i])if(x!=0)c++;if(c>M){M=c;I=i;}}return I;}

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

জাভা, যে মিষ্টি শব্দটি :)

18 বাইট সংরক্ষণ করার জন্য ধন্যবাদ, @ কেভিন ক্রুইজসেন;)


+1 সুন্দর উত্তর। আরও একটি ভার্বোজ উত্তর নিজেই পোস্ট করার কথা ছিল .. এটি পোস্ট করা হবে কিনা তা নিয়ে সন্দেহ ছিল এবং এটি আমার পক্ষে 145 বাইট এবং কুরুচিপূর্ণ হওয়ার পরে খুব ভাল ছিল না ;;) এটি এখানে ... সম্পাদনা: হুম, বিটিডাব্লু, আপনার শেষ দুটি পরীক্ষার কেস ব্যর্থ ..
কেভিন ক্রুইজসেন

আপনার কোডটি যাচাই করা মাত্র আমার উত্তরটিতে একটি বাগ আছে তা বুঝতে পেরেছি! ও_ও আমার পরীক্ষার কেসগুলি কীভাবে পাস হয় তা আমি জানি না ...
অলিভিয়ার গ্রেগোয়ার

যেতে ভাল, আমি এটি স্থির!
অলিভিয়ার গ্রাগোয়ার

1
নিস! এটা গলফ BTW, আপনি যা করতে পারেন একটি জন্য-প্রতিটি ভেতরের লুপ ব্যবহার করে পরিত্রাণ পেতে করার jএবং মত অন্যান্য আর অংশের j=m[i].length,এবং m[i][j]: এই মত m->{int i=m.length,M=0,I=0,c;for(;i-->0;){c=0;for(int x:m[i])if(x!=0)c++;if(c>M){M=c;I=i;}}return I;}( 101 বাইট )
কেভিন Cruijssen

1

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

m=>m.reduce((a,e,i)=>e.filter(x=>x).length>a?i:a,0)

যেখানে mএকটি 2 ডি অ্যারে এবং সূচকটি 0-ইনডেক্সড হয়

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


1

জাভা 8, 100 বাইট

m->m.indexOf(m.stream().map(z->{z.removeIf(x->x==0);return z;}).max((q,r)->q.size()-r.size()).get())

ব্যাখ্যা

তালিকাগুলির তালিকাগুলি! (এবং আমদানি ছাড়াই, বুট করতে!)

আসুন এই ছোট্ট ল্যাম্বডাটিকে খণ্ডগুলিতে ভেঙে দিন:

m.stream().map(z->{z.removeIf(x->x==0);return z;}

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

.max((q,r)->q.size()-r.size()).get()

আমরা আমাদের সদ্য ডি-জিরোইড সাবলিস্টগুলি দিয়ে যাচ্ছি এবং কেবল আমাদের বৃহত্তম সাবলিস্টটি পেয়ে একে অপরের পাশে কত বড় সেগুলি কেবল খতিয়ে দেখি। .get()কারণ Stream.max()একটি ঐচ্ছিক ফেরৎ, যে অতিরিক্ত ফাংশন কল প্রয়োজন।

m.indexOf()

আমরা সেই বৃহত্তম সাবলিস্টটি নিই এবং এটি আমাদের মূল ফলাফলের মধ্যে দিয়ে মূল তালিকাতে কোথায় রয়েছে তা সন্ধান করি!

নোট

বাইরের তালিকাটি খালি থাকলে এটি ব্রেক হয় তবে আমি নিচ্ছি

আপনি ধরে নিতে পারেন যে সর্বাধিক অ শূন্য উপাদানগুলির সাথে কেবল একটি সারি থাকবে।

বোঝাতে যে সর্বদা কমপক্ষে একটি সারি থাকবে। আমি ভুল হলে শুধরে.


1

পাইথন 2 , 51 বাইট

def f(x,i=0):print i;x[i].remove(0);f(x,-~i%len(x))

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

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

পাইথন 2 , 57 বাইট

lambda x,i=0:0in x[i]>x[i].remove(0)and f(x,-~i%len(x))|i

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

ইতিমধ্যে এখানে যা আছে তার থেকে আলাদা পদ্ধতির চেষ্টা করতে চেয়েছিলেন। সুতরাং এখানে আমি পুনরাবৃত্তভাবে অ্যারে একবারে 0 টি মুছে ফেলা যতক্ষণ না বর্তমান অ্যারেটির আর কোনও শূন্য নেই - এবং তারপরে সেই অ্যারের সূচকটি আউটপুট করে।


1

জাপট , 7 বাইট

0-ইন্ডেক্স। অ্যারের অ্যারে হিসাবে ইনপুট নেয়।

mè
bUrw

এটা পরীক্ষা করো


ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট U
[[0,4,1,0],[0,0,-6,0],[0,1,4,-3],[2,0,0,8],[0,0,0,0]]

প্রতিটি উপ-অ্যারেতে সত্যবাদী (অ-শূন্য নয়) উপাদানের গণনা ফিরিয়ে দেওয়ার জন্য মানচিত্র ( m) U। স্পষ্টতই এই নতুন অ্যারে নিয়োগ করুন U
[2,1,3,2,0]

Urw

বর্তমান মান এবং বর্তমান উপাদানটির চেয়ে বেশি পেয়ে ( r) অ্যারে হ্রাস করুন U
3

b

প্রথম সূচকটি পান Uযেখানে উপাদানটি সেই মানের সমান হয় এবং ফলকে সুস্পষ্টভাবে ফলাফল দেয়।
2

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