বিদ্বেষীদের গল্ফ করে


20

সেটআপ:

একটি সামাজিক নেটওয়ার্ক পোস্টটির দুটি উপায়ে প্রাপ্ত ভোটের সংখ্যার প্রতিবেদন করে: নেট আপভোটের সংখ্যা (মোট উর্ধ্বতন - মোট ডাউনভোট) এবং নিকটতম পূর্ণসংখ্যাকে (.5 রাউন্ড আপ) গোল করে প্রাপ্ত ভোটের% নেট আপভোটের সংখ্যাটি একটি পূর্ণসংখ্যা (প্রয়োজনীয় ধনাত্মক নয়) এবং দ্বিতীয়টি 0 এবং +100 সমেতের মধ্যে পূর্ণসংখ্যা হওয়ার নিশ্চয়তা দেয় is আপভোটের সংখ্যা এবং ডাউনভোটের সংখ্যা উভয়ই শূন্য বা ধনাত্মক 32-বিট পূর্ণসংখ্যা (আপনি স্বাক্ষরিত বা স্বাক্ষরযুক্ত উল্লেখ করতে পারেন)। ধরে নিও যে মোট শূন্য ভোট থাকলে শতকরা হারে শতকরা শূন্য হিসাবে রিপোর্ট করা হয়।

চ্যালেঞ্জ:

এই দুটি পূর্ণসংখ্যা (নেট আপভোটস এবং% আপভোটেড) দেওয়া, আপনি যে সংক্ষিপ্ততম প্রোগ্রামটি লিখতে পারেন যা উপরের সমস্ত সীমাবদ্ধতা তুষ্ট করে পোস্টটি প্রাপ্ত মোট সর্বনিম্ন সংখ্যার নির্ধারণ করে ?

ইনপুট সীমাবদ্ধতার গ্যারান্টিযুক্ত। যদি ইনপুটটি উপরের সীমাবদ্ধতাগুলি পূরণ করে না তবে প্রোগ্রামের আচরণ আপনার উপর নির্ভর করবে। বোনাস কুডোস যদি এটি অসীম লুপে প্রবেশ না করে বা অন্যথায় ক্রাশ না করে। আপনি যদি আরও দিকনির্দেশনা চান তবে একটি নেতিবাচক নম্বর ফিরিয়ে আনার বিষয়টি বিবেচনা করুন।

সাধারণ নিয়ম:

  • এটি , তাই সংক্ষিপ্ততম বৈধ সমাধান (বাইটগুলিতে পরিমাপ করা) জয়ী।
  • কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার পক্ষে যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন। জাভাস্ক্রিপ্টের মতো ক্লায়েন্ট-সাইড ওয়েব ভাষার জন্য বোনাস কুডো।
  • আপনার যদি একাধিক ভাষায় আকর্ষণীয় সমাধান থাকে তবে সেগুলি আলাদাভাবে পোস্ট করুন ।
  • স্ট্যান্ডার্ড নিয়মগুলি আপনার উত্তরের জন্য প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং রিটার্ন-টাইপ, বা সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহার করার অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের জন্য একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন।
  • এছাড়াও, দয়া করে কোডটি কীভাবে কাজ করে তার একটি ব্যাখ্যা যুক্ত করুন।
  • মনে রাখবেন যে আপনি যদি কোনও পূর্ণসংখ্যা বিভাগ অপারেশন করছেন যা রাউন্ডের পরিবর্তে (যেমন 20/3 = 6) কেটে ফেলেছে তবে তা পুরোপুরি সঠিক হতে পারে না।
  • উপরের সীমাবদ্ধতায় প্রান্তের কেসগুলি অন্বেষণকারী অতিরিক্ত পরীক্ষার কেস স্বাগত।
  • প্রত্যাশিত রিটার্নের ধরনটি সংখ্যাসূচক হলেও 0 এর জায়গায় বুলিয়ান "মিথ্যা" ব্যবহার করা যেতে পারে

উদাহরণ পরীক্ষার ক্ষেত্রে:

প্রথম কলামটি আলোচনার সুবিধার্থে অন্তর্ভুক্ত কেবলমাত্র একটি রেফারেন্স নম্বর।

ref net  %up    answer
1   0    0   => 0    
2   -5   0   => 0    
3   -4   17  => 1    
4   -3   29  => 2    
5   -2   38  => 3    
6   -1   44  => 4    
7   0    50  => 1    
8   5    100 => 5    
9   4    83  => 5    
10  3    71  => 5    
11  2    63  => 5    
12  1    56  => 5    
13  1234 100 => 1234
14  800  90  => 894  (tip: don't refer to this as the "last test case;" others may be added.)

সেই শূন্য মোট ভোটের বিশেষ কেসটি বেশ চতুর। আপভোট এবং ডাউনভোটের সমান সংখ্যক সংখ্যা থাকলে শতকরা upvotes 50% হয়, যদি 0% না থাকে তবে ভোট হয় না, আপভোট-ডাউনভোট প্রতিসাম্যটি ভেঙে দেয়।
xnor

2
@xnor 0/0 সাধারণত অপরিজ্ঞাত হয়, সুতরাং অনুমান করা আবশ্যক। এই পছন্দটি সহ, আপনি দ্বিতীয় ইনপুট 0 হলে একটি স্বয়ংক্রিয় "উত্তর = দ্বিতীয় ইনপুট" এবং দ্বিতীয় ইনপুট 100 হলে একটি স্বয়ংক্রিয় "উত্তর = প্রথম ইনপুট" পাবেন
ডাব্লুবিটি

1
প্রস্তাবিত পরীক্ষা ক্ষেত্রে @nwellnhof থেকে ধার করা: 1000, 100। প্রত্যাশিত উত্তরটি কি নিশ্চিত করতে পারবেন 1000?
আর্নল্ড

1
বঞ্চিত, কারণ বিদ্বেষীরা ঘৃণা করবে :)
হোসচ ২50

@ আর্নল্ড এবং নলহ্নহোফ: আপনার ঠিক আগের মন্তব্যে যেমন উল্লেখ করা হয়েছে, দ্বিতীয় ইনপুট = ১০০, উত্তর = প্রথম ইনপুট। যদি 100 সত্যিই কিছুটা নিচে গোল হয় তবে আপভোটের প্রথম ইনপুট # এর চেয়ে বেশি নেট ভোট = প্রথম ইনপুট পেতে হবে এবং এই চ্যালেঞ্জটি সর্বমোট সর্বনিম্ন সংখ্যার সন্ধান করবে।
ডাব্লুবিটি

উত্তর:


10

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

বাক্য বাক্য গঠনে ইনপুট নেয় (n)(p), যেখানে এন নেট আপভোটের সংখ্যা এবং পি আপভোটের শতাংশ। জন্য ফিরে আসতে পারেfalse0

n=>p=>(g=u=>u/(u-n/2)*50+.5^p?g(u+1):u)(n>0&&n)

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

মন্তব্য

n => p => (          // given n and p
  g = u =>           // g = recursive function taking u = number of upvotes
    u / (u - n / 2)  //   compute u / (total_votes / 2)
    * 50 + .5        //   turn it into a percentage, add 1/2
    ^ p ?            //   XOR it with p, which gives 0 if the integer parts are matching
                     //   if the result is not equal to 0:
      g(u + 1)       //     try again with u + 1
    :                //   else:
      u              //     stop recursion and return u
)(n > 0 && n)        // initial call to g() with u = max(0, n)

এজ মামলা

যাক এফ এন (ইউ) = U / (প - N / 2) * 50 + 0,5

  • যদি u = 0 এবং n = 0 হয় , তবে F n (u) = NaN এবং F n (u) XOR p = p । সুতরাং, আমরা ইউ = 0 যদি এন = পি = 0 (প্রথম পরীক্ষার কেসের প্রথম পুনরাবৃত্তি) ফিরে পাই বা পি! = 0 (7 তম পরীক্ষার মামলার প্রথম পুনরাবৃত্তি) পুনরাবৃত্তি দিয়ে চালিয়ে যাই ।

  • যদি u> 0 এবং u = n / 2 হয় , তবে F n (u) = + অসীম এবং - আবার - F n (u) XOR p = pপি = 0 না থাকলে আমরা কেবল পরবর্তী পুনরাবৃত্তির সাথে চলি। (নবম ও একাদশ পরীক্ষার ক্ষেত্রে এটি ঘটে।)


নিস! ভাষা পছন্দ, এবং ব্যাখ্যা সহ + লাইভ ডেমোর লিঙ্ক সহ আপনি বোনাস কুডো পান!
ডাব্লুবিটি

6

স্ট্যাক্স , 17 বাইট

ëI╩½• ╠☺Vì∞«S↑♠αS

এটি চালান এবং এটি ডিবাগ করুন

এটি নিষ্ঠুর শক্তি is এটি সূত্রটি সন্তুষ্ট না করা পর্যন্ত প্রার্থীর উপকারের জন্য 0 দিয়ে শুরু হয় এবং বর্ধিত হয়।

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এমন দেখাচ্ছে।

0       push zero
{       start filter block...
        candidate upvotes is on the stack
  cHx-  calculate candidate downvotes for denominator (upvotes * 2 - net)
  c1?   if denominator is zero, replace it with 1
  :_    floating point division
  AJ*   multiply by 100
  j     round to integer
  ;=    is equal to second input?
        increment until a match is found
}gs

এটি চালান


2

পরিষ্কার , 114 107 104 বাইট

import StdEnv
? =toReal o toInt
$a d#e= ?d
= ?a+until(\c#b= ~c*e/(e-100.0)
= ?(?100*b/(?b+c))==e)inc 0.0

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

ফাংশনটি সংজ্ঞায়িত করে $ :: Int Int -> Real, যেখানে আর্গুমেন্টগুলি স্বাক্ষরিত পূর্ণসংখ্যা এবং রিটার্নের মানটি একটি 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার দ্বারা যথাযথভাবে উপস্থাপনযোগ্য ডাবল-স্পষ্টতা ফ্লোট।

এটি একটি সন্তুষ্টিজনক cসন্ধানের b=-cd/(d+1)জন্য সমীকরণের প্রতিটি মান পরীক্ষা করে এবং যেহেতু ক্ষুদ্রতমের মধ্যে ক্ষুদ্রতম ফলাফল , সমস্ত সমাধানের সেটটির প্রথম উপাদান নেয়।ba+c=bb/(b+c)=dcb


2

05 এ বি 1 ই , 13 বাইট [হালকা ভাঙ্গা]

*²·т-/ò²т;Qi1

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

ব্যাখ্যা:

এটি সমাধানের জন্য, আমি ধরে নিলাম একটি, বি এবং প্রত্যাশিত ফলাফল x। সেটআপে তথ্য দেওয়া হয়েছে, যা আমাকে সমীকরণ দিয়েছে:

 2x         100x
———— - a = ——————
 a           b

এক্স দেয় জন্য পুনরায় সাজানো

        ab
x = ——————————
     2b - 100

একমাত্র পরীক্ষার কেস 0, 50 এর জন্য কাজ করে না - আমি এটির জন্য চেক করতে কেবল হার্ডকোড করেছি।

*²·т-/ò²т;Qi1     Implicit Inputs: a, b              STACK (bottom to top)
*                 Multiply the inputs together       [ab]
 ²·               Take the second input * 2          [ab, 2b]
   т-             Subtract 100                       [ab, 2b - 100]
     /ò           Divide and round                   [round(ab/(2b-100))]
       ²т;Qi1     If 2nd input = 50, push 1 to stack
                  { Implicitly output top item of stack [either 1, or round(...)] }

এটি কিছু ইনপুটগুলির জন্য সঠিকভাবে কাজ করে না। ৮০৪ টি ভোট দিয়ে ৮০% নেট ভোট সহ 90% করা যায়।
পুনরাবৃত্তি

@ রিসার্সিভ আমি জানি এটি কী। এটি 90% ঠিক ধরে নেয়, 89.5% নয়।
জেনো র্যাকলিন আশের

ঠিক আছে, এই ক্ষেত্রে 90.5% এর কাছাকাছি তবে হ্যাঁ।
পুনরাবৃত্তি

1
আমি এখন বুঝতে পেরেছি যে এটি আমার চিন্তাভাবনার চেয়েও জটিল। আমি এটি সম্পর্কে চিন্তা করব, তবে আপাতত আমি এটি ভাঙ্গা হিসাবে চিহ্নিত করব।
জেনো র্যাকলিন আশের

@ জেনো রাকলিনআশার এখন বুঝতে পারছি যে এটি আমার ধারণা থেকেও জটিল আমি এটি সম্পর্কে চিন্তা করব ... এগুলি আমার পক্ষে মতামত পড়ার মত ধরণের মন্তব্য, সেগুলি একটি ভাল ধাঁধার বৈশিষ্ট্য হিসাবে দেখছে :-)।
ডাব্লুবিটি

0

1.10, 154 বাইটে যান

func h(n,u float64)float64{if u==50{return 1};r:=Round(n*u/(2*u-100));s:=Round(n*(u+.5)/(2*u-99));v:=s/(2*s-n);if v>1||Round(v*100)!=u{return r};return s}

গো খেলার মাঠে এটি ব্যবহার করে দেখুন! (টিআইও গো ১.৯ চালায়, যার গাণিতিক নেই R রাউন্ড)

উদার সংস্করণ

func haters(n, u float64) float64 {
    if u == 50 {
        return 1
    }
    r := Round(n * u / (2*u - 100))
    //Test the case where we were given a percentage that was rounded down (e.g. 90.4% given as 90%)
    //We test this by adding 0.5% to u. The denominator is just a simplified form of 2*(u+0.5) - 100
    s := Round(n * (u + .5) / (2*u - 99))
    //Check if s is a valid result
    v := s / (2*s - n)
    if v > 1 || Round(v*100) != u {
        return r
    }
    //s is strictly less than r, so we don't need to check the minimum.
    return s
}

ব্যাখ্যা যুক্ত করার স্বার্থে, r এর উপরের সূত্রটি একই সাথে সমাধানের মাধ্যমে n=v-dএবং u = 100 * v/(v + d)v এর জন্য উত্পন্ন করা যেতে পারে , যেখানে v এবং d যথাক্রমে upvotes এবং downvotes এর সংখ্যা। প্রাপ্ত উত্স সূত্রটি v = 50 এর জন্য অপরিবর্তিত, সুতরাং আমাদের সেই কেসটি পরিচালনা করতে হবে (যা আমরা যদি বিবৃতিতে প্রথম দিয়ে থাকি)।

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