অ্যারের সমান করুন


26

চ্যালেঞ্জ

আপনি একটি অ্যারের দেওয়া হয় পূর্ণসংখ্যার। একটি সঙ্গে পদক্ষেপ আপনি পারেন বৃদ্ধি অথবা হ্রাস অ্যারের একটি উপাদান 1 । আপনার টাস্ক হয় সমান , এরে যে সব অ্যারের উপাদানের কিছু সম্পাদন দ্বারা সমান করতে হয় প্যাচসমূহ । তবে তা যথেষ্ট নয়! আপনি যতটা সম্ভব কম পদক্ষেপ করতে চান ।a

ইনপুট

  • পূর্ণসংখ্যার খালি খালি অ্যারে a
  • বৈকল্পিকভাবে, দৈর্ঘ্য এর ।a

আউটপুট

  • নূন্যতম কত প্যাচসমূহ করা প্রয়োজন সমান অ্যারের ।a

বিধি

  • বৈধ জমা দেওয়ার জন্য মানক বিধি , I / O , লুফোলস প্রযোজ্য।
  • এটি , তাই সংক্ষিপ্ততম সমাধান (বাইটে) জিতেছে। যথারীতি, গোল্ফ ভাষায় হাস্যকর সংক্ষিপ্ত সমাধানগুলি আপনার পছন্দের ভাষায় দীর্ঘ উত্তর পোস্ট করা থেকে নিরুৎসাহিত করবেন না।
  • এটি কোনও নিয়ম নয়, তবে সমাধানটির পরীক্ষার জন্য একটি লিঙ্ক এবং এটি কীভাবে কাজ করে তার একটি ব্যাখ্যা অন্তর্ভুক্ত করা থাকলে আপনার উত্তরটি আরও ভালভাবে পাওয়া যাবে।

উদাহরণ

Input                       --> Output

[10]                        --> 0
[-1, 0, 1]                  --> 2
[4, 7]                      --> 3
[6, 2, 3, 8]                --> 9
[5, 8, 12, 3, 2, 8, 4, 5]   --> 19
[1,10,100]                  --> 99

উত্তর:


9

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 19 বাইট

Tr@Abs[#-Median@#]&

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

1D পূর্ণসংখ্যার অ্যারের জন্য, Trএকইভাবে কাজ করে Total

কিভাবে?

ত্রিভুজ অসমতার সহজ প্রয়োগ।

...

আমি এখানে মূলত প্রমাণটি লিখতে চেয়েছিলাম, তবে তার পরিবর্তে /math/ সন্ধান করার সিদ্ধান্ত নিয়েছি এবং খুঁজে পেয়েছি যে মিডিয়ান পরম বিচ্যুতির যোগকে ছোট করে ফেলেছে ( নর্ম)L1

অপারেটরের নাম জেনে, এটি বিকল্প 19-বাইট সমাধান:

Norm[#-Median@#,1]&

এলোমেলো মন্তব্য: Medianকিছু গুরূত্বপূর্ণ ভাষার জন্য কিছুটা শক্ত।
ব্যবহারকারী 202729

1
একটু ঘুরে দেখার, "মধ্যমা গনা" প্রতিদ্বন্দ্বিতায় গূঢ় ভাষায় শুধুমাত্র জমা হয় ডব্ল্যু এর ব্রেন-বিমানবিধ্বংসী কামান এক
ব্যবহারকারী 202729

8

জাভাস্ক্রিপ্ট (নোড.জেএস) , 50 48 বাইট

আরনাউল্ডকে ধন্যবাদ 2 বাইট সংরক্ষণ করা

a=>a.sort((x,y)=>x-y,r=0).map(n=>r+=a.pop()-n)|r

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

অ্যারেটিকে আরোহণের পরে বাছাই করুন যোগফল:

  a[last]   -a[0] // moves to equalise this pair
+ a[last-1] -a[1] // + moves to equalise this pair
+ ...etc

1
সুন্দর! এর মাধ্যমে আপনি 2 বাইট সংরক্ষণ করতে পারেন a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
আর্নল্ড


6

পার্ল 6 , 29 28 বাইট

-1 বাইট ধন্যবাদ নওহেলহোফকে

{sum (.sort[*/2]X-$_)>>.abs}

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

ব্যাখ্যা

{                          }  # Anonymous code block
      .sort[*/2]              # Get the median of the input array
                X-$_          # Subtract all elements from the median
     (              )>>.abs   # Get the absolute of each value
 sum                          # Sum the values

1
আপনি X-বাইট সংরক্ষণ করতে অপারেন্ডগুলিকে অদলবদল করতে পারেন ।
nwellnhof


5

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

1 শাটগি ধন্যবাদ 1 বাইট সংরক্ষণ করা

a=>a.map(r=k=>r=a.map(n=>m+=n>k?n-k:k-n,m=0)|m>r?r:m)|r

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

কিভাবে?

আমি অনুপস্থিত কিছু কৌশল না থাকলে, জেএস-তে মিডিয়াকে গণনা করা দীর্ঘতর হতে পারে। সম্ভবত প্রায় 65 বাইট কারণ sort()ডিফল্ট লেসিকোগ্রাফিকাল সাজানোর জন্য প্রয়োজনীয় কলব্যাক এবং বরং দীর্ঘতর Math.abs():

a=>a.sort((a,b)=>b-a).map(n=>s+=Math.abs(n-a[a.length>>1]),s=0)|s

তার পরিবর্তে, আমরা সমান মান হিসাবে মূল অ্যারেতে সমস্ত মান চেষ্টা করি try


rপ্রথমটির মধ্যে ঘোষণা করে -2 বাইটmap
শেগি

5

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

f l=minimum[sum$abs.(m-)<$>l|m<-l]

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

সম্ভাব্য মধ্যক হিসাবে তালিকার প্রতিটি উপাদানকে পরীক্ষা করে এবং ক্ষুদ্রতম ফলাফল গ্রহণ করে, মধ্যকের সমস্ত উপাদানের মোট দূরত্ব খুঁজে পায়।


4

জেলি , 4 বাইট

ạÆṁS

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

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

ạÆṁS – Full program. Takes an array A of integers as input from argument 1.
 Æṁ  – Median. For odd-length A, middle element of S. For even-length A, the
       arithmetic mean of the two middle elements of S. Where S = A sorted.
ạ    – Absolute difference of each element with the median.
   S – Sum.

4

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

lambda l,n:sum(l[-~n/2:l.sort()])-sum(l[:n/2])

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

nআর্গুমেন্ট হিসাবে তালিকার দৈর্ঘ্য নেয় । প্রথম n/2এবং শেষ n/2উপাদানগুলিতে বাছাই করা তালিকাটি টুকরো টুকরো করে অর্ধের যোগফলকে নিম্ন-অর্ধের যোগফলকে গণনা করে ।

এক্সপ্রেশনটি l[-~n/2:l.sort()]কম্পিউটিংয়ের সমতুল্য l.sort(), যা তালিকার জায়গায় স্থান পরিবর্তন করে, তারপরে করণীয় l[-~n/2:None]যেখানে তালিকাগুলি স্লাইসিং Noneসেই l.sort()উত্পাদনের উপরের সীমানাকে উপেক্ষা করে । দেখে মনে হতে পারে তালিকার ডান কাটতে খুব দেরিতে তালিকাই সাজানো হয়েছিল, তবে পাইথন টুকরো টুকরো করার জন্য তালিকার "লক ইন" করার আগে স্লাইস যুক্তিগুলির মূল্যায়ন করে বলে মনে হচ্ছে।


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

lambda l,n:sum(abs(x-sorted(l)[n/2])for x in l)

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

মিডিয়ান থেকে প্রতিটি মানের দূরত্বের যোগফলের বিরক্তিকর পদ্ধতি। nযুক্তি হিসাবে দৈর্ঘ্য নেয় T


পাইথন , 51 বাইট

f=lambda l:l>l[l.sort():1]and l[-1]-l[0]+f(l[1:-1])

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

তালিকায় স্থানটি সাজান, তারপরে বার বার সর্বশেষ (সর্বাধিক অবশিষ্ট) এন্ট্রি বিয়োগ প্রথম (সর্বনিম্ন অবশিষ্ট) এন্ট্রি যুক্ত করুন এবং কেবলমাত্র 0 বা 1 অবধি অবধি এই উপাদানগুলি ছাড়াই তালিকায় পুনরাবৃত্তি করুন। Usings popএর পায় একই দৈর্ঘ্য: l.pop()-l.pop(0)+f(l)

এটি l.sort()এমন জায়গায় আটকে আছে যেখানে Noneএটির কোনও প্রভাব নেই। স্লাইসটি l[None:1]একই l[:1]কারণ Noneস্লাইসগুলিতে গুলি উপেক্ষা করা হয়।


পাইথন , 54 বাইট

lambda l:sum(l.pop()-l.pop(0)for _ in l[1:l.sort():2])

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

একটি সুন্দর তালিকা অনুধাবন যা পুনরাবৃত্তি যুক্তিটিকে উপেক্ষা করে এবং প্রথম এবং শেষের উপাদানগুলিকে বারবার পপ করে তালিকাকে স্থান পরিবর্তন করে। আমরা নিশ্চিত করেছিলাম যে তালিকার বোধগম্যতাটিকে প্রথমে এড়িয়ে যাওয়ার len(l)//2প্রতিটি উপাদানকে lপুনরুক্ত করে পুনরায় সম্পন্ন করা হয়েছে l[1::2]l.sort()উৎপাদনকারী Noneঅব্যবহৃত ফালি শেষ যুক্তি আটকে হতে পারে।


4

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

{⌊/+/|⍵∘.-⍵}

ব্রুটে প্রতিটি সংখ্যাকে সমান হিসাবে পরীক্ষা করে বল প্রয়োগ করে। স্বাচ্ছন্দ্য সংক্ষিপ্ততর কিনা তা নিশ্চিত নয় তবে আমি এটি বের করতে পারি না।

Tio


4

টিআই-বেসিক, 18 6 বাইট

sum(abs(Ans-median(Ans

মিশা লাভরভের থেকে -12 বাইট (আমি কিছুক্ষণের মধ্যে টিআই-বেসিক ব্যবহার করি নি এবং আমি ভুলে গিয়েছি যে এটির তালিকাগুলি এটি করতে পারে)

টিআই-বেসিক একটি টোকেনাইজড ভাষা । এই উত্তরে ব্যবহৃত সমস্ত টোকেনগুলি একটি বাইট।

হিসাবে ইনপুট লাগে {1,2,3,4}:prgmNAME

মূলত অন্যান্য উত্তরগুলির মতো একই ধারণা: মিডিয়ান দিয়ে বিয়োগ করুন, তারপরে যোগফলটি নিন।

ব্যাখ্যা:

sum(abs(Ans-median(Ans
sum(                    # 1 byte, Add up:
    abs(                # 1 byte, the absolute values of
        Ans-median(Ans  # 4 bytes, the differences between each element and the list's median

1
sum(abs(Ans-median(Ansকাজ করে। (এবং "টিআই -৪৪ প্লাস সিই" অতিরিক্ত সুনির্দিষ্ট বলে মনে হচ্ছে; এটি কমপক্ষে কোনও 83-সিরিজের ক্যালকুলেটর এবং সম্ভবত 73 এবং 82 এর জন্যও কাজ করবে))
মিশা লাভরভ

3

Röda , 33 বাইট

{|a|a|abs _-[sort(a)][#a//2]|sum}

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

ব্যাখ্যা:

{|a| /* Anonymous function with parameter a */
  a|         /* Push items in a to the stream */
             /* For each _ in the stream: */
  abs        /*   Abstract value of */\
  _-         /*   the value from stream minus */\
  [sort(a)][ /*     the value in the sorted version of a at index */
    #a//2    /*       length of a / 2 (the median) */
  ]|
  sum        /* Sum of all values in the stream */
}



1

জে , 15 বাইট

[:<./1#.|@-/~"{

মূলত শেগির জ্যাপ সমাধান হিসাবে একই।

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

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

|@-/~"{- অন্য সকলের কাছে প্রতিটি সংখ্যার /~পরম পার্থক্যের একটি সারণী তৈরি |@-করে"{

   |@-/~"{ 6 2 3 8
0 4 3 2
4 0 1 6
3 1 0 5
2 6 5 0

1#. প্রতিটি সারিতে যোগফল

   1#.|@-/~"{ 6 2 3 8
9 11 9 13

[:<./ সবচেয়ে ছোট আইটেমটি খুঁজে পায় (সর্বনিম্ন হ্রাস করুন)

   ([:<./1#.|@-/~"{) 6 2 3 8
9

1

কাঠকয়লা , 16 11 বাইট

I⌊EθΣEθ↔⁻ιλ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: @ আরনল্ডকে 5 টি বাইট সংরক্ষণ করা হয়েছে ব্যাখ্যা:

  Eθ        Map over input array
     Eθ     Map over input array
         ι  Outer value
          λ Inner value
        ⁻   Difference
       ↔    Absolute value
    Σ       Sum
 ⌊          Minimum
I           Cast to string
            Implicitly print

এটি 11 বাইটের জন্য কাজ করা উচিত
আর্নল্ড

@ আর্নল্ড আহ, অবশ্যই, বিজোড় দৈর্ঘ্যের অ্যারেগুলির জন্য মাঝারিটি সর্বদা অ্যারের সদস্য এবং এমনকি দৈর্ঘ্যের অ্যারেগুলির জন্য, মধ্যম দুটি এবং এর মধ্যবর্তী সমস্ত মানগুলির জন্য সমষ্টি একই হয়। ধন্যবাদ!
নীল

1

ভিজ্যুয়াল সি #, 138 বাইট

int s=0;foreach(string i in a)s+=int.Parse(i);int x=s/a.Length;int o=0;foreach(string i in a)o+=Math.Abs(int.Parse(i)-x);Console.Write(o);

ungolfed:

int s = 0;                    // Takes a string array of arguments a as input
foreach (string i in a)       
     s += int.Parse(i);       // s as sum of the array elements
int x = s / a.Length;         // calculating the target value of all elements
int o = 0;                    // o as minimum number of moves
foreach (string i in a)
     o += Math.Abs(int.Parse(i) - x);    // summing up the moves to the target value
Console.Write(o);

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


এই কোড টিআইওতে [1,10,100] এর জন্য ব্যর্থ হচ্ছে। এটি 99 এর পরিবর্তে 126 ফিরছে
মেরকাত

1

সি (জিসিসি), 100 93 বাইট

e(q,u,a,l,i,z)int*q;{i=1<<31-1;for(a=u;a--;i=z<i?z:i)for(l=z=0;l<u;)z+=abs(q[l++]-q[a]);q=i;}

ব্রুট-ফোর্স সমাধান, প্রতিটি উপাদানটির সাথে সমান করার চেষ্টা করে। এটি এখানে অনলাইনে চেষ্টা করুন

7 বাইট গল্ফ করার জন্য সিলিংক্যাটকে ধন্যবাদ ।

Ungolfed:

e(q, u, a, l, i, z) int *q; { // function taking an array of int and its length; returns an int (extra parameters are variables and don't have to be passed when calling e())
    i = 1 << 31 - 1; // construt the maximum value of a signed 4-byte integer
    for(a = u; a--; i = z < i ? z : i) // loop through the array, testing each element as the equalizer; if the number of moves is smaller than the current minimum, set it as the new minimum
        for(l = z = 0; l < u; ) // loop through the array ...
            z += abs(q[l++] - q[a]); // ... and sum the number of moves it takes to equalize each element
    q = i; // return the minimum number of moves
}

1

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

অ্যারে বাছাই করে, তারপরে একটি অনুলিপিটি লুপ করে মূল উপাদানগুলিকে পপ করে দেওয়া এবং পরম পার্থক্যটির সংক্ষিপ্তসার, যেটি ফেরতের জন্য অর্ধেক হওয়া দরকার।

function m($n){sort($n);foreach($n as$i)$r+=abs(array_pop($n)-$i);return$r/2;}

var_dump(
    m([10]),
    m([-1, 0, 1]),
    m([4, 7]),
    m([6, 2, 3, 8]),
    m([5, 8, 12, 3, 2, 8, 4, 5]),
    m([1,10,100])
);

আউটপুট:

int(0)
int(2)
int(3)
int(9)
int(19)
int(99)

1

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

function($a,$c){for(sort($a);$c-->$d;)$s+=$a[$c]-$a[+$d++];return$s;}

বেনামে ফাংশন। এটি অনলাইনে চেষ্টা করুন


@Progrock Input: *) A non-empty array a of integers *) Optionally, the length of a
তিতাস

@ প্রোগ্রোক একটি পোস্ট-হ্রাস একই কৌশল করে। তবে ইঙ্গিতটির জন্য ধন্যবাদ।
টাইটাস


-1

জাভা (জেডিকে), 112 বাইট

Golfed

private static int e(int[]a){int s=0;for(int i:a){s+=i;}s/=a.length;int r=0;for(int i:a){r+=abs(s-i);}return r;}

Ungolfed

private static int equalize(int[] array) {
    int sum = 0;
    for (int i : array) {
        sum += i;
    }
    sum /= array.length;
    int ret = 0;
    for (int i : array) {
        ret += abs(sum-i);
    }
    return ret;
}

1
পিপিসিজিতে আপনাকে স্বাগতম! দুর্ভাগ্যক্রমে, আপনার সমাধান ইনপুটটির জন্য ব্যর্থ হয় [1,1,4](4 টি ফেরত দেয় তবে উত্তরটি 3)।
ডেল্ফ্যাড0

1
আপনি যে মিডিয়াকে চেয়ে অ্যারের গড় ব্যবহার করছেন বলে মনে হচ্ছে
জো কিং

-1

কোটলিন অ্যান্ড্রয়েড, 200 বাইট

fun m(a:IntArray){var d=0;var s=0;var p=a.max()!!.times(a.size);var x =0;for(i in a.indices){x=a[i];d=0;s=0;while(d<a.size){if(x-a[d]<0)s=((x-a[d])*-1)+s;else s=((x-a[d]))+s;d++};if(p>s)p=s};print(p)}

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


মনে রাখবেন যে প্রাক-ঘোষিত ভেরিয়েবলের মাধ্যমে ইনপুট অনুমোদিত নয়। অতিরিক্ত হিসাবে, আপনি আপনার পরিবর্তনশীল নামগুলি কিছুটা ছোট করতে পারেন
জো কিং

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