শেয়ারড বার্থডে পার্টি


9

অফিসে জন্মদিনের পার্টিকে একীভূত করে একটি অফিস (যাকে একে "দ্য অফিস" বলুন) ব্যর্থ সময় হ্রাস করতে যাচ্ছে। একই সপ্তাহের সোমবার থেকে শুক্রবার (অন্তর্ভুক্ত) এর মধ্যে জন্মদিনের সাথে যে কোনও দু'জন লোক সেই সপ্তাহের কিছু সময় একটি ভাগ করে নেওয়া জন্মদিনের পার্টির সাথে উদযাপিত হবে । যাদের জন্মদিন শনিবার বা রবিবারে আসে তারা কোনও দিনই কোনও পার্টি পায় না।

কিছু লোক তাদের আসল জন্মদিনটি ভাগ করে না এমন লোকদের সাথে জন্মদিনের অনুষ্ঠান ভাগ করে নিতে পছন্দ করে না। তারা থাকবে খুব রেগে একটি আছে ভাগ জন্মদিনের পার্টি

আমরা একটি অফিস অনুকরণ করতে যাচ্ছি এবং প্রথম সপ্তাহে খুঁজে পেতে যাচ্ছি যাতে কেউ তাদের ভাগ করে নেওয়া বার্থডে পার্টি সম্পর্কে খুব ক্ষুব্ধ হয়

চ্যালেঞ্জ

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

  • একটি পূর্ণসংখ্যা এন > 1 ইনপুট করুন , যা অফিসে কর্মীদের সংখ্যা।
  • এন জন্মদিন নিজেদের 31 ডিসেম্বর 1 জানুয়ারী থেকে এলোমেলোভাবে অবিশেষে বিতরণ করা হয় (এড়িয়ে 29 ফেব্রুয়ারী)।
  • তবে শেয়ারড বার্থডে পার্টির নির্ধারণের লক্ষ্যে কার্যদিবস হ'ল 2019-এর আইএসও সপ্তাহের তারিখ, যা 2019-W01-1 (2018-12-31) এবং 2019-W52-7 (2019-12-29) এর মধ্যে থাকে। প্রতি সোমবার একটি নতুন আইএসও সপ্তাহ শুরু হয়। (আমি মনে করি এই চ্যালেঞ্জের জন্য আইএসও সপ্তাহ সম্পর্কে আপনার সত্যই জেনে রাখা দরকার)
  • অফিসে এন ব্যক্তিদের জন্য , প্রত্যেকের একটি খুব অ্যাগ্রি শেয়ার্ড বার্থডে পার্টির ব্যক্তিত্বের ধরণের থাকার 1/3 সুযোগ রয়েছে , তাই আপনাকে এটিও অনুকরণ করতে হবে।
  • তবে পার্টি একই জন্মদিনের লোকদের সাথে ভাগ করে নিলে তারা রাগ করবে না ।
  • খুব ক্ষুব্ধ ব্যক্তির প্রথম ঘটনার জন্য আইএসও সপ্তাহের সংখ্যা নির্ধারণ করুন (সপ্তাহের সংখ্যাটি পরিষ্কার হওয়ার সাথে সাথে এর জন্য সঠিক বিন্যাসটি নমনীয়) । যদি কোনও রাগী লোক না থাকে তবে আপনি এমন কোনও আউটপুট দিতে পারেন যা কোনও আইএসও সপ্তাহে বিভ্রান্ত নয় বা প্রোগ্রামটি ত্রুটিযুক্ত করতে পারে ইত্যাদি can

কিছু সরলকরণ অনুমান:

  • যেমনটি আমি উল্লেখ করেছি, ২৯ শে ফেব্রুয়ারির ইস্যুটিকে সম্পূর্ণ উপেক্ষা করুন (একটি অনিবদ্ধ জটিলতা)
  • সরকারী ছুটির দিনগুলি উপেক্ষা করুন (এটি একটি আন্তর্জাতিক সম্প্রদায় তাই আমাদের ছুটিগুলি পৃথক হবে) এবং কেবল ধরে নিন যে প্রতি সপ্তাহে অফিস খোলা রয়েছে।

বিধি

এটি কোড-গল্ফ। প্রতিটি ভাষার জয়ের জন্য বাইটের মধ্যে সংক্ষিপ্ত উত্তর। ডিফল্ট লফোলগুলি নিষিদ্ধ।

কোড ব্যাখ্যা স্বাগত জানাই।

কাজের উদাহরণ

ইনপুট এন = with সহ প্রথম অংশযুক্ত উদাহরণ 1 টি নিয়মতে বর্ণিত হিসাবে প্রথম এবং দ্বিতীয় কলামগুলি এলোমেলো (তবে বাস্তবে অবশ্যই এখানে এলোমেলো নয়)।

Angry Type
Person?    Birthday   ISO Week   Comment
================================================================================
   N       2018-12-31      W01   In the 2019 ISO week date year 
   Y       2018-12-31      W01   Same birthday, so no anger happens
   N       2019-02-05      W06   
   Y       2019-03-15      W11   No anger happens because other W11 b-day is a Saturday     
   N       2019-03-16      W11
   N       2019-09-08      W36   My birthday!
   Y       2019-12-30       -    Not in the 2019 ISO week date year

তাই কোনও রাগ হয় না। প্রোগ্রাম বা ফাংশনটি কোনও ISO সপ্তাহের নম্বর নিয়ে বিভ্রান্ত না হয়ে এমন কিছু আউটপুট বা আউটপুট করতে পারে।

উদাহরণস্বরূপ এন সাথে অনির্দিষ্ট 2 ।

Angry Type
Person?    Birthday   ISO Week   Comment
================================================================================
   N       2019-01-19      W03   
   Y       2019-02-04      W06   
   N       2019-02-05      W06   No anger because not an angry person
  ...             ...      ...   (No angry people until...)
   Y       2019-03-12      W11   Very Angry Person!
   N       2019-03-14      W11   
  ...             ...      ...   ... 

আউটপুট W11বা সমতুল্য কিছু হবে ।


3
... 2019 সালে 29 শে ফেব্রুয়ারী নেই! আপনি একটি কাজের উদাহরণ যুক্ত করতে পারেন, দয়া করে?
শেগি

কেউ "খুব রাগান্বিত" না হলে আউটপুটটি কী হওয়া উচিত? এটি খুব সহজেই ছোটগুলির জন্য ঘটতে পারেএন
FryAmTheEggman 21

4
@ শেগি সেখানে কাজ করতে পারেন এমন লোকেরা থাকতে পারেন যাদের জন্মদিন ২৯ শে ফেব্রুয়ারী I'm
এনজিএম

1
যদি কোনও রাগান্বিত লোক না থাকে তবে কোনও উপযুক্ত আউটপুট যা ডাব্লু 01 থেকে ডাব্লু 52 বা সমমান বা ত্রুটি বার্তা নয়, ভাল fine আমি যখন মোবাইল বন্ধ থাকি তখন এটি প্রতিফলিত করতে আমি প্রশ্নটি সম্পাদনা করব।
এনজিএম

1
হতে পারে এটি আমি, তবে আমার কাছে জন্মদিনের পার্টির অংশটি একেবারেই নয় than উইকএন্ডে যাদের জন্মদিন রয়েছে তাদের সবাইকে চিপ দিন।
কেভিন ক্রুইজসেন

উত্তর:


5

পাইথন 2 , 172 202 বাইট

def f(n):
 D=set();A=[];R=randint
 while n:
	n-=1;w,d=R(1,52),R(1,5)
	if R(0,364)>104:D|={(w,d)};A+=[w]*(R(0,2)>1)
 return next((a for a in sorted(A)if[w for w,d in D].count(a)>1),0)
from random import*

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

ওহো! একটি প্রয়োজন মিস করেছেন; 30 বাইট খরচ।

এটি ওপি দ্বারা দেওয়া হয়েছে যে আপনার জন্মদিন 29 ফেব্রুয়ারি নয়।

যদি আপনার জন্মদিন 30 ডিসেম্বর হয় তবে এটি 2019 এর কোনও আইএসও সপ্তাহে পড়বে না, তাই কোনও অবস্থাতেই আপনি 2019 সালের খুব অ্যাংরি আইএসও সপ্তাহ হতে পারবেন না।

আপনাকে 364 বছরের বেশি জন্মদিনের কথা বিবেচনা করে এটি আপনাকে খুব আক্রমনাত্মক বলে বিবেচনা করে। এর মধ্যে 104 টি উইকএন্ডে পড়ে যখন আমরা নির্ধারিত করেছিলাম যে আপনি এটি সম্পর্কে খুব ক্ষুদ্ধ হয়ে যাবেন না। সুতরাং আমরা কেবল সময়ের 260/365 কে আপনার যত্ন করি; যেমন, যখন R(0,364)>104( randintএর ব্যাপ্তি অন্তর্ভুক্ত)। এই সীমাবদ্ধতার প্রেক্ষিতে, আপনার সাপ্তাহিক জন্মদিনটি 2019 সালের 52 টি আইএসও সপ্তাহের যে কোনও একটিতে এবং সেই সপ্তাহের কোনও সপ্তাহের দিনেই পড়েছে তা সুগঠনযোগ্য; এবং, স্বাধীনভাবে, যে আপনি খুব আক্রমনাত্মক ব্যক্তি হওয়ার সম্ভাবনা 3 টির মধ্যে 1 জন।

ডি তখন এমন একটি সেট (weeknum,weekday)যা কোনও সম্ভাব্য ক্ষুব্ধ ব্যক্তি যদি সত্যিকারের জন্মদিন ভাগ করে নেয়, তবে সেই সপ্তাহে জন্মদিনের অপর কোনও ব্যক্তি না থাকলে অ্যামগ্রি হওয়ার দরকার নেই।

কোনও আইএসও 2019 সপ্তাহের সময় খুব ক্ষুব্ধ লোক প্রকাশিত না হলে 0 ফিরিয়ে দেওয়া হয়; অন্যথায়, প্রাচীনতম মেল্টডাউনের আইএসও সপ্তাহের নম্বরটি ফিরে আসে।


আপনি কি 31 ডিসেম্বর, 2019 এর প্রান্ত কেসটি বিবেচনা করবেন না?
চার্লি

1
@ চার্লি: অবশ্যই! কিন্তু ডিসেম্বর 31 2018 একই আইওএসও সপ্তাহে 2019 তে জানুয়ারী 1 2019 তে এইভাবে "alousর্ষাপূর্ণ পার্টি সপ্তাহ" এর একটি অংশ হবে, সুতরাং এটি কার্যকর হবে।
চ্যাস ব্রাউন

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

@ ওউবালেন্স: ওফ! মিস করেছেন; সংশোধিত!
চ্যাস ব্রাউন 21

2

জেলি ,  36 32  33 বাইট

30-ডিসেম্বর প্রান্ত-কেসটি আমি লক্ষ করি নি ঠিক করার জন্য +1 বাইট (চ্যাস ব্রাউন দ্বারা নির্দেশিত হিসাবে ওপি-র নীচে দেওয়া মন্তব্যে)

-4 এরিক দ্য আউটগোল্ফারকে (ইনলাইন সহায়ক এবং বাহ্যিক পণ্য ব্যবহারের জন্য) ধন্যবাদ

7R2<52×þFX)Ġị$,3XỊ¤€ṁ@\PṢ€Ḋ€Fḟ0Ḣ

একটি monadic লিঙ্ক যা একটি পূর্ণসংখ্যার উত্পাদন করে [0,52] কোথায় 0 মানে বছরের মধ্যে খুব বেশি রাগান্বিত লোক এবং অন্যান্য ফলাফলগুলি আইএসও সপ্তাহের সংখ্যা।

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

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


1

জাভা 8, 198 বাইট

double r(){return Math.random();}

n->{int r=52,a[]=new int[r];for(;n-->0;)if(r()*364>104)++a[(int)(r()*r)];for(;++n<52;)r=r>51&a[n]>1&r()<1-5/Math.pow(5,a[n])&r()<1-Math.pow(2./3,a[n])?n:r;return r;}

আউটপুট শূন্য-ভিত্তিক (0-51); 52 এর মান কোনও খুব আক্রমনাত্মক লোককে নির্দেশ করে না । এটি এখানে অনলাইনে চেষ্টা করুন

Ungolfed:

double r() { return Math.random(); } // shortcut for Math.random(), saves a few bytes

n -> { // lambda taking an intger argument and returning an integer
    int r = 52, // this will hold the result; set to the value for "no Very Angry people" for now
    a[] = new int[r]; // array counting the people whose birthday lies in each week
    for(; n-- > 0; ) // for each person:
        if(r() * 364 > 104) // determine whether their birthday is on a weekday that is not the 30th of December ...
            ++a[(int) (r() * r)]; // ... only if so, increment the counter for a random ISO week
    for(; ++n < 52; ) // loop through the weeks; n is -1 before the loop
        r = r > 51   // if r is still the default ...
          & a[n] > 1 // ... and there is more than one person with a birthday that week ...
          & r() < 1 - 5/Math.pow(5, a[n]) // ... and at least two people have a different birthday ...
          &r() < 1 - Math.pow(2./3, a[n]) // ... and at least one person has the Very Angry personality type ...
          ? n  // ... set the current week as the result ...
          : r; // ... otherwise leave it the same
    return r;  // return the result
}

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