নির্দিষ্ট অ-সংখ্যাীয় সারিগুলি সরান


16

যদি কোনও সন্দেহ থাকে: Nan = Non-numeric datatypeএই চ্যালেঞ্জের উদ্দেশ্যে।


এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ম্যাট্রিক্স / অ্যারে ইনপুট হিসাবে গ্রহণ করবে, পাশাপাশি কলাম সূচকগুলির একটি তালিকা।

চ্যালেঞ্জ সারি যেখানে নিদিষ্ট কলামে সব উপাদান অপসারণ করা হয় Nan। সারিটির অন্যান্য উপাদানগুলি সংখ্যাসূচক কিনা তা বিবেচ্য নয়। নিম্নলিখিত উদাহরণগুলি আশা করি এটি আরও পরিষ্কার করা হবে (এটি এক-সূচকযুক্ত):

Input array:
    16   NaN     3    13
     5    11   NaN     8
   NaN     7   NaN    12
     4    14   -15     1

Input column index: [1 3]

Output array:
16   NaN     3    13
 5    11   NaN     8
 4    14   -15     1

----

Input array:
    16   NaN     3    13
     5    11   NaN     8
   NaN     7   NaN    12
     4    14   -15     1

Input column index: 3

Output array =
    16   NaN     3    13
     4    14   -15     1

----

Input array:
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN

Input column index: 1 2 4

Output array:
 []

বিধি এবং ব্যাখ্যা:

  • ম্যাট্রিক্স সর্বদা খালি নয়
  • সংখ্যার মানগুলি সীমাবদ্ধ হবে, তবে অগত্যা পূর্ণসংখ্যা বা ধনাত্মক মান হবে না
  • কলাম সূচক ভেক্টর খালি থাকতে পারে (সেক্ষেত্রে কোনও সারি সরানো হবে না)
  • কলাম সূচীতে ম্যাট্রিক্সের মাত্রা অতিক্রম করা মান কখনই থাকবে না
  • আপনি ধরে নিতে পারেন কলাম সূচী তালিকায় সদৃশ থাকবে না
  • আপনি যদি শূন্য বা এক-সূচক মান ব্যবহার করতে চান তবে আপনি চয়ন করতে পারেন (দয়া করে নির্দিষ্ট করুন)
  • আপনি যে কোনও সুবিধাজনক বিন্যাসে ইনপুট নিতে পারেন
    • তালিকার তালিকা হিসাবে অ্যারে ঠিক আছে। কলাম সূচকগুলি পৃথক যুক্তি হতে পারে
  • ans = এবং অনুরূপ আউটপুট গ্রহণ করা হয়
  • আপনি কোন ধরণের অ-সংখ্যাযুক্ত ডেটাটাইপ ব্যবহার করতে চান তা চয়ন করতে পারেন
    • এই ডেটাটাইপ দিয়ে পাটিগণিত অপারেশন করা অসম্ভব হওয়া উচিত, বা যেমন ফাংশন ব্যবহার করে এটি একটি সীমাবদ্ধ সংখ্যায় রূপান্তর করা উচিত float(x)

এটি কোড গল্ফ, তাই বাইট জিতে সংক্ষিপ্ততম কোড।

উত্তর:


6

পাইথ, 16 19 10 9 7 10 বাইট

কলাম সূচকগুলি শূন্য থেকে শুরু হয়। ইনপুট হল তালিকার একটি তালিকা। অ-সংখ্যাসূচক মান হিসাবে একটি খালি স্ট্রিং ব্যবহার করে। প্রথম লাইনে কলাম সূচকগুলির তালিকা এবং দ্বিতীয় লাইনের মান সহ ম্যাট্রিক্স akes

?Qf-QxkTEE

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

ব্যাখ্যা

?Qf-QxkTEE       # Implicit: Q=column indices, E=Matrix

?Q       E       # If column list is empty no rows get removed
  f     E        # filter the given matrix by each row T
     xkT         # Get the indices of all occurences of an emtpy string (k) 
   -Q            # If the indices match with the given column indices, remove the row

হালনাগাদ: আমার প্রথম সমাধানটি কলাম সূচকগুলির একটি খালি তালিকা ভুলভাবে পরিচালনা করেছে। এটি (বেশ কুৎসিত) 3 বাইট ব্যয়ে স্থির করে নিন। কাজের পরে আরও ভাল করার চেষ্টা করবে ...

আপডেট 2: এটি নিচে 10 9 এ গল্ফ করেছে অ্যালগরিদমকে উল্লেখযোগ্যভাবে উন্নতি করে @ ফ্রাইআমডিজইম্যান থেকে কিছু 7 বাইটে গল্ফ করেছেন।

আপডেট3: থমাসকওয়া আবিষ্কার করা একটি বাগ ঠিক করা। তার প্রস্তাবিত 7-বাইট সমাধানটি খালি কলামের সূচকগুলি সঠিকভাবে পরিচালনা করতে পারে না, তাই আমি কেবল এখানে একটি টার্নারি দিয়ে সেই কেসটি ধরছি। আমি কীভাবে এই এটিএমটি সংক্ষিপ্ত করতে পারি তা দেখছি না।


1
আপনি প্রতিস্থাপন করতে পারেন Jসঙ্গে vzএবং Kসঙ্গে Qzইনপুট Qথেকে মূল্যায়ন ইনপুট থেকে শুরু করা হয়।
পূর্বকুডারী

@ Pietu1998 অনেক ধন্যবাদ! :) আমি জানতাম যে আমি এই বিষয়ে কিছু মিস করছি। দুর্ভাগ্যক্রমে আমি যখন আপনার পরামর্শটি বাস্তবায়নের জন্য আবার এটির দিকে তাকাল তখন আমি একটি বাগ পেয়েছি যা আমি আরও ভাল সমাধান না পাওয়া পর্যন্ত সামগ্রিকভাবে আমার বাইট সংখ্যা বাড়িয়ে তোলে।
ডেনকার

1
?KEfnmklKm@TdKQQখালি তালিকা পাইথের মধ্যে মিথ্যা এবং অ্যাসাইনমেন্ট স্টেটমেন্টগুলি নির্ধারিত মানটি প্রদান করে যা কিছু বাইট সংরক্ষণ করে। আমি আশা করি আপনি গল্ফিং পাইথ উপভোগ করবেন! :)
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান পরামর্শের জন্য ধন্যবাদ। আমি অ্যালগরিদমকে অনেক উন্নতি করায় আসলেই আর প্রাসঙ্গিক নয়, তবে আমি সাহায্যের প্রশংসা করি! :)
ডেনকার

খুব সুন্দর :) আপনি L->fnks@LTQE
FryAmTheEggman

6

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

(a,l)=>a.filter(r=>l.some(c=>r[a=0,c]<1/0)||a)

ব্যাখ্যা

অ্যারে হিসাবে সারিগুলির একটি অ্যারে এবং কলামগুলি পরীক্ষা করার জন্য 0-সূচিযুক্ত সংখ্যার একটি অ্যারের প্রত্যাশা করে। অ্যারেগুলির একটি অ্যারে প্রদান করে।

সোজা-এগিয়ে filterএবং some। পরীক্ষা NaNব্যবহার করে n < Infinity( trueজন্য সসীম সংখ্যা, falseজন্য NaNগুলি)।

var solution =

(a,l)=>
  a.filter(r=>     // for each row r
    l.some(c=>     // for each column to check c
      r[a=0,       // set a to false so we know the some was executed
        c]<1/0     // if any are not NaN, do not remove the row
    )
    ||a            // default to a because if l is of length 0, some returns false but
  )                //     we must return true
<textarea id="matrix" rows="5" cols="40">16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1</textarea><br />
<input type="text" id="columns" value="0 2" />
<button onclick="result.textContent=solution(matrix.value.split('\n').map(l=>l.split(' ').map(n=>+n)),(columns.value.match(/\d+/g)||[]).map(n=>+n)).join('\n')">Go</button>
<pre id="result"></pre>


সেই প্রান্তের কেসটি দুর্দান্ত পরিচালনা!
নিল

3

সিজেম, 18 বাইট

{{1$\f=_!\se|},\;}

স্ট্যাকের উপরের ম্যাট্রিক্স এবং শূন্য-ভিত্তিক কলাম সূচকগুলির প্রত্যাশিত একটি নামহীন ব্লক (ফাংশন) (উপরে ম্যাট্রিক্স), যা স্ট্যাকের উপরে ছাঁকানো ম্যাট্রিক্স ছেড়ে যায়। আমি খালি অ্যারেটি ""অ-সংখ্যাসূচক মান হিসাবে ব্যবহার করছি ।

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

{     e# Filter the matrix rows based on the result of this block...
  1$  e#   Copy the column indices.
  \f= e#   Map them to the corresponding cell in the current row.
  _!  e#   Duplicate, logical NOT. Gives 1 for empty column list, 0 otherwise.
  \s  e#   Convert other copy to string. If the array contained only empty arrays, this 
      e#   will be an empty string which is falsy. Otherwise it will contain the numbers 
      e#   that were left after filtering, so it's non-empty and truthy.
  e|  e#   Logical OR.
},
\;    e# Discard the column indices.

আমি কি এটি ভুল পরীক্ষা করছি বা এটি কোনও প্রদত্ত কলাম সূচি সম্পর্কে নিয়ম লঙ্ঘন করছে? The column index vector can be empty (in which case no rows will be removed)
ডেনকার

@ ডেনারএফে ড্যাম, 5 বাইট ব্যয়ে নির্ধারিত ...
মার্টিন এন্ডার

আমিও সেখানে ছিলাম ... আপনি এখনও আমার চেয়ে এক বাইট এগিয়ে ছিলেন, সুতরাং আমার পরিকল্পনাটি এখনও কার্যকর হয়নি: পি
ডেনকার

"খালি অ্যারে """ মানে কি "খালি স্ট্রিং"?
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশন সিজেমে কোনও পার্থক্য নেই। স্ট্রিংগুলি কেবলমাত্র অক্ষরের অ্যারে, তাই []এবং"" অভিন্ন হয় এবং প্রচলিত উপস্থাপনা হয় ""(যেমন আপনি খালি অ্যারের স্ট্রিংয়েটিং করার পরে এটি পাবেন)।
মার্টিন এন্ডার

3

এপিএল, 19 বাইট

{⍵⌿⍨∨/⍬∘≡¨0↑¨⍵[;⍺]}

বাম যুক্তি সূচকের তালিকা হওয়া উচিত (এবং এটি অবশ্যই একটি তালিকা হতে হবে, কোনও স্কেলারের নয়), ডান যুক্তিটি ম্যাট্রিক্স। এপিএলে দুটি ডেটাটাইপ, সংখ্যা এবং অক্ষর রয়েছে, সুতরাং এটি অক্ষরের প্রকারগুলি ফিল্টার করে।

পরীক্ষা:

      m1 m2
   16  NaN    3  13   NaN  NaN  NaN  NaN  
    5   11  NaN   8   NaN  NaN  NaN  NaN  
  NaN    7  NaN  12   NaN  NaN  NaN  NaN  
    4   14  ¯15   1   NaN  NaN  NaN  NaN  
      1 3 {⍵⌿⍨∨/⍬∘≡¨0↑¨⍵[;⍺]} m1
16  NaN    3  13
 5   11  NaN   8
 4   14  ¯15   1
      (,3) {⍵⌿⍨∨/⍬∘≡¨0↑¨⍵[;⍺]} m1
16  NaN    3 13
 4   14  ¯15  1
      1 2 4 {⍵⌿⍨∨/⍬∘≡¨0↑¨⍵[;⍺]} m2 ⍝ this shows nothing
      ⍴1 2 4 {⍵⌿⍨∨/⍬∘≡¨0↑¨⍵[;⍺]} m2 ⍝ the nothing is in fact a 0-by-4 matrix
0 4

ব্যাখ্যা:

  • ⍵[;⍺]: ম্যাট্রিক্স থেকে প্রদত্ত কলামগুলি নির্বাচন করুন
  • 0↑¨: প্রথমটি নাও 0 প্রতিটি আইটেমের শুরু থেকে উপাদান গ্রহণ করুন
  • ⍬∘≡¨: সংখ্যার খালি তালিকার সাথে তুলনা করুন
  • ∨/: সারিগুলির মধ্যে কমপক্ষে একটি আইটেম মেলে দেখুন
  • ⍵⌿⍨: ম্যাট্রিক্স থেকে এই সারি নির্বাচন করুন

2

ম্যাটল্যাব, 32 28 বাইট

আমি একবারের জন্য আমার নিজের প্রশ্নের উত্তর দেব। ম্যাট্ল্যাব-এ আমি যা করতে পারি তা হ'ল 28 বাইট। আমি উভয় allএবং isnanএকরকম উভয় ব্যবহার এড়াতে আশা করছিলাম , তবে এখনও কোনও উপায় খুঁজে পাইনি।

@(A,c)A(any(A(:,c)<inf,2),:)

টেস্ট:

A =
    35     1   NaN   NaN   NaN    24
     3    32   NaN    21    23    25
    31   NaN   NaN   NaN    27    20
   NaN    28   NaN    17   NaN    15
    30     5   NaN    12    14   NaN
     4    36   NaN    13    18    11

f(A,[3,5])
ans =
     3    32   NaN    21    23    25
    31   NaN   NaN   NaN    27    20
    30     5   NaN    12    14   NaN
     4    36   NaN    13    18    11

এটি একটি নামবিহীন বেনামে ফাংশন যা ইনপুট ম্যাট্রিক্সকে প্রথম ইনপুট ভেরিয়েবল হিসাবে গ্রহণ করে এবং দ্বিতীয় হিসাবে কলাম সূচকগুলির একটি তালিকা।

ম্যাটল্যাবে, NaN < Infমূল্যায়নের জন্য মিথ্যা। এটি অনুমান করা যায় যে সমস্ত মান সীমাবদ্ধ, সুতরাং মানগুলি infঅ-সংখ্যাসূচক কিনা তা পরীক্ষা করার সমান হয় কিনা তা পরীক্ষা করা হয়।any(...,2)দ্বিতীয় মাত্রা (সারি) বরাবর কোনও সত্য মান আছে কিনা তা পরীক্ষা করে দেখুন। যদি এটি হয়, তবে সেই সারিগুলি ফিরিয়ে দেওয়া হবে।

পুরাতন রুপ:

@(A,c)A(~all(isnan(A(:,c)),2),:)

isnan(A(:,c))নির্দিষ্ট কলামগুলির জন্য বুলিয়ানগুলির সাথে একটি অ্যারে প্রদান করে। ~all(isnan(A(:,c)),2)দ্বিতীয় মাত্রা (সারি) সহ সমস্ত মান অ-সংখ্যাসূচক কিনা তা পরীক্ষা করে এবং এটিকে উপেক্ষা করে। এটি আমরা যে পজিশনে রাখতে চাই তার সাথে বুলিয়ান ভেক্টরের ফলস্বরূপ। A(~all(isnan(A(:,c)),2),:)সম্পূর্ণ সারিগুলি বের করার জন্য লজিকাল ইনডেক্সিং ব্যবহার করেA


নিম্নলিখিত 24 বাইট সমাধান কাজ করবে যদি মানগুলি শূন্য-না হওয়ার নিশ্চয়তা দেওয়া থাকে:

@(A,c)A(any(A(:,c),2),:)

2

রুবি, 48 বাইট

->a,c{a.select{|r|c.map{|i|Fixnum===r[i]}.any?}}

ইনপুট 0-ভিত্তিক সূচকগুলি 1

মোটামুটি স্ব-ব্যাখ্যামূলক, আসলে। selectঅ্যারে থেকে উপাদানগুলি যেখানে সারিগুলির উপরে any?সূচকগুলির mapপেড হয় Fixnum

নমুনা রান:

irb(main):010:0> (->a,c{a.select{|r|c.map{|i|Fixnum===r[i]}.any?}})[[[16,'',3,13],[5,11,'',8],['',7,'',12],[4,14,-15,1]],[0,2]]
=> [[16, "", 3, 13], [5, 11, "", 8], [4, 14, -15, 1]]

1: অবশেষে প্রথমবার চেষ্টা করে আমি এই শব্দটির বানানটি সঠিকভাবে করেছি! \ ণ /


2

কে 5, 15 বাইট

এটি 0-ইনডেক্সড কলাম এবং কে-এর প্রাকৃতিক তালিকাগুলির তালিকা ম্যাট্রিক্স উপস্থাপনা:

{x@&~&/'^x[;y]}

ম্যাট্রিক্স ( x@) সারিগুলিতে সূচক যেখানে ( &) প্রতিটি ( ~&/') সমস্ত নাল নয় (^ ) নয়।

কর্মে:

  m: (16 0N 3 13;5 11 0N 8;0N 7 0N 12;4 14 -15 1);
  f: {x@&~&/'^x[;y]};

  f[m;0 2]
(16 0N 3 13
 5 11 0N 8
 4 14 -15 1)

  f[m;2]
(16 0N 3 13
 4 14 -15 1)

2

এমএটিএল , 15 16 বাইট

tiZ)tn?ZN!XA~Y)

NaNহিসাবে ইনপুট প্রতিনিধিত্ব করা হয় N। সূচীকরণ 1-ভিত্তিক। উদাহরণস্বরূপ, প্রথম পরীক্ষার ক্ষেত্রে ইনপুটটি হয়

[16 N 3 13; 5 11 N 8; N 7 N 12; 4 14 -15 1]
[1 3]

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

ব্যাখ্যা

t       % implicitly input matrix, M. Duplicate
i       % input vector specifying columns
Z)      % matrix N containing those columns of M
tn?     % duplicate matrix N. If non-empty ...
  ZN    %   true for NaN values in matrix N
  !     %   transpose
  XA    %   "all" within each column: gives true for rows of N that contained all NaN's
  ~     %   logical negate
  Y)    %   apply this logical index as a row index into the copy of M that was left
        %   at the bottom of the stack
        % ... implicitly end if
        % implictly display stack contents. If the input vector was empty, the stack
        % contains the original matrix M and an empty matrix. The latter produces no
        % displayed output. If the input vector was non-empty, the stack contains the
        % resulting matrix N

2

আর, 49 বাইট

function(m,j)m[!!rowSums(!is.nan(m[,j,drop=F])),]

ইনপুটটি 1-ভিত্তিক। ফাংশনটি একটি ম্যাট্রিক্স ( m) এবং কলাম সূচকগুলির ভেক্টর ( j) নিখোঁজ হতে পারে।

দুটি পরীক্ষার মামলা:

> f <- function(m,j)m[!!rowSums(!is.nan(m[,j,drop=F])),]
> f(m)   
      V1  V2  V3 V4
[1,]  16 NaN   3 13
[2,]   5  11 NaN  8
[3,] NaN   7 NaN 12
[4,]   4  14 -15  1

> f(m, c(1,3))
     V1  V2  V3 V4
[1,] 16 NaN   3 13
[2,]  5  11 NaN  8
[3,]  4  14 -15  1

0

লুয়া, 148 বাইট

একটি ফাংশন যা একটি ম্যাট্রিক্স এবং একটি অ্যারে ইনপুট হিসাবে নেয় এবং এতে সংশ্লিষ্ট সারিগুলির সাথে একটি ম্যাট্রিক্স আউটপুট দেয় nil। অ্যারে যেমন সি এর অ্যারেগুলির মতো একই, নিহিলটিংয়ের মতোfree() তাই জঞ্জাল সংগ্রহকারী খুব বেশি দূরে না হওয়ায় নিহিলাইটিং এটিকে করার ।

অ্যারেগুলি "NaN"লুয়ায় 1-সূচকযুক্ত এবং আমি স্ট্রিংটি নন-নবার উপাদান হিসাবে ব্যবহার করি ।

function f(m,l)c=1 while(c<#m)do x=0 for j=1,#l do x=x+((type(m[c][l[j]])=="number")and 0 or 1)end m[c]=(x<#l and m[c] or nil)c=c+1 end return m end

আপনি লুয়া অনলাইন চেষ্টা করতে পারেন , এবং এই জমা দেওয়ার জন্য নিম্নলিখিত কোডের নমুনাটি অনুলিপি / অনুলিপি করতে পারেন :

-- The function that does the stuff
function f(m,l)
  c=1 
  while(c<#m)
  do 
    x=0 
    for j=1,#l 
    do 
      x=x+((type(m[c][l[j]])=="number")and 0 or 1)
    end
    m[c]=(x<#l and m[c] or nil)
    c=c+1 
   end 
   return m 
end
-- A function to format matrixes into "readable" strings
function printMatrix(matrix,len)
  s="{"
  for v=1,len
  do
    if matrix[v]~=nil
    then
      s=s.."{"..table.concat(matrix[v],",").."}"..(v<len and",\n "or"")
    end
  end
  s=s.."}"
  print(s)
end

nan="NaN"
-- Datas in, indexed as matrices[testCase][row][column]
matrices={{{7,nan,5,3},{5,4,nan,4},{nan,4,nan,9},{5,7,9,8}},
{{16,nan,3,13},{5,11,nan,8},{nan,7,nan,12},{4,14,-15,1}},
{{nan,nan,nan,nan},{nan,nan,nan,nan},{nan,nan,nan,nan},{nan,nan,nan,nan}}}
indexes={{1,3},{3},{1,2,4}}

-- looping so we can test lots of things at once :)
for i=1,#matrices
do
  print("\ninput: "..table.concat(indexes[i]," "))
  printMatrix(matrices[i],4)
  print("output:")
  printMatrix(f(matrices[i],indexes[i]),4)
end

0

গণিত, 52 51 49 46 বাইট

Delete[#,Extract[#,{;;,#2}]~Position~{NaN..}]&

ইনপুট হ'ল [তালিকার তালিকা হিসাবে ম্যাট্রিক্স, কলামগুলির ভেক্টর]


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! :) দয়া করে আপনার ফর্ম্যাটটি সংশোধন করুন এবং চ্যালেঞ্জের অনুরোধ অনুসারে কলামগুলির সূচিকরণ সহ আপনার ইনপুট ফর্ম্যাটটি নির্দিষ্ট করুন।
ডেনকার

0

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

m#[]=m
m#r=[l|l<-m,any(<1/0)$map(l!!)r]

এটি 0-ভিত্তিক সূচকগুলি ব্যবহার করে। ব্যবহারের উদাহরণ (আমি sqrt(-1)তৈরি করতে ব্যবহার করছি NaN):

*Main> [[16,sqrt(-1),3,13], [5,11,sqrt(-1),8], [sqrt(-1),7,sqrt(-1),12], [4,14,-15,1]] # [0,2]
[[16.0,NaN,3.0,13.0],[5.0,11.0,NaN,8.0],[4.0,14.0,-15.0,1.0]]

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

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