ইএলও রেটিং প্রত্যাশিত স্কোর গণনা করুন


11

আপনার কাজটি হ'ল কিছু খেলায় 2 জন খেলোয়াড়ের জন্য জয়ের সম্ভাব্য সম্ভাবনা গণনা করা, যার প্রত্যেকে নিজের ইএলও রেটিং দিয়ে । প্লেয়ার A এর ELO R a এবং প্লেয়ার B এর ELO R b রয়েছে

প্লেয়ার এ (ই ) এর প্রত্যাশিত স্কোর : 1 / (1 + 10 (আর বি - আর ) / 400 )। প্লেয়ার বি (ই বি ) এর জন্য একই সমীকরণ রয়েছে : 1 / (1 + 10 (আর - আর বি ) / 400 )।

আপনি যদি আরও অনুলিপিযোগ্য সংস্করণ চান: 1 / (1 + 10^((a-b) / 400))

E a + E b এর সমান হতে হবে 1।

সুতরাং, কোনও খেলোয়াড়ের স্কোর হ'ল দশমিক হিসাবে কিছু ম্যাচ জয়ের প্রত্যাশিত সুযোগ।

আপনার প্রোগ্রাম / ফাংশনটিতে 2 ইনপুট, প্লেয়ার এ এর ​​ইএলও এবং প্লেয়ার বি এর ইএলও নেওয়া উচিত এবং দশমিক ফর্ম্যাটে জয়ের জন্য তাদের নিজ নিজ সুযোগটি মুদ্রণ / ফিরিয়ে নেওয়া উচিত। আউটপুটটি অবশ্যই এক পর্যন্ত যুক্ত করা উচিত এবং আপনার অবশ্যই কমপক্ষে 5 দশমিক স্থান ( 0.00000) হওয়া উচিত। ৫ দশমিক দশকের পরে আপনার অকার্যকর সংখ্যা থাকতে পারে, তবে প্রদত্ত দুটি আউটপুট একটিতে যোগ করে।

উদাহরণ:

1200 2100 -> 0.005591967 0.994408033
1 1 -> 0.5 0.5
60 20 -> 0.557312 0.442688
9999 9998 -> 0.501439 0.498561
9999 1 -> 0.999999 0.000001

চূড়ান্ত পরীক্ষার ক্ষেত্রে, কিছু উত্তর মান উপস্থাপন করতে বৈজ্ঞানিক ক্ষয়ক্ষতি ব্যবহার করে। এটি বৈধ নয়।

আপনি এখানে টেস্ট কেস 3 এ দেখতে পারেন যা 0.557312একেবারে সঠিক নয়, কারণ এটি 2হওয়া উচিত একটি 1, তবে এটি ঠিক আছে কারণ এটি পাঁচ দশমিক জায়গার পরে এবং ফলাফলগুলি এখনও একটিতে যোগ করে।

এটি অবৈধ আউটপুট উদাহরণ:

9999 9998 -> 0.5014391117091516, 0.49856088829084844

দেখে মনে হচ্ছে এটি প্রথম নজরে প্রয়োজনীয়তাগুলি পূরণ করে, তবে সংখ্যাগুলি যোগ করে 1.00000000000000004এবং ফলে আউটপুটটি বৈধ নয়।

আউটপুটে ট্রেলিং জিরো ঠিক আছে।

আপনি ধরে নিতে পারেন কোনও খেলোয়াড়ের ইএলও সর্বদা 0 এর চেয়ে বেশি হবে এবং 9999 এর চেয়ে বেশি কোনওের ইএলও থাকবে না।

ইনপুট এবং আউটপুট ফর্ম্যাটটি নমনীয় তবে ইনপুট এবং আউটপুটটি এখনও বেস 10 এ থাকতে হবে।

এটি , সর্বনিম্ন বাইট গণনা সহ উত্তরটি জিতবে!


1
ইএলও রেটিংয়ের জন্য +1, যদিও আপনি পরিবর্তে এলো রেটিং নামে পরিচিত এমন কিছু সম্পর্কে কথা বলছেন তা জানতে পেরে আমি হতাশ হয়েছি।
ড্যারেন রিঞ্জার

আপনারও পরীক্ষার কেস যুক্ত করা উচিত [9999, 998]যা বেশিরভাগ উত্তর ব্যর্থ বলে মনে হয়।
Emigna

@ এমিগনা যোগ করেছেন, তবে আরও চরম করে
তুলেছেন

@ ওক্স: চমৎকার এটি হ্যান্ডেল করতে ড্রইং বোর্ডে ফিরে যেতে হবে :)
এমিগিনা

দেখে মনে হচ্ছে যে সমস্ত উত্তর 9999, 1আমার নিজের অন্তর্ভুক্ত করে ব্যর্থ হয়েছে , তাই আমি এটি পোস্ট করতে পারি না :-(
মেটোনিয়াম

উত্তর:


5

জেলি , 9 বাইট

÷400⁵*÷S$

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

ইনপুটটি একটি অ্যারে [Ra, Rb]এবং আউটপুট একটি অ্যারে [Ea, Eb]

ব্যাখ্যা

÷400⁵*÷S$  Input: array [Ra, Rb]
÷400       Divide each by 400, makes [Ra/400, Rb/400]
    ⁵*     Raise 10 to that power, makes [10^(Ra/400), 10^(Rb/400)]
        $  Monadic chain operating on previous result
      ÷      Divide each by
       S     The sum of the whole
           Makes [10^(Ra/400)/(10^(Ra/400) + 10^(Rb/400)),
                  10^(Rb/400)/(10^(Ra/400) + 10^(Rb/400))]
               = [1/(1 + 10^((Rb-Ra)/400)), 1/(1 + 10^((Ra-Rb)/400))]


@ ওকএক্স এটি বৈজ্ঞানিক স্বরলিপি। আমি নিশ্চিত যে আপনি মূলত ইনপুট / আউটপুট ফর্ম্যাটটি আমাদের উপর নির্ভর করে বলার পরে আপনি স্ট্যান্ডার্ড নোটেশনটির প্রয়োজনীয়তা অর্জনের চ্যালেঞ্জটি সম্পাদন করার পরে আপনি এটি জানেন কি না তা নিশ্চিত।
মাইল

আপনি অন্য আউটপুট তাকান? এটি 1.0!
Okx


3

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

10i400/^ts/

একটি তালিকা হিসাবে ইনপুট নেয় এবং একটি তালিকা আউটপুট দেয়।

10       % push number literal
i        % push input
400      % push number literal
/        % divide the list (by 400)
^        % power (10^list, element wise)
t        % duplicate the list
s        % sum the second one
/        % divide by the sum
         % (implicit) convert to string and display

1

সিজেম , 23 বাইট

XAq~_W%\.m400df/f#:)f/p

অন্য কিছু 23 বাইট সমাধান:

q~_W%\.m400df{/A\#)W#}p
Aq~_W%\.m400df/f{#)W#}p

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

ব্যাখ্যা

X                        Push 1
 A                       Push 10
  q~                     Push an eval the input, a list containing 2 numbers
    _W%                  Duplicate the list and reverse it
       \                 Swap top stack elements, so the order of answers matches the input
        .m               Vectorized subtraction: computes Ra - Rb and Rb - Ra
          400d           Push 400.0 (must be a double, otherwise / performs integer division)
              f/         Divide both values by 400
                f#       Raise 10 to the power of both numbers
                  :)     Increment both numbers
                    f/   Divide 1 by both numbers
                      p  Output the list nicely

ব্যর্থ 9999, 1:(
মেটোনিয়াম

@ মেটোনিয়েম এটি অদ্ভুত ... গোলাকার ইস্যুগুলির সাথে এর অবশ্যই কিছু করার আছে, বা কীভাবে এমন কিছু হতে পারে 0.1 + 0.2 = 0.30000000000000004। আমি এটি সন্ধান করব
বিজনেস ক্যাট

এটি এখন ঠিকঠাক দেখাচ্ছে, গুগলের ক্যালকুলেটর সহ সমস্ত উত্তরগুলি আপনার কোডের মতো একই ফলাফল দেয়। আমি নিশ্চিত যে পরীক্ষার
কেসটি

1

সি, 63 বাইট

#define M(a,b)1/(1+pow(10,(a-b)/400.)),1/(1+pow(10,(b-a)/400.))

একটি (বরং নিষ্পাপ) প্যারামিটারাইজড ম্যাক্রো সংজ্ঞায়িত করে M, আমি ভাবতে পারি যে সবচেয়ে সংক্ষিপ্ততম কার্য পদ্ধতির তবে সম্ভবত এখনও সংক্ষিপ্ততম নয়। যেমন, কোনও গল্ফিং পরামর্শগুলি প্রশংসিত হয়।

যাইহোক, এই 2 ফ্লোটিং পয়েন্ট মান ফেরৎ, E_bএবং E_aযথাক্রমে।

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


ব্যর্থ9999, 1
Metoniem

@ মেটোনিয়েম ইউপ কীভাবে সি রাউন্ডগুলি ভাসমান তা নিয়ে সম্ভবত বেশিরভাগ ক্ষেত্রেই করতে হয়। : / আমি এটি সন্ধান করছি।
আর কাপ,

এটি আসলে সঠিক বলে মনে হচ্ছে, পরীক্ষার
কেসটি

1

জাভাস্ক্রিপ্ট (ES7), 41 35 বাইট

সংরক্ষিত 6 বাইট @ নীলকে ধন্যবাদ

a=>b=>[b=1/(1+10**((b-a)/400)),1-b]

যেহেতু Ea + + EB = 1, শুধু লিখতে a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
নিল

@ নীল সত্যই? আমি খুব সংক্ষিপ্ত: পি ধন্যবাদ!
ETH প্রোডাকশন

0

এস এ এস ম্যাক্রো ল্যাঙ্গুয়েজ, 70 বাইট

%macro e(a,b);data t;p=1/(1+10**((&b-&a)/400));q=1-p;proc print%mend;

আউটপুট একটি এসএএস ডেটা সেট যেখানে ভেরিয়েবল pএবং qখেলোয়াড়দের জয়ের সুযোগ। printপদ্ধতিটি সরিয়ে 11 বাইট সংরক্ষণ করা যায় ।


0

সি #, 92 বাইট

সংক্ষিপ্ততম নয়, তবে এটি সি #, কখনই সংক্ষিপ্ত নয় ..

Golfed

   static double[]f(int a,double b){b=1/(1+System.Math.Pow(10,(a-b)/400d));return new[]{1-b,b};

Ungolfed

static double[] f(int a, double b)
{
    b = 1/(1 + System.Math.Pow(10, (a - b)/400d));
    return new[] {1 - b, b};
}

0

q, 26 বাইট

{1%1+10 xexp(y-x;x-y)%400}

উদাহরণ

q){1%1+10 xexp(y-x;x-y)%400}[1200;2100]
0.0055919673088347735 0.99440803269116518
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.