ছদ্ম-উপাদানগুলি ফিল্টার করুন!


15

আমরা হাইপার-এভারেজকে সংজ্ঞায়িত করি তার উপসর্গের যোগফলগুলির গাণিতিক গড়ের একটি অ্যারে / তালিকার (সংখ্যার) সংখ্যার ।

উদাহরণস্বরূপ, তালিকার হাইপার-গড় [1, 4, -3, 10]নিম্নলিখিত পদ্ধতিতে গণনা করা হয়েছে:

  • আমরা উপসর্গ পাবেন: [1], [1, 4], [1, 4, -3], [1, 4, -3, 10]

  • প্রতিটি সারাংশ: [1, 5, 2, 12]

  • আর এখন এই তালিকায় উপাদানের গাণিতিক গড় পাবেন: (1 + 5 + 2 + 12) / 4 = 5

একজন সিউডো-উপাদান একটি অ্যারের একটি উপাদান যার মানকে হয় কঠোরভাবে তার অধি গড়ের তুলনায় কম। সুতরাং, আমাদের উদাহরণ তালিকার সিউডো-উপাদানগুলি হ'ল 1, 4এবং -3


ভাসমান-পয়েন্ট সংখ্যাগুলির একটি তালিকা দেওয়া, আপনার কাজটি সিউডো-উপাদানগুলির তালিকাটি ফিরিয়ে দেওয়া।

  • ভাসমান-পয়েন্টের ভুল সম্পর্কে আপনাকে চিন্তা করতে হবে না।

  • ইনপুট তালিকাটি কখনই খালি থাকবে না এবং এতে পূর্ণসংখ্যা এবং ভাসমান উভয়ই থাকতে পারে। যদি উল্লেখ করা হয়, পূর্ণসংখ্যাগুলি ভাসমান হিসাবে নেওয়া যেতে পারে (সহ <integer>.0)

  • আপনি ধরে নিতে পারেন যে সংখ্যাগুলি আপনার পছন্দের ভাষার সাথে মানানসই, তবে দয়া করে কোনওভাবেই এটি অপব্যবহার করবেন না।

  • Allyচ্ছিকভাবে, আপনি অ্যারের দৈর্ঘ্যটি ইনপুট হিসাবেও নিতে পারেন।

  • এটি , তাই ট্যাগের জন্য মানক বিধি প্রয়োগ হয়। বাইটের সংক্ষিপ্ততম কোড ( প্রতিটি ভাষায় ) জিতেছে!


পরীক্ষার কেস

ইনপুট -> আউটপুট

[10.3] -> []
[5.4, 5.9] -> [5.4, 5.9]
[1, 4, -3, 10] -> [1, 4, -3]
[-300, -20.9, 1000] -> [-300, -20.9]
[৩.৩, ৩.৩, ৩.৩, ৩.৩] -> [৩.৩, ৩.৩, ৩.৩, ৩.৩]
[-289.93, 912.3, -819.39, 1000] -> [-289.93, -819.39]

যদি কিছু ভাষাকে অ্যারের দৈর্ঘ্য অতিরিক্ত ইনপুট হিসাবে গ্রহণের অনুমতি দেওয়া হয় তবে সমস্ত ভাষার জন্য এটির অনুমতি দেওয়া উচিত
নেজিনিসিস

1
@ngenisis এটি সমস্ত ভাষার জন্য। যদি দৈর্ঘ্যটি গ্রহণের পাশাপাশি আপনার প্রোগ্রামটি সংক্ষিপ্ত করে তোলে তবে নির্দ্বিধায় এটি করুন। এই অনুমানটি ভাষা মোটেই সীমাবদ্ধ নয়।
মিঃ এক্সকডার

উত্তর:


7

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

ttYsYm<)

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

ব্যাখ্যা

tt    % Implicitly input array. Duplicate twice
Ys    % Cumulative sum
Ym    % Arithmetic mean
<     % Less than? (element-wise). Gives an array containing true / false
)     % Reference indexing : use that array as a mask to select entries 
      % from the input. Implicitly display

7

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

-1 বাইটস ম্যাজিক অক্টোপাস উরনকে ধন্যবাদ

ηOO¹g/‹Ï

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

η        # Get prefixes
 O       # Sum each
  O¹g/   # Get the mean ( length(prefix list) equals length(original list) )
      ‹Ï # Keep only the value that are less than the mean

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

নতুন ÅAকমান্ড ব্যবহার করে ।

ηOÅA‹Ï

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

η      # Get prefixes
 O     # Sum each
  ÅA   # Get the mean
    ‹Ï #  Keep only the value that are less than the mean

2
ηOO¹g/›Ï8 এর জন্য; এছাড়াও এটি দিয়ে শুরু হয় nOO!
ম্যাজিক অক্টোপাস আরন

5

জাপট ভি 2.0a0, 12 11 10 বাইট

f<Uå+ x÷Ul

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

  • 1 টি বাইট ETH একটি অপ্রয়োজনীয় চরিত্রটি নির্দেশ করে ধন্যবাদ সংরক্ষণ করেছে।

ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট U

f<

fপ্রতিটি উপাদান কম ... কিনা তা পরীক্ষা করে অ্যারে ফিল্টার করুন ( )

Uå+

Uসংক্ষিপ্তভাবে সংশ্লেষিতভাবে হ্রাস করা å...

x

ফলস্বরূপ অ্যারে সংমিশ্রণ দ্বারা হ্রাস সঙ্গে ...

/Ul

এবং দৈর্ঘ্য দ্বারা ভাগ ( l) U

সুস্পষ্টভাবে ফলাফল অ্যারে আউটপুট।



3

হয়তো <Ðf@পরিবর্তে হওয়া উচিত <Ðḟ@?
এরিক দি আউটগল্ফার

@ এরিকথ আউটগল্ফার কিন্তু এটি সমস্ত টেস্টকেসগুলিতে পাস করে।
লিকি নুন

তবুও কিছু আমার কাছে ভাল লাগছে না ... সবার আগে +\S÷Lহাইপার-এভারেজ গণনা করা হয়, তারপরে <Ðf@তার সঠিক যুক্তি হিসাবে রাখে এবং <ফিরে আসে 1যদি কোনও উপাদানটি ছদ্ম-উপাদান হয় তবে ফিল্টারিংয়ের পরিবর্তে ছদ্ম-উপাদানগুলির জন্য ফিল্টারিং করা হয় তাদের বাইরে।
এরিক আউটগল্ফার

@ এরিকথিউটগলফার এই প্রসঙ্গে, ফিল্টার আউট করার অর্থ ফিল্টারিং।
লিকি নুন

3

পাইথন 2 , 78 76 71 66 বাইট

-7 বাইটস মিঃ এক্সকোডারকে ধন্যবাদ।

lambda l:[x for x in l if x<sum(sum(l[:i])for i in range(len(l)))]

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


আমি মনে করি আপনি করতে পারেন range(len(l))এবং l[:i+1]-2 বাইটের জন্য (পরীক্ষিত নয়)
মিঃ এক্সকোডার

গল্ফ এবং অচল। ;) ধন্যবাদ!
15

যদিও আপনার সমাধানটি অবৈধ। এটি বৈধ x>sum(...)হওয়ার x<sum(...)জন্য পরিবর্তন করুন , এখনও 76 বাইট
মিঃ এক্সকোডার

Wirps ... স্থির। >।>
সম্পূর্ণমানবিক


3

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

f l=filter(<sum(scanl1(+)l)/sum(1<$l))l

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

দুর্ভাগ্যবশত lengthধরনের হয় Int, তাই আমি ফ্লোটিং পয়েন্ট বিভাগের সঙ্গে এটি ব্যবহার করতে পারবেন না /এবং আমি একটি কার্যসংক্রান্ত ব্যবহার করতে হবে: sum(1<$l)


3

কুণ্ডলী , 10 9 বাইট

@ জগারবকে 1 বাইট বন্ধ করে দেওয়ার জন্য ধন্যবাদ!

f</L⁰Σ∫⁰⁰

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

Ungolfed / ব্যাখ্যা

           -- argument is ⁰ (list) 
f       ⁰  -- filter the original list with
 <         --   element strictly smaller than
     Σ∫⁰   --   sum of all prefixes
  /L⁰      --   averaged out

2
f</L⁰Σ∫⁰⁰9 টি বাইট, তবে তিনটি ল্যাম্বডা আর্গুমেন্টকে আড়ষ্ট মনে হয় feels
জাগারব

3

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

a=>a.filter(x=>x<t/a.length,a.map(x=>t+=s+=x,s=t=0))

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

o.innerText=(f=

a=>a.filter(x=>x<t/a.length,a.map(x=>t+=s+=x,s=t=0))

)(i.value=[1,4,-3,10]);oninput=_=>o.innerText=f(i.value.split`,`.map(eval))
<input id=i><pre id=o>


3

জাভা 8, 81 বাইট

এই ল্যাম্বদা এক্সপ্রেশনটি একটি গ্রহণ করে List<Float>এবং এটিকে রূপান্তর করে। ইনপুট তালিকার পুনরাবৃত্তকারী অবশ্যই অপসারণ সমর্থন করবে ( ArrayListউদাহরণস্বরূপ)) এতে হস্তান্তর Consumer<List<Float>>

a->{float l=0,t=0,u;for(float n:a)t+=n*(a.size()-l++);u=t/l;a.removeIf(n->n>=u);}

অবহেলিত ল্যাম্বদা

a -> {
    float l = 0, t = 0, u;
    for (float n : a)
        t += n * (a.size() - l++);
    u = t / l;
    a.removeIf(n -> n >= u);
}

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

প্রাপ্তি স্বীকার

  • -3 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ
  • -17 বাইট Nevay ধন্যবাদ

1
আপনি সরিয়ে 3 বাইট সংরক্ষণ করতে পারবেন t/=l;এবং পরিবর্তন if(n<t)করার if(n<t/l)
কেভিন ক্রুইজসেন

1
ফলাফলের মানগুলি a->{float l=0,t=0,u;for(float n:a)t+=n*(a.size()-l++);u=t/l;a.removeIf(n->n>=u);}(81 বাইট) মুদ্রণের পরিবর্তে প্রদত্ত যুক্তিটি সংশোধন করতে সক্ষম হয়ে আপনি অ্যারের পরিবর্তে একটি তালিকা ব্যবহার করতে পারেন ।
নেভায়ে



2

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

lambda x:[w for w in x if w<sum(u*v+v for u,v in enumerate(x[::-1]))/len(x)]

ইনপুট এবং আউটপুট হল সংখ্যার তালিকা। এটি অনলাইন চেষ্টা করুন!

এটি পাইথন 2 এও কাজ করে ( printফুটারে সিনট্যাক্সের সুস্পষ্ট প্রতিস্থাপনের সাথে )।


আপনার কি তালিকার বিপরীত দরকার?
অফিসিয়ালাইম

@ আফিসিয়ালাইম আমার মনে হয়, কারণ গণনার মান 1,2,3, ... অবশ্যই x [0], x [-1], x [-2] এর সাথে যেতে হবে। তবে সব ক্ষেত্রেই ফলাফল একই রকম মনে হচ্ছে, হুম ...
লুইস মেন্ডো

1
আমি একটি পাল্টা নমুনা পেয়েছি যা দেখায় যে বিপরীতটি সত্যই প্রয়োজনীয়
লুইস মেন্ডো

আহ, কিছু মনে করবেন না .. আমি ঠিক তাই ভেবেছিলাম কারণ এটি সমস্ত পরীক্ষার কেস
অফিসিয়ালাইম





1

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

for($i=--$argc;$i;)$s+=$i--/$argc*$r[]=$argv[++$k];foreach($r as$x)$x<$s&&print$x._;

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়। এটি দিয়ে চালান -nrবা অনলাইনে চেষ্টা করুন


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



1

জে, 15 বাইট

#~[<[:(+/%#)+/\

এটি অনলাইন চেষ্টা করুন! জে-স্টাইলের অ্যারের প্রত্যাশা করে (এর _পরিবর্তে ব্যবহার করে negativeণাত্মক )- স্থানগুলি দ্বারা পৃথক করা উপাদানগুলির এবং - উদাহরণগুলির জন্য টিআইও লিঙ্কটি দেখুন)।

আমি জানি না প্রায় কাছের বন্ধনীগুলি সরানোর কোনও উপায় আছে কিনা (+/%# ) এর তবে এটি এবং ক্যাপটি সরিয়ে নেওয়া আমি প্রথমে এটি আরও গল্ফ করার চেষ্টা করব।

ব্যাখ্যা

কখনও কখনও জে ইংলিশের মতো পড়ে (আবদ্ধ)।

#~ [ < [: (+/ % #) +/\
                   +/\  Sum prefixes
                     \   Get prefixes
                   +/    Sum each
          (+/ % #)      Mean
           +/            Sum of array
              %          Divided by
                #        Length of array
   [ <                  Input array is less than?
                         (gives boolean array of pairwise comparisons)
#~                      Filter by

1
আপনি আমাকে এটি 3 মিনিটের দ্বারা মারধর করেছেন :)
জোনাহ

12 বাইট সহ#~]<1#.+/\%#
মাইল

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


1

গণিত, 35 বাইট

Cases[#,x_/;x<#.Range[#2,1,-1]/#2]&

Functionযা প্রথম আর্গুমেন্ট হিসাবে সংখ্যার একটি তালিকা #এবং দ্বিতীয় তর্ক হিসাবে তালিকার দৈর্ঘ্য প্রত্যাশা করে #2#.Range[#2,1,-1]/#2ইনপুট তালিকা #এবং তালিকার বিন্দু পণ্য গ্রহণ করে Range[#2,1,-1] == {#2,#2-1,...,1}, তারপরে দৈর্ঘ্য দ্বারা বিভক্ত হয় #2। তারপরে আমরা Cases x_ইনপুট তালিকায় ফিরে #আসি যা হাইপার-গড়ের চেয়ে কম।

দ্বিতীয় যুক্তি হিসাবে দৈর্ঘ্য ছাড়া আমাদের 6আরও বাইট প্রয়োজন :

Cases[#,x_/;x<#.Range[h=Tr[1^#],1,-1]/h]&

0

কে (ওকে) , 26 বাইট

সমাধান:

x@&x<(+/+/'x@!:'1+!#x)%#x:

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

উদাহরণ:

> x@&x<(+/+/'x@!:'1+!#x)%#x:1 4 -3 10
1 4 -3
> x@&x<(+/+/'x@!:'1+!#x)%#x:-289.93 912.3 -819.39 1000
-289.93 -819.39

ব্যাখ্যা:

ডান থেকে বামে ব্যাখ্যা করা। উপসর্গগুলি বের করার জন্য একটি সংক্ষিপ্ত উপায়ে সংগ্রাম:

x@&x<(+/+/'x@!:'1+!#x)%#x: / the solution
                        x: / store input in x, x:1 4 -3 10
                       #   / count, return length of x, #1 4 -3 10 => 4
     (               )     / do everything in the brackets together
                   #x      / count x
                  !        / til, range 0..x, !4 => 0 1 2 3
                1+         / add 1 vectorised, 1+0 1 2 3 => 1 2 3 4
             !:'           / til each, e.g. !1, !2, !3, !4
           x@              / index into x at these indices (now we have the prefixes)
        +/'                / sum (+ over) each, e.g. 1 5 2 12
      +/                   / sum over, e.g. 20
                      %    / right divided by left, 20%4 => 5 (now we have the hyper average)
   x<                      / boolean list where x less than 5
  &                        / indices where true, &0111b => 1 2 3
x@                         / index into x at these indices (now we have the filtered list)

মন্তব্য:

বিকল্প সংস্করণ প্যারামিটার হিসাবে ইনপুট দৈর্ঘ্য গ্রহণ ( 25 বাইট সমাধান):

> {x@&x<(+/+/'x@!:'1+!y)%y}[1 4 -3 10;4]
1 4 -3

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