बर्थडे पार्टी शेयर की


9

एक कार्यालय (चलो इसे "द ऑफिस" कहते हैं) कार्यालय जन्मदिन पार्टियों को समेकित करके 2019 में व्यर्थ समय में कटौती करने जा रहा है। उसी सप्ताह के सोमवार और शुक्रवार (समावेशी) के बीच जन्मदिन वाले किसी भी दो लोगों को उस सप्ताह कुछ समय साझा बर्थडे पार्टी के साथ मनाया जाएगा । जिन लोगों का जन्मदिन शनिवार या रविवार को पड़ता है, उन्हें कोई पार्टी नहीं मिलती है।

कुछ लोग ऐसे लोगों के साथ जन्मदिन की पार्टी साझा करना पसंद नहीं करते हैं जो अपना वास्तविक जन्मदिन साझा नहीं करते हैं। वे एक साझा जन्मदिन की पार्टी करने के लिए वेरी एंग्री होंगे ।

हम एक कार्यालय का अनुकरण करने जा रहे हैं और पहले सप्ताह का पता लगा रहे हैं जिसमें कोई व्यक्ति अपने साझा जन्मदिन की पार्टी के बारे में बहुत गुस्से में है ।

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो 2019 के लिए पहले आईएसओ सप्ताह नंबर को आउटपुट करता है जिसमें किसी नकली कार्यालय में किसी को अपने साझा जन्मदिन की पार्टी के बारे में बहुत गुस्सा आता है , जो निम्नलिखित बुनियादी नियमों के अधीन है:

  • इनपुट एक पूर्णांक N > 1, जो कार्यालय में श्रमिकों की संख्या है।
  • एन जन्मदिन खुद को 31 दिसंबर करने के लिए 1 जनवरी से यादृच्छिक पर समान रूप से वितरित कर रहे हैं (उपेक्षा 29 फरवरी)।
  • लेकिन साझा जन्मदिन पार्टियों के निर्धारण के उद्देश्यों के लिए कार्य सप्ताह 2019 आईएसओ सप्ताह तिथियां हैं, जो 2019-W01-1 (2018-12-31) और 2019-W52-7 (2019-12-29) के बीच हैं। हर सोमवार को एक नया आईएसओ सप्ताह शुरू होता है। (मुझे लगता है कि यह सब आपको वास्तव में इस चुनौती के लिए आईएसओ सप्ताह के बारे में जानने की आवश्यकता है)।
  • के लिए एन कार्यालय में लोगों, प्रत्येक एक होने का एक मौका है 1/3 बहुत गुस्से में साझा जन्मदिन पार्टी , व्यक्तित्व के प्रकार ताकि आप वह भी अनुकरण करना होगा।
  • लेकिन वे नाराज नहीं होंगे यदि पार्टी को उन लोगों के साथ साझा किया जाता है जिनके जन्मदिन समान हैं
  • बहुत ही गुस्से वाले व्यक्ति की पहली घटना के लिए आईएसओ सप्ताह संख्या (इसके लिए सटीक प्रारूप तब तक लचीला होता है जब तक कि सप्ताह संख्या स्पष्ट है) । यदि कोई क्रोधित लोग नहीं हैं, तो आप कुछ भी आउटपुट कर सकते हैं जो आईएसओ सप्ताह के साथ भ्रमित नहीं है या प्रोग्राम त्रुटि कर सकता है आदि।

कुछ सरल धारणाएँ:

  • जैसा कि मैंने उल्लेख किया है, 29 फरवरी के मुद्दे को पूरी तरह से अनदेखा करें (एक अनावश्यक जटिलता)
  • सार्वजनिक छुट्टियों को अनदेखा करें (यह एक अंतर्राष्ट्रीय समुदाय है इसलिए हमारी छुट्टियां अलग-अलग होंगी) और मान लें कि कार्यालय प्रत्येक सप्ताह के दिन खुला है।

नियम

यह कोड-गोल्फ है। प्रत्येक भाषा के लिए बाइट्स में सबसे छोटा उत्तर जीतता है। डिफ़ॉल्ट कमियां निषिद्ध हैं।

कोड स्पष्टीकरण का स्वागत करते हैं।

काम के उदाहरण

इनपुट N = 7. के साथ कंट्रास्टेड उदाहरण 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

तो कोई क्रोध नहीं करता। प्रोग्राम या फ़ंक्शन किसी आईएसओ सप्ताह की संख्या के साथ भ्रमित नहीं होने या कुछ आउटपुट करने में त्रुटि कर सकता है।

उदाहरण 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
... २०१ ९ में २ ९ फरवरी का दिन नहीं है! क्या आप एक काम किया उदाहरण जोड़ सकते हैं, कृपया?
झबरा

यदि कोई "बहुत क्रोधित" नहीं है तो आउटपुट क्या होना चाहिए? यह छोटे लिए बहुत आसानी से हो सकता है । N
फ्राईमईएग्गमैन

4
@ शैगी ऐसे लोग हो सकते हैं जो वहां काम करते हैं जिनका जन्मदिन 29 फरवरी है। मैं बस उस संभावना को नजरअंदाज करने के लिए कह रहा हूं क्योंकि यह सिर्फ एक व्यर्थ के मामले को आईएमओ जोड़ता है।
एनजीएम

1
यदि कोई नाराज लोग नहीं हैं, तो कोई भी उपयुक्त आउटपुट जो W01 से W52 या समकक्ष या एक त्रुटि संदेश के लिए ठीक नहीं है। जब मैं मोबाइल बंद करूंगा तो इस प्रश्न को प्रतिबिंबित करूंगा।
एन जी एम

1
हो सकता है कि यह मैं ही हूं, लेकिन मेरे पास जन्मदिन की एक साझा पार्टी है, जिसमें कोई नहीं है। उन सभी को चीर दें जिनके पास सप्ताहांत में उनका जन्मदिन है।
केविन क्रूज़सेन

जवाबों:


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 सप्ताहांत पर आते हैं जब हमने निर्धारित किया है कि आपको इसके बारे में बहुत गुस्सा नहीं आएगा। तो हम केवल आपके बारे में २६०/३६५ की परवाह करते हैं; यानी, जब R(0,364)>104( randint'रेंज समावेशी है)। उस बाधा को देखते हुए, यह सुविचारित है कि आपका सप्ताह का जन्मदिन 2019 के 52 आईएसओ सप्ताह में से किसी भी सप्ताह में आता है, और उस सप्ताह के किसी भी सप्ताह के दिन; और, स्वतंत्र रूप से, कि आप 1 से 3 में एक बहुत गुस्सा व्यक्ति होने की संभावना है।

D तब का एक सेट है, (weeknum,weekday)ताकि यदि कोई संभावित रूप से नाराज व्यक्ति वास्तविक जन्मदिन साझा करता है, तो तब तक Amgry होने की कोई आवश्यकता नहीं है जब तक कि उस सप्ताह जन्मदिन मनाने वाला कोई अन्य व्यक्ति न हो।

यदि किसी भी आईएसओ 2019 सप्ताह के दौरान कोई बहुत गुस्सा लोगों को प्रकट नहीं करता है तो 0 लौटा दिया जाता है; अन्यथा, जल्द से जल्द मेलोडाउन का आईएसओ सप्ताह नंबर वापस आ गया है।


क्या आपको 31 दिसंबर, 2019 के किनारे मामले पर भी विचार नहीं करना चाहिए?
चार्ली

1
@ शार्ली: ज़रूर! लेकिन दिसंबर 31 2018 समान आईएसओ सप्ताह 2019 में 1 जनवरी 2019 तक है, इस प्रकार यह "ईर्ष्या पार्टी सप्ताह" का एक हिस्सा होगा, इसलिए यह काम करता है।
चास ब्राउन

मैं कोई पायथन विशेषज्ञ नहीं हूं, लेकिन मेरा मानना ​​है कि आपका जवाब इसके लिए जिम्मेदार नहीं है: "लेकिन वे नाराज नहीं होंगे यदि पार्टी को उन लोगों के साथ साझा किया जाता है जिनके जन्मदिन समान हैं।" तुम अभी भी मेरे upvote हो गए।
OOBalance

@ स्थिति: उफ़! याद किया कि; संशोधन!
चास ब्राउन

2

जेली ,  36 32  33 बाइट्स

+1 बाइट को ठीक करने के लिए 30-दिसंबर का एज-केस, जिस पर मैंने गौर नहीं किया (जैसा कि चास ब्राउन ने कहा है कि ओपी के नीचे टिप्पणी में है)

-4 एरिक आउटगोलर (इनलाइन हेल्पर और बाहरी उत्पाद के उपयोग के लिए धन्यवाद)

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

एक मोनैडिक लिंक जो में पूर्णांक जहां अर्थ है वर्ष के दौरान कोई भी बहुत नाराज लोग नहीं हैं और अन्य आउटपुट आईएसओ सप्ताह संख्या हैं।[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>26364>104
सीपचैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.