समुद्री डाकू दुनिया के वितरण के नियम


14

एक मौजूदा "गेम" है जहां समुद्री डाकू तर्कसंगत रूप से कुछ नियमों के अनुसार सोने के सिक्कों को विभाजित करते हैं। विकिपीडिया से उद्धरण :

5 तर्कसंगत समुद्री डाकू हैं, ए, बी, सी, डी और ई। वे 100 सोने के सिक्के पाते हैं। उन्हें यह तय करना होगा कि उन्हें कैसे वितरित किया जाए।

समुद्री डाकू के पास वरिष्ठता का सख्त आदेश है: A, B से श्रेष्ठ है, जो C से श्रेष्ठ है, जो D से श्रेष्ठ है, जो E से श्रेष्ठ है।

समुद्री डाकू दुनिया के वितरण के नियम इस प्रकार हैं: सबसे वरिष्ठ समुद्री डाकू सिक्कों के वितरण का प्रस्ताव करना चाहिए। प्रस्तावक सहित समुद्री डाकू, फिर इस वितरण को स्वीकार करने के लिए वोट देते हैं। टाई वोट के मामले में प्रस्तावक के पास कास्टिंग वोट होता है। यदि वितरण स्वीकार किया जाता है, तो सिक्के वितरित किए जाते हैं और खेल समाप्त हो जाता है। यदि नहीं, तो प्रस्तावक को समुद्री डाकू जहाज से उतारा जाता है और मर जाता है, और अगले सबसे वरिष्ठ समुद्री डाकू सिस्टम को फिर से शुरू करने के लिए एक नया प्रस्ताव बनाता है।

समुद्री डाकू तीन कारकों पर अपने निर्णय लेते हैं। सबसे पहले, प्रत्येक समुद्री डाकू जीवित रहना चाहता है। दूसरा, दिया गया अस्तित्व, प्रत्येक समुद्री डाकू प्रत्येक प्राप्त सोने के सिक्कों की संख्या को अधिकतम करना चाहता है। तीसरा, प्रत्येक समुद्री डाकू दूसरे जहाज पर फेंकना पसंद करेगा, यदि अन्य सभी परिणाम अन्यथा समान होंगे। समुद्री डाकू एक-दूसरे पर भरोसा नहीं करते हैं, और न ही समुद्री लुटेरों के बीच एक प्रस्तावित वितरण योजना के अलावा किसी भी वादे को पूरा करेंगे और न ही सम्मानित करेंगे जो प्रत्येक समुद्री डाकू को सोने के सिक्कों की एक पूरी संख्या देता है।

चुनौती

इनपुट के रूप में एक पूर्णांक लें n, 1 <= n <= 99, जहां nसमुद्री डाकू की संख्या है - और सिक्कों के वितरण को आउटपुट करता है, जो पहले समुद्री डाकू से शुरू होता है।

परीक्षण के मामले (पहली पंक्ति इनपुट है; दूसरा आउटपुट):

1
100

2
100 0

3
99 0 1

5
98 0 1 0 1

यह , इसलिए बाइट्स में सबसे छोटा समाधान जीतता है।


1
मुझे लगता है कि यह पहले पूछा गया था, लेकिन मुझे नहीं पता कि यह कहां मिलेगा।
फ़ेरसम


3
Args [0]। जावा का अब इसका उपयोग करने का एक कारण है।
Addison Crump

3
सीमा क्यों n < 100? ओवर-स्टाफ़्ड, अंडर-गिल्ड पायरेट जहाजों को भी वितरण की मदद की आवश्यकता होती है।
रेयान कैवानुआग

1
@ नील जो एक भयानक विचार है। यदि वह "तर्कसंगत" समुद्री डाकू करता है, तो ए के अलावा सभी समुद्री डाकू ए को मारने की कोशिश करेंगे ताकि उन्हें $ 100 / (n-1) $ के बदले मिल जाए। यह अंतिम दो समुद्री डाकू को छोड़कर सभी को जल्दी से मार देगा।
कीन

जवाबों:


12

जेली , 11 10 बाइट्स

R%2ḊµSȷ2_;

इसे ऑनलाइन आज़माएं! या एक ही बार में सभी परीक्षण मामलों को सत्यापित करें

यह काम किस प्रकार करता है

इनपुट n के लिए , कार्य सूची x, 0, 1, 0,… लंबाई n जिसका योग 100 है बनाने के लिए उबलता है ।

R%2ḊµSȷ2_;  Main link. Input: n

R           Yield [1, 2, ..., n].
 %2         Replace each integer by its parity. Yields [1, 0, 1, 0, ...].
   Ḋ        Dequeue; remove the first 1. This yields the list a = [0, 1, ...].
    µ       Begin a new, monadic link. Argument: a
     S      Compute the sum of a.
      ȷ2_   Subtract the sum from 100. (ȷ2 is 1e2 in Python syntax)
         ;  Prepend the difference to a.

7

पायथन, 33 बाइट्स

lambda n:([-n/2+101]+[0,1]*n)[:n]

पहले मूल्य की गणना करता है, कुछ जोड़ता है 0, 1, 0, 1..., लंबाई में छोटा करता है n

ध्यान दें कि -n/2+101छोटा नहीं किया जा सकता है 101-n/2क्योंकि एकता और बाइनरी -में अलग-अलग पूर्वता है: पूर्व को (-n)/2और बाद के रूप में पार्स किया गया है 101-(n/2)

पुनरावृत्ति बहुत लंबा था (45):

f=lambda n,i=100:1/n*[i]or f(n-1,i-n%2)+[n%2]

4

MATL , 12 बाइट्स

:2\ts_101+l(

यह भाषा / संकलक के वर्तमान संस्करण (9.2.2) का उपयोग करता है , जो इस चुनौती से पहले है।

उदाहरण

>> matl :2\ts_101+l(
> 5
98  0  1  0  1

व्याख्या

:         % implicitly input number "n". Generate vector [1, 2, ..., n]
2\        % modulo 2. Gives [1, 0, 1, ...]
ts        % duplicate and compute sum
_101+     % negate and add 101
l(        % assign that to first entry of [1, 0, 1, ...] vector. Implicitly display


3

पायथन, 62 58 बाइट्स

संपादित करें: खुशी है कि मैंने इसे वन-लाइनर बना दिया। लेकिन मैं पायथन के लिए हार गया। इसलिए, यह केवल संदर्भ के लिए है। साभार @Zgarb

def x(i):n=[~j%2for j in range(i)];n[0]=101-sum(n);print n

यह इनपुट लेता है, 1 से i तक सभी नंबरों की एक सूची pf समानता बनाता है। फिर पहला तत्व i से 101-सम (n) और प्रिंट में सेट करता है।

इसे यहाँ आज़माएँ


3

जावास्क्रिप्ट ईएस 6, 45 बाइट्स

a=>[...Array(a)].map((x,y)=>y?--y%2:202-a>>1)

@ बाइट के लिए धन्यवाद 1 बाइट बचाया!


1
202-a>>1एक बाइट बचाता है।
नील

3

S, 14 चार्ट / 26 बाइट्स

⩥ï⒨?‡$%2:ỉ-ï»1

Try it here (Firefox only).

बुरा नहीं है, लेकिन अच्छा भी नहीं है ...

व्याख्या

⩥ï⒨?‡$%2:ỉ-ï»1 // implicit: ï=input, ṥ=101
⩥ï⒨            // map over a range [0,ï) and return:
    ?‡$%2       // (if mapitem>0) then ($-1) mod 2
         :ỉ-ï»1 // (else) 202-ï>>1
                // implicit output

2

गंभीरता से, 23 17 बाइट्स

संपादित करें : धन्यवाद @quintopia

,R`2@%`M;Σ2╤u-0(T

मेरे पायथन उत्तर के समान दृष्टिकोण का उपयोग करता है, लेकिन मैं मैपिंग का उपयोग करके मॉडुलो 2 करता हूं, और कई बार, मैं अपने स्टैक को घुमाता हूं।

स्पष्टीकरण :

यह कोड इनपुट को धक्का देता है (मैं इसे कॉल करूंगा i)। अगला धक्का देता है range(1,i+1)और एक कार्य करता है। फिर 2 को धक्का देता है, ढेर को घुमाता है, और अंत में मोडुलो लेता है।

अगला, इस फ़ंक्शन को रेंज में चलने योग्य पर मैप करें। यह सूची में प्रत्येक तत्व की समानता देता है।

अंत में, स्टैक को डुप्लिकेट करता है, समता सूची को भेजता है, 2, 10 ^ 2, और 100 + 1 को धकेलता है, और योग को घटाता है (मुझे इस मान को कॉल करें n)। अगला कोड 0 को धक्का देता है, स्टैक को 1 से घुमाता है, और सूची के सूचकांक 0 तत्व को n पर सेट करता है। परिणामी सूची को स्पष्ट रूप से मुद्रित किया जाता है।


यह 17 बाइट्स से अधिक नहीं होना चाहिए:,R`2@%`M;Σ2╤u-0(T
क्विंटोपिया

1

जाप, 14 बाइट्स

अभी तक एक और चुनौती है जहाँ मैं खुद को एक अंतर्निर्मित कामना के लिए पाता हूँ, जिसे मैंने सिर्फ जोड़ने पर विचार किया था ...

1oU mv u#Ê-UÁ1

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

1oU mv u#Ê-UÁ1  // Implicit: U = input integer
1oU             // Create the range [1, U).
    mv          // Map each item to 1 if even, 0 otherwise.
       u        // Unshift (add to the beginning of the array)
        #Ê-UÁ1  //  the char code of Ê (202), minus U >>> 1 (floor of U / 2).

1

एक्टीस्क्रिप्ट 3, 87 बाइट्स

function x(n){var l=[],i=1;for (l[0]=int(101-n/2);i<n;){l[i]=++i%2;}return l.join(" ")}

यह सर्वश्रेष्ठ गोल्फिंग भाषा नहीं है, लेकिन मुझे as3 उत्तर पोस्ट करने में मज़ा आता है।



0

पर्ल 51 49 44 बाइट्स

$,=$";@"=map{$i++%2}2..<>;say 100-(@">>1),@"

निम्नलिखित perlrun विकल्पों की आवश्यकता है -E

$ perl -E'$,=$";@"=map{$i++%2}2..<>;say 100-(@">>1),@"'<<<5
98
0
1
0
1

0

QBIC , 28 25 बाइट्स

:?100-(a-1)'\`2[2,a|?b%2

व्याख्या

:               Get command line parameter, assign to 'a'
                Determine the part of the treasure for the crew:
      (a-1) \ 2 Integer Divide 'a'-1 by 2. The -1 compensates for even cases.
           ' `  Make \ a direct command for QBasic instead of substituting it for ELSE.
?100-           Print 100 coins, minus the crew-share --> Captain's booty.
[2,a|           FOR b=2; b <= a; b++; ie for every other crew member
?b%2            Give every odd crewman a coin.
                [FOR loop implicitly closed by QBIC]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.