PPCG क्लॉस अपने प्रस्तुतकर्ताओं को देने में मदद करें!


15

पीपीसीजी क्लॉस को उनके प्रस्तुतकर्ताओं को वितरित करने में मदद करें

अवलोकन

PPCG क्लॉस अपने उपहारों को देने में देर से चल रहा है क्योंकि आजकल हमारे पास बहुत सारे अजीब छोटे किडोज़ हैं। यह PPCG क्लॉस के लिए बहुत मुश्किल हो जाता है ताकि सभी प्रस्तुतियों को सही स्थान पर लाया जा सके। आपकी चुनौती उसे सही ढंग से प्रस्तुत करने में मदद करने के लिए है।

जटिलता

उन बच्चों का प्रतिनिधित्व करने वाले पूंजीकृत पहले नामों की एक सूची को देखते हुए, जिन्हें वह संख्याओं द्वारा प्रस्तुत करने और प्रस्तुत करने की सूची देने वाला है, आपको यह पता लगाना चाहिए कि उक्त बच्चों के बीच उपहार कैसे वितरित करें। बेशक वहाँ एक पकड़ है, हालांकि ...।

आजकल बच्चों को अचार मिल रहा है, अगर किडो एक अजीब साथी है (पहले प्रारंभिक ASCII- कोड विषम है) तो वह एक अजीब उपहार चाहता है! यदि वह एक भी साथी है (पहले प्रारंभिक ASCII-code भी है) तो उसे स्पष्ट रूप से एक भी दिया जाना चाहिए! किसी भी बच्चे को 3 से विभाज्य, हालांकि, एक शरारती, शरारती बालक है, इसलिए पीपीसीजी क्लॉस को उन्हें अगले साल व्यवहार करने के लिए पूरी तरह से अनदेखा करना चाहिए। अपने मार्ग को सफल मानने के लिए उसे सभी बच्चों को सभी उपहार देने चाहिए जो उनके योग्य हों और किसी एक बच्चे को बहुत सारे उपहार नहीं देने चाहिए। यदि किसी भी बच्चे को अपने साथियों से 3+ अधिक उपहार मिलते हैं, तो वह अगले साल एक शरारती बच्चा बनने का जोखिम उठाता है, और यह सही नहीं है! इसके अलावा, अगर किसी अच्छे बच्चे को एक और अच्छा बच्चा नहीं मिलता है, तो वह भी उस बच्चे की बुराई कर देगा।

उदाहरण

बच्चे इस प्रकार हैं:

Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]

  • बेट्टी मानवता का बैन है, स्पष्ट रूप से 3 नंबर के साथ cahoots में।
  • एमी और क्लाइड जन्म के बाद से ही अजीब हैं और यहां तक ​​कि उपहार प्राप्त करने से नफरत करेंगे।
  • डेव और फ्रांसिन सामान्य हैं, यहां तक ​​कि, बच्चे; वे केवल प्रस्तुत करना चाहिए!

प्रस्तुत इस प्रकार हैं:

Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]

एक संभावित उत्पादन होगा:

[
    ['Amy',[1,3,5]],
    ['Betty',[]],
    ['Clyde',[7,9,11,13]],
    ['Dave',[2,4,6,8]],
    ['Francine',[10,12,14]]
]

अपवाद परिदृश्य

हालाँकि, सिर्फ इसलिए कि PPCG क्लॉस तैयार और तैयार है, इसका मतलब PPCG क्लॉस नहीं हो सकता है। यहां उन अपवाद परिदृश्यों की एक सूची दी गई है जहां आपको एक संदेश के साथ PPCG क्लॉस के लिए बुरी खबर को तोड़ना होगा:

PPCGmas is cancelled!

निम्नलिखित परिदृश्यों के परिणामस्वरूप क्रिसमस रद्द हो जाएगा:

  • बच्चे नहीं हैं।
    • [],[1,2,3] - Wellp, वे शुल्क।
  • अच्छे बच्चे नहीं हैं।
    • ["Betty"],[1,2,3] - गंभीरता से, बेट्टी पेंच।
  • अच्छे बच्चों की तुलना में कोई प्रस्तुतिकरण या कम प्रस्तुतियाँ नहीं हैं।
    • ["Amy","Charles"],[] - एक या एक से अधिक कोई उपहार प्राप्त नहीं होगा।
    • ["Amy","Charles"],[1] - एक या एक से अधिक कोई उपहार प्राप्त नहीं होगा।
  • सभी अच्छे बच्चों को संतुष्ट करने के लिए विषम / भी प्रस्तुत नहीं हैं।
    • ["Amy","Dave"],[2,4,6] - एमी पर शिकंजा कसा गया है।

यहां उन परिदृश्यों की सूची दी गई है, जिन्हें PPCGmas को प्रभावित नहीं करना चाहिए:

  • बचे हुए प्रस्तुत (सभी बच्चों को अधिकतम राशि प्राप्त की जानी चाहिए)।
    • ["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]

मुख्य नियम दोहराए गए

  1. अच्छे बच्चे या तो या भी विषम होते हैं, जो उनके पहले प्रारंभिक पर आधारित होते हैं।
  2. बुरे बच्चों में 3 के द्वारा पहली प्रारंभिक पूर्ण विभाज्य है।
  3. सभी अच्छे बच्चों को कम से कम एक वर्तमान प्राप्त करना चाहिए।
  4. कोई भी अच्छा बच्चा किसी भी अन्य अच्छे बच्चे की तुलना में 2 से अधिक प्रस्तुत करने के लिए नहीं है।
  5. यदि बचे हुए प्रस्तुत किए जाने हैं तो आपको अधिकतम 4 का उल्लंघन किए बिना उन्हें वितरित करना होगा।
  6. बुरे बच्चों को बिलकुल भी प्रस्तुत नहीं करना चाहिए।
  7. यदि इनमें से किसी का भी उल्लंघन किया जाता है, तो आपको इसका उत्पादन अवश्य करना चाहिए PPCGmas is cancelled!

I / O प्रारूप आवश्यकताएँ

  • 1 इनपुट में पहले नामों का एक सरणी / सूची / अल्पविराम-सीमांकित स्ट्रिंग होना चाहिए, न कि केवल शुरुआती।
  • दूसरा इनपुट सकारात्मक पूर्णांकों की एक सरणी / सूची / अल्पविराम-सीमांकित स्ट्रिंग होना चाहिए।
  • आउटपुट आपके द्वारा प्रस्तुत किए गए अर्थों को कैसे वितरित करता है, इसका कोई भी संकेत हो सकता है; या PPCGmas is Cancelled!

जीत का मानदंड:

TL; DR: बेट्टी एक झटका है, प्रतिस्पर्धा मत करो।


मुझे समझ में नहीं आता, उदाहरण में, बेट्टी क्यों नहीं मिलती है 3? संपादित करें : यदि किसी को "बेटी को पेंच" करना चाहिए, तो वह चुनौती में क्यों है?
NoOneIsHere

@SeeOneRhino B = 66, 66% 3 = 0, 66 0 से विभाज्य है, बेट्टी शरारती है।
मैजिक ऑक्टोपस Urn

जवाबों:


4

एपीएल, 171 बाइट्स

{D←{⍵=1:⊂⍺⋄0~⍨¨↓⍵↑⍉↑⍺⊂⍨1=⍵|⍳⍴⍺}⋄e←⍺~o←⍺/⍨2|⍺⋄(0=≢G)∨0∊≢¨P←P↑⍨¨(2+⌊/R)⌊R←≢¨P←(o D≢O),e D≢E←G~O←G/⍨2|⎕A⍳⊃¨G←⍵/⍨×3|⊃∘⎕UCS¨⍵:'PPCGmas is cancelled!'⋄(O,E,B),[⍟4]P,(≢B←⍵~G)↑⊂⍬}

यह प्रस्तुत करता है बाएं तर्क के रूप में, बच्चों को सही तर्क के रूप में, और एक मैट्रिक्स लौटाता है जहां पहले कॉलम में बच्चों के नाम होते हैं और दूसरे कॉलम में वे प्रस्तुत होते हैं जो उन्हें मिलते हैं।

परीक्षण के मामलों:

      P←{D←{⍵=1:⊂⍺⋄0~⍨¨↓⍵↑⍉↑⍺⊂⍨1=⍵|⍳⍴⍺}⋄e←⍺~o←⍺/⍨2|⍺⋄(0=≢G)∨0∊≢¨P←P↑⍨¨(2+⌊/R)⌊R←≢¨P←(o D≢O),e D≢E←G~O←G/⍨2|⎕A⍳⊃¨G←⍵/⍨×3|⊃∘⎕UCS¨⍵:'PPCGmas is cancelled!'⋄(O,E,B),[⍟4]P,(≢B←⍵~G)↑⊂⍬}
      (⍳14) P 'Amy' 'Betty' 'Clyde' 'Dave' 'Francine'
┌────────┬─────────┐
│Amy     │1 5 9 13 │
├────────┼─────────┤
│Clyde   │3 7 11   │
├────────┼─────────┤
│Dave    │2 6 10 14│
├────────┼─────────┤
│Francine│4 8 12   │
├────────┼─────────┤
│Betty   │         │
└────────┴─────────┘
      1 2 3 P ⍬
PPCGmas is cancelled!
      1 2 3 P ⊂'Betty'
PPCGmas is cancelled!
      ⍬ P 'Amy' 'Charles'
PPCGmas is cancelled!
      (,1) P 'Amy' 'Charles'
PPCGmas is cancelled!
      2 4 6 P 'Amy' 'Dave'
PPCGmas is cancelled!
      2 4 6 8 10 12 14 7 9 P 'Amy' 'Dave'
┌────┬───────┐
│Amy │7 9    │
├────┼───────┤
│Dave│2 4 6 8│
└────┴───────┘

यहाँ अनप्लग्ड संस्करण।


यह "क्रिसमस" क्या है, जिसे आप असंगठित संस्करण में बोलते हैं: पी?
मैजिक ऑक्टोपस Urn

4

जावास्क्रिप्ट (ईएस 6), 525 492 454 453 बाइट्स

-71 बाइट्स थैंक्स टू @Guedes -1 बिट थैंक्स टू @ जेक कॉब

P=(K,p)=>{y='charCodeAt';n=(C)=>C[y](0)%3>0;N=(C)=>C[y](0)%3<1;E=(C)=>C[y](0)%2>0;O=(C)=>C[y](0)%2<1;f=(U)=>U%2<1;F=(U)=>U%2;M=(U,C)=>C%s==S;s=S=0;a=new Array();G='filter';e=p[G](f);o=p[G](F);J=K[G](n);r=J[G](O);L='length';i=J[G](E);s=r[L];for(S=0;S<r[L];S++){a.push([r[S],e[G](M)]);}s=i[L];for(S=0;S<i[L];S++){a.push([i[S],o[G](M)]);}K=K[G](N);for(S=0;S<K[L];S++){a.push(K[S],[]);}return(e[L]<r[L]||o[L]<i[L]||(r[L]+i[L])<1)?"PPCGmas is Cancelled!":a;}

इसे ऑनलाइन आज़माएं!

गैर-गोल्फ संस्करण

मुझे लगता है कि और अधिक गोल्फ हो सकता है। मैंने सिर्फ गैर-गोल्फ संस्करण का एक साहित्यिक अनुवाद किया।

यह अब "संता" (115 + 97 + 110 + 116 + 97 + 535) की रचना करने वाले चारकोड के योग से कम है। Yeay


C[0]इसके बजाय C.charCodeAt(0)11 बाइट्स बचाता है। इसके अलावा, जब कोई संपत्ति कई बार दोहराती है तो आप उसके नाम को स्टोर कर सकते हैं L='length', और i[L]इसके बजाय उपयोग कर सकते हैं i.length
वाशिंगटन गुएड्स

2
वैसे, PPCG में आपका स्वागत है !!
वाशिंगटन Guedes

सलाह के लिए धन्यवाद! : डी। वैसे मैंने C.charCodeAt (0) के बजाय C [0] की कोशिश की है (repl.it पर आधुनिक फ़ायरफ़ॉक्स ब्राउज़र) और यह पहले सत्यापन पर "PPCGmas रद्द कर दिया" है। दूसरे के लिए, यह अच्छी तरह से काम करता है, बाइट्स के लिए धन्यवाद :)
कोल्डके डे

1
यह मेरे मूल उत्तर के समान बग है जहां यह विफल रहता है यदि अच्छे बच्चे सभी या सभी विषम हैं, तो इस परीक्षण का प्रयास करें:P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
जेक कोब

यह सच है ! ऐसा इसलिए था क्योंकि मैंने अंतिम सत्यापन में से एक में "+" के बजाय "&&" का उपयोग किया था। आपके लिए धन्यवाद यह समस्या अब ठीक हो गई है, और मैंने एक बाइट प्राप्त किया।
कोल्डके

4

पायथन 2, 334 355 354 बाइट्स

k,p=input()
z=zip
l=len
e=[];o=[];g=[];b=[];q=[];r=[]
for x in k:[g,b][ord(x[0])%3<1]+=x,
for x in g:[e,o][ord(x[0])&1]+=x,
for x in p:[q,r][x&1]+=x,
v=l(e)
w=l(o)
t=v and l(q)/v
u=w and l(r)/w
if u:t=min(t,u+2)
if t:u=min(u,t+2)
if l(g)*(t or v<1)*(u or w<1)<1:exit('PPCGmas is cancelled!')
print z(e,z(*[iter(q)]*t))+z(o,z(*[iter(r)]*u))+z(b,[()]*l(b))

केवल-या केवल विषम बच्चों के मामले को संभालने के लिए 21 बाइट्स खो दिया।

@TuukkaX को 1 बाइट धन्यवाद दिया।


नहीं काम करता है, ord('A')%3==0है Falseलेकिन 1-ord('A')%3है -1
जेक कोब

अरे हाँ, तुम सही हो। मैं क्षमाप्रार्थी हूं। %3<1कार्य करना चाहिए।
यति

2

जावास्क्रिप्ट (ES6), 218 216 बाइट्स

(a,b)=>{c={};a.forEach(d=>c[d]=[]);e=f=0;while(!e){e=g=1;a.forEach(h=>(j=h.charCodeAt())%3?(k=b.findIndex(l=>l%2==j%2))<0?g=0:c[h][f+1]?0:e=0&c[h].push(b.splice(k,1)[0]):0);f+=!e&g}return f?c:"PPCGmas is cancelled!"}

आउटपुट (यदि यह त्रुटि स्ट्रिंग नहीं है) एक ऑब्जेक्ट है जिसकी कुंजी बच्चों के नाम हैं; मूल्य उन उपहारों का सरणी है जो बच्चे को प्राप्त होते हैं।

दो बाइट्स बचाए जब मुझे एहसास हुआ कि मेरे पास बेमानी कोष्ठक की एक जोड़ी है।

Ungolfed संस्करण:

(names, gifts) => {

  // Initialize result. Set every child's gift array to empty
  var result = {};
  names.forEach(name =>
    result[name] = [];
  );

  // Initialize external loop values
  var done = false;
  var leastNumberOfPresentsAmongGoodChildren = 0;

  // Give the gifts
  while (!done) {

    // Initialize internal loop values
    done = true;
    var everyGoodChildGotGift = true;

    // Try to give at most one gift to every good child
    names.forEach(name => {
      var nameCode = name.charCodeAt(0);

      // Ignore bad children
      if ((nameCode % 3) != 0) {

        // Try to find an appropriate gift
        var giftIndex = gifts.findIndex(gift => (gift % 2) == (nameCode % 2));

        // If there is no gift, set the flag
        if (giftIndex < 0)
          everyGoodChildGotGift = false;

        // Make sure we don't give too many gifts
        else if (result[name].length < leastNumberOfPresentsAmongGoodChildren + 2) {

          // Remove the gift from the gifts array (we can't give it again)
          var giftToGive = gifts.splice(giftIndex, 1)[0];

          // Give the gift to the child
          result[name].push(giftToGive);

          // If at least one child got a gift, try to give more gifts
          done = false;
        }
      }
    }); // end forEach

    // If we're done, that means we couldn't give a gift to any good child
    if (done)
      everyGoodChildGotGift = false;

    // If every good child got a gift, then increase the count
    if (everyGoodChildGotGift)
      leastNumberOfPresentsAmongGoodChildren++;

  } // end while

  // If every good child gets at least one gift, return who gets what
  if (leastNumberOfPresentsAmongGoodChildren != 0)
    return result;
  else
    return "PPCGMas is cancelled!"; // IT'S ALL YOUR FAULT, BETTY. YOU'VE RUINED PPCGMAS.
}

नमस्ते, PPCG में आपका स्वागत है! आपको देखकर खुशी होती है कि यह समझने के लिए कि पोस्ट कैसे स्वरूपित होती हैं। हैप्पी कोड-गोल्फिंग!
अताको

@ATaco धन्यवाद! आई लर्क
इयान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.