দ্য উইল রজার্স ফেনোমেনন


35

তথাকথিত উইল রজার্স ঘটনাটি যখন দুটি উপাদানগুলির মধ্যে একটি উপাদান সরানো হয় তখন দুটি (বহু) সেটগুলিতে গড় বাড়িয়ে পরিসংখ্যানগুলিকে ঝাঁকুনির একটি উপায় বর্ণনা করে। একটি সাধারণ উদাহরণ হিসাবে, দুটি সেট বিবেচনা করুন

A = {1, 2, 3}
B = {4, 5, 6}

তাদের গাণিতিক অর্থ যথাক্রমে 2এবং 5হয়। আমরা সরালে 4করতে A:

A = {1, 2, 3, 4}
B = {5, 6}

এখন গড় গড় 2.5এবং 5.5যথাক্রমে, তাই উভয় গড়গুলি একটি সাধারণ পুনর্নির্মাণের মাধ্যমে উত্থাপিত হয়েছিল।

অন্য উদাহরণ হিসাবে বিবেচনা করুন

A = {3, 4, 5, 6} --> A = {3, 5, 6}
B = {2, 3, 4, 5} --> B = {2, 3, 4, 4, 5}

অন্যদিকে, সেটের জন্য উভয় গড় বাড়ানো সম্ভব নয়

A = {1, 5, 9}
B = {4, 5, 7, 8}

চ্যালেঞ্জ

অ-নেতিবাচক পূর্ণসংখ্যার দুটি তালিকা দেওয়া, একটি তালিকা থেকে অন্য তালিকায় একক পূর্ণসংখ্যার স্থানান্তর করে উভয় গড় বাড়ানো সম্ভব কিনা তা নির্ধারণ করুন।

খালি তালিকার গড় নির্ধারিত হয় না, সুতরাং তালিকার একটিতে যদি কেবল একটি উপাদান থাকে তবে এই উপাদানটি সরানো যায় না।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

ইনপুট কোনও সুবিধাজনক স্ট্রিং বা তালিকার বিন্যাসে নেওয়া যেতে পারে।

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

যদি একক পূর্ণসংখ্যা এবং অন্যথায় মিথ্যা বলা যায় তবে উভয় গড় উত্থাপিত হতে পারে যদি আউটপুট সত্য হয়।

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

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

Truthy:

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

Falsy:

[1], [2]
[2, 4], [5]
[1, 5], [2, 3, 4, 5]
[2, 1, 2, 3, 1, 3], [5, 1, 6]
[4, 4, 5, 2, 4, 0], [9, 2, 10, 1, 9, 0]

লিডারবোর্ড

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

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

# Language Name, N bytes

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

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

<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 53913</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


একজন গণিতবিদ এবং কোডার হিসাবে আমি আসলেই এই চ্যালেঞ্জটির সমাধান করতে পারি না, তবে আমি নিম্নলিখিত প্রশ্নটি দ্বারা আগ্রহী: যদি উভয় গড় এক সেট থেকে অন্য সেটটিতে পূর্ণসংখ্যা (পাঁচটি বলুন) এর সীমাবদ্ধ সংগ্রহ স্থানান্তরিত করা যায় তবে , এটি কি সর্বদা অনুসরণ করে যে উভয় গড়গুলি কেবলমাত্র একটি পূর্ণসংখ্যা স্থানান্তরিত করে বাড়ানো যেতে পারে ? এইভাবে দেখানো হচ্ছে যে চ্যালেঞ্জটি সত্যই সমস্ত ক্ষেত্রে আচ্ছাদন করে।
ট্রেভর জে রিচার্ডস

3
@ ট্রেভররিচার্ডস আমি মনে করি সর্বশেষ জালিয়াতি পরীক্ষার কেসটি এটি জুড়ে। আপনি একটি সরাতে পারে 1এবং 9ওভার, যা উভয় গড় বাড়াতে হবে, কিন্তু আপনি একটি একক এক চলন্ত দ্বারা তা করতে পারবে না।
মার্টিন ইন্ডার

@ ট্রেভররিচার্ডস সাধারণভাবে, সেটের A & B এর গড় গড় যদি একটি & বি থাকে তবে <বি </ b> এর বি সাবসেট সি থাকে তবে দুটি গড় বৃদ্ধি করা যেতে পারে যে একটি <সি <বি হয়। অন্যদিকে, আপনার যদি সমস্ত উপাদানগুলিকে B থেকে A তে সরিয়ে নেওয়া হয় তবে মানগুলি <b> থাকে তবে আপনার অনুমানটি সত্য হবে।
অ্যালকিমিস্ট

উত্তর:


11

পাইথ, 29 28 26 24 বাইট

আমার সাথে 3 বাইট সংরক্ষণের জন্য @Jakube ধন্যবাদ .pএবং L

খুব সাধারণ, 2 তালিকার কোনও উপাদান তালিকা 1 এর গড়ের চেয়ে বড় এবং 2 তালিকার গড়ের চেয়ে কম কিনা তা পরীক্ষা করে দেখুন, তবে তালিকা 1 এবং তালিকা 2 স্যুইচডের সাথে পুনরাবৃত্তি করবে।

Lcsblbff&>YyhT<YyeTeT.pQ

সত্য এবং মিথ্যা জন্য একটি খালি খালি তালিকা []মুদ্রণ করে।

L                    Define y(b). Pyth has no builtin for mean
 c                   Float div
  sb                 Sum of b
  lb                 Length of b
f        .pQ         Filter all permutations of input
 f     eT            Filter the last element of the filter var
  &                  Logical and
   >Y                Inner filter var greater than
    y                Call the mean function we defined earlier
     hT              First element of outer filter var
   <Y                Inner filter var less than
    y                Mean of
     eT              Last element of outer filternvar

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

পরীক্ষা স্যুট.


7

পাইথন 3, 74

lambda*L:any(sum(C)/len(C)>x>sum(D)/len(D)for(C,D)in[L,L[::-1]]for x in C)

ইনপুট হিসাবে দুটি তালিকা নেয়। প্রথম তালিকায় এমন একটি উপাদান রয়েছে যা এটি গড়ের চেয়ে বড় তবে অন্যটির চেয়ে ছোট if তারপরে, দুটি ইনপুটগুলি অদলবদলের জন্য একই কাজ করে। দুটি আদেশের (82) চেষ্টা করার জন্য একটি পৃথক ফাংশন সংজ্ঞায়নের চেয়ে দ্বি-স্তরের তালিকা বোধগম্যতা কম ছিল:

f=lambda A,B:any(sum(A)/len(A)>x>sum(B)/len(B)for x in A)
lambda A,B:f(A,B)|f(B,A)

7

হাস্কেল, 58 57

x%y=any(\n->(\g->g x<0&&g y>0)$sum.map(n-))x
x?y=x%y||y%x

উপাদানটি সরানো বা অন্তর্ভুক্ত করার উপাদানটি গড়ের চেয়ে বড় বা ছোট কিনা তা পরীক্ষা করে আমরা আমরা গড় বাড়িয়ে তুলি বা কমিয়ে আনতে পারি।

অ্যারে থেকে উপাদানটি সরানোর মধ্য দিয়ে গড় কোনও উপাদানের চেয়ে গড় ছোট বা বড় কিনা তা পরীক্ষা করে আমরা পরীক্ষা করতে পারি এবং নতুন অ্যারের গড়টি নেতিবাচক বা ধনাত্মক কিনা তা যাচাই করে দেখা যাচ্ছে যে সমষ্টিটি ইতিবাচক বা নেতিবাচক কিনা তা যাচাই করে ।

যে খুব সহজ হিসাবে করা হয় চেক sum.map(-n+)


6

গণিত, 49 47 বাইট

m=Mean;MemberQ[#2,x_/;m@#<x<m@#2]&@@#~SortBy~m&

খাঁটি ফাংশনে মূল্যায়ন করে যা ফর্মটিতে ইনপুট আশা করে {list1, list2}


4

এপিএল, 45 40 বাইট

মরিস জুকাকে 5 টি বাইট সংরক্ষণ করা হয়েছে!

{U←∊⍺⍵[⊃⍒M←(+/÷≢)¨⍺⍵]⋄1∊(U<⌈/M)∧(U>⌊/M)}

এটি একটি নামবিহীন ডায়াডিক ফাংশন তৈরি করে যা বাম এবং ডানদিকে অ্যারে গ্রহণ করে এবং 1 বা 0 প্রদান করে।

{
  M←(+/÷≢)¨⍺⍵          ⍝ Compute the mean of each array
  U←∊⍺⍵[⊃⍒M]           ⍝ Get the array with the larger mean
  1∊(U<⌈/M)∧(U>⌊/M)    ⍝ Any smaller mean < U < larger mean
}

আপনি এটি অনলাইনে চেষ্টা করতে পারেন ।


1
আপনি গড়টি লিখতে পারেন: (+ / ÷ ≢)
মরিস জুকা

@ মরিসজুকা ধন্যবাদ! আপনার পরামর্শ ব্যবহার করতে সম্পাদিত।
অ্যালেক্স এ।

3

আর, 66 52 বাইট

নামহীন ফাংশন হিসাবে এটি 2 ভেক্টরকে গ্রহণ করে। কিছু উদ্দীপনা যা পরিত্রাণ পেয়েছি।

function(a,b)any(a<(m=mean)(a)&a>m(b),b<m(b)&b>m(a))

টেস্ট

> f=
+ function(a,b)any(a<(m=mean)(a)&a>m(b),b<m(b)&b>m(a))
> f(c(1), c(2, 3))
[1] TRUE
> f(c(1, 2, 3), c(4, 5, 6))
[1] TRUE
> f(c(3, 4, 5, 6), c(2, 3, 4, 5))
[1] TRUE
> f(c(6, 5, 9, 5, 6, 0), c(6, 2, 0, 9, 5, 2))
[1] TRUE
> f(c(0, 4), c(9, 1, 0, 2, 8, 0, 5, 5, 4, 9))
[1] TRUE
> 
> f(c(1), c(2))
[1] FALSE
> f(c(2, 4), c(5))
[1] FALSE
> f(c(1, 5), c(2, 3, 4, 5))
[1] FALSE
> f(c(2, 1, 2, 3, 1, 3), c(5, 1, 6))
[1] FALSE
> f(c(4, 4, 5, 2, 4, 0), c(9, 2, 10, 1, 9, 0))
[1] FALSE
> 

3

এসএএস / আইএমএল, 67

start m(a,b);return((a>b[:]&&a<a[:])||(b>a[:]&&b<b[:]))[<>];finish;

এটি উত্তর পেতে সাবস্ক্রিপ্ট হ্রাস অপারেটরগুলি ব্যবহার করে 0 প্রয়োজনীয়তার সাথে মেলে না এমন কোনও উপাদান খুঁজে পাওয়া যায় না বা যদি একটি পাওয়া যায় তবে 0 প্রদান করে returning

গল্ফহীন, এখানে আমি ম্যাট্রিক্সের গুণকে ব্যবহার করে প্রকৃত মানটি নিজেই ফিরিয়ে দিচ্ছি:

proc iml;
  b={1 2 3 4 5 6 7 8 9 };
  a={2 3 4 5 6};
  start m(a,b);
  return (a#(a>b[:] && a < a[:]) || b#(b>a[:] && b < b[:]))[<>];
  finish;

  z= m(a,b);
  print z;
quit;

পরীক্ষা:

%macro test(a,b,n);
  z&n=m({&a},{&b});
  print z&n;
%mend test;

proc iml;
  b={1 2 3 4 5 };
  a={2 3 4 5 6 7};
start m(a,b);return((a>b[:]&&a<a[:])||(b>a[:]&&b<b[:]))[<>];finish;

* True;
 %test(1,2 3,1);
 %test(1 2 3,4 5 6,2);
 %test(3 4 5 6, 2 3 4 5,3);
 %test(6 5 9 5 6 0,6 2 0 9 5 2,4);
 %test(0 4, 9 1 0 2 8 0 5 5 4 9,5);
* False;
 %test(1,2,6);
 %test(2 4, 5,7);
 %test(1 5, 2 3 4 5,8);
 %test(2 1 2 3 1 3, 5 1 6,9);
 %test(4 4 5 2 4 0, 9 2 10 1 9 0,10);

quit;

(পাঠযোগ্যতার জন্য সংক্ষিপ্ত)

z1 1

z2 1

z3 1

z4 1

z5 1

z6 0

z7 0

z8 0

z9 0

z10 0


2

পাইথন ২.7, 102 98 96

lambda p:any([1for i in 0,1for e in p[i]if g[i^1]<e<g[i]]for g in[[sum(l)*1./len(l)for l in p]])

ইনপুটটিকে 2 ইনপুটগুলির অ্যারের হিসাবে নেয় এবং বুলিয়ান দেয়।
যুক্তিটি 2 তালিকার গড়ের সন্ধান করুন, তারপরে এমন একটি উপাদান আবিষ্কার করুন যা এটি নিজের তালিকার গড়ের চেয়ে কম এবং অন্য তালিকার গড়ের চেয়ে বেশি।

প্রদত্ত ইনপুটগুলির জন্য এটি পরীক্ষা করা এখানে ডেমো-এড


2
আপনি বাইট সংরক্ষণ করার *1.পরিবর্তে করতে পারেন *1.0। বিকল্প হিসাবে, আপনি পাইথন 3 এ এটি করলে ডিভিশনটি ডিফল্টরূপে একটি ভাসা ফেরত দেয়, সুতরাং আপনাকে সেই গুণটির কোনও প্রয়োজন হবে না। (আমি মনে করি না আপনি পাইথন 3. ব্যবহার করতে এ সব আপনার কোড পরিবর্তন করতে হবে চাই)
mathmandan

@ মাঠমন্দন আমাকে একটি বাইট বাঁচিয়েছে। ধন্যবাদ :)
কামাহেমেহ

আপনি এটিকে অপসারণ করে এটিকে বেনামে ফাংশন f=করতে in[0,1]forপারেন in 0,1for। যেহেতু আপনি আসলে 101 বাইটে রয়েছেন তাই এটি আপনাকে 98 এ নামিয়ে আনবে
কেড

@ Vioz- ধন্যবাদ, আমি যে :) করতে পারে জানতাম না
Kamehameha

2

সিজেম, 28 বাইট

{{_:+1$,d/\+}%$~(m],@0=i)>&}

এটি একটি বেনামে ফাংশন যা স্ট্যাক থেকে দ্বিমাত্রিক অ্যারে পপ করে এবং বিনিময়ে স্থাবর উপাদানগুলির একটি অ্যারে ছেড়ে দেয়।

সমর্থিত ব্রাউজারগুলিতে, আপনি সিজেএম ইন্টারপ্রেটারে একবারে সমস্ত পরীক্ষার কেস যাচাই করতে পারেন ।

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

কোড

q~]{{_:+1$,d/\+}%$~(m],@0=i)>&}%:p

ইনপুট

[[1] [2 3]]
[[1 2 3] [4 5 6]]
[[3 4 5 6] [2 3 4 5]]
[[6 5 9 5 6 0] [6 2 0 9 5 2]]
[[0 4] [9 1 0 2 8 0 5 5 4 9]]
[[1] [2]]
[[2 4] [5]]
[[1 5] [2 3 4 5]]
[[2 1 2 3 1 3] [5 1 6]]
[[4 4 5 2 4 0] [9 2 10 1 9 0]]

আউটপুট

[2]
[4]
[4]
[5]
[4]
""
""
""
""
""

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

যদি এ এবং বি অ্যারে হয় এবং গড় (এ) ≤ গড় (বি) হয় তবে আমরা খতিয়ে দেখি যে বি ∩ {এভিজি (এ) ⌋ + 1,…, gavg (বি) ⌉-1 1 খালি নেই। উভয় গড় বৃদ্ধির জন্য এই চৌরাস্তার যে কোনও উপাদান বি থেকে ক এ স্থানান্তরিত হতে পারে ।

{          }%              e# For each of the arrays:
 _:+                       e#   Compute the sum of its elements.
    1$,                    e#   Compute its length.
       d/                  e#   Cast to Double and perform division.
         \+                e#   Prepend the computed average to the array.
             $             e# Sort the arrays (by the averages).
              ~            e# Dump both arrays on the stack.
               (           e# Shift out the higher average.
                m]         e# Round up to the nearest integer b.
                  ,        e# Push [0 ... b-1].
                   @0=     e# Replace the array with lower average by its average.
                      i)   e# Round down to the nearest integer a and add 1.
                        >  e# Skip the first a integer of the range.
                           e# This pushes [a+1 ... b-1].
                         & e# Intersect the result with the remaining array.

এটি উচ্চ গড়ের সাথে অ্যারের সমস্ত উপাদানের অ্যারেটিকে ধাক্কা দেয় যা উভয় গড় বৃদ্ধি বাড়ানো যেতে পারে। এই অ্যারেটি খালি / মিথ্যা যদি কেবল এবং কোনও উপাদানই এই ফলাফলটি অর্জন করতে না পারা যায়।


1

রুবি, 86

A=->x{x.reduce(0.0,:+)/x.size}
F=->q{b,a=q.sort_by{|x|A[x]};a.any?{|x|x<A[a]&&x>A[b]}}

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

অন্যান্য গ্রুপের গড়ের চেয়ে উচ্চতর গড়ের সাথে গ্রুপ থেকে একটি উপ-গড় আইটেম সন্ধান করার চেষ্টা করা হয়।

পরীক্ষা: http://ideone.com/444W4U


ইতিমধ্যে রুবি সমাধান রয়েছে তা লক্ষ্য করেই এটিতে কাজ করা শুরু হয়েছিল, খুব অনুরূপ কিছু দিয়ে শেষ হয়েছে তবে এটি প্রথম দুটি তালিকা আরও ভাল বলে ধরে নিয়ে ফাংশনটি ধারণ করে দুটি কম চরিত্র জাল করেছে, তারপরে নিজেকে অন্যভাবে কল করুন। f=->a,s=1{i,j=a.map{|x|x.inject(0.0,:+)/x.size};a[0].any?{|y|i>y&&j<y}||s&&f[b,a,p]}
হিস্টোক্র্যাট

@ হিস্টোক্র্যাট চমৎকার পন্থা! bযদিও ভেরিয়েবলের বিষয়ে একটি নেমরেয়ার পাই । আমি মনে করি পুনরাবৃত্ত কলটি এমন কিছু হওয়া উচিত f[a.rotate,p]
ক্রিশ্চিয়ান লুপাস্কু

1
উফফ, সুতরাং আমি প্রতারণা করে আরও ভাল স্কোর পেয়েছি।
হিস্টোক্র্যাট

1

মতলব, 54

বেনামে ফাংশন ব্যবহার করা:

f=@(A,B)any([B>mean(A)&B<mean(B) A>mean(B)&A<mean(A)])

উদাহরণ:

>> f=@(A,B)any([B>mean(A)&B<mean(B) A>mean(B)&A<mean(A)])
f = 
    @(A,B)any([B>mean(A)&B<mean(B),A>mean(B)&A<mean(A)])

>> f([1 2 3],[4 5 6])
ans =
     1

>> f([3 4 5 6],[2 3 4 5])
ans =
     1

>> f([1 5 9],[4 5 7 8])
ans =
     0

1

সি #, 104

bool f(int[]a,int[]b){double i=a.Average(),j=b.Average();return a.Any(x=>x<i&&x>j)||b.Any(x=>x<j&&x>i);}

উদাহরণ কল:

f(new []{1,2,3}, new []{4,5,6})
f(new []{1}, new []{2, 3})
f(new []{1, 2, 3}, new []{4, 5, 6})
f(new []{3, 4, 5, 6}, new []{2, 3, 4, 5})
f(new []{6, 5, 9, 5, 6, 0}, new []{6, 2, 0, 9, 5, 2})
f(new []{0, 4}, new []{9, 1, 0, 2, 8, 0, 5, 5, 4, 9})

f(new []{1}, new []{2})
f(new []{2, 4}, new []{5})
f(new []{1, 5}, new []{2, 3, 4, 5})
f(new []{2, 1, 2, 3, 1, 3}, new []{5, 1, 6})
f(new []{4, 4, 5, 2, 4, 0}, new []{9, 2, 10, 1, 9, 0})

0

সি ++ 14, 157 বাইট

নামবিহীন ল্যাম্বদা হিসাবে, সর্বশেষ পরামিতি দ্বারা ফিরে আসে r। অনুমান A, Bমত পাত্রে হতে vector<int>বা array<int,>

[](auto A,auto B,int&r){auto m=[](auto C){auto s=0.;for(auto x:C)s+=x;return s/C.size();};r=0;for(auto x:A)r+=x<m(A)&&x>m(B);for(auto x:B)r+=x<m(B)&&x>m(A);}

Ungolfed:

auto f=
[](auto A,auto B,int&r){
  auto m=[](auto C){
   auto s=0.;
   for(auto x:C) s+=x;
   return s/C.size();
  };
  r=0;
  for (auto x:A) r+=x<m(A)&&x>m(B);
  for (auto x:B) r+=x<m(B)&&x>m(A);
}
;

ব্যবহার:

int main() {
  std::vector<int>
    a={1,2,3}, b={4,5,6};
  //  a={1,5,9}, b={4,5,7,8};
  int r;
  f(a,b,r);
  std::cout << r << std::endl;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.