जोखिम की लड़ाई: नीचे जा रहे हैं


16

जोखिम में एक लड़ाई के लिए पासा रोल की दो सूचियों को देखते हुए, आपके कार्यक्रम या फ़ंक्शन को आउटपुट करना होगा कि प्रत्येक खिलाड़ी कितने सैनिक खो देता है।

पृष्ठभूमि

आपको इसे पढ़ना नहीं है, क्योंकि यह केवल पृष्ठभूमि है। बेरोकटोक जारी रखने के लिए "टास्क" को छोड़ दें।

जोखिम के खेल में , एक खिलाड़ी दूसरे खिलाड़ी पर हमला कर सकता है (वास्तव में, यह जीतने के लिए आवश्यक है)। एक लड़ाई का परिणाम पासा के रोल से निर्धारित होता है। प्रत्येक लड़ाई उप-लड़ाइयों के उत्तराधिकार के रूप में होती है, जिसमें प्रत्येक खिलाड़ी 2अपनी सेना के टुकड़ों को खो सकता है ।

एक उप-लड़ाई में, रक्षक और हमलावर प्रत्येक पासा को रोल करते हैं जिनकी संख्या इस चुनौती के लिए अप्रासंगिक परिस्थितियों के आधार पर भिन्न हो सकती है। हमलावर की उच्चतम-मूल्यवान मृत्यु की तुलना रक्षक के उच्चतम-मूल्यवान मरने से की जाती है। यदि हमलावर की मृत्यु रक्षक के मरने की तुलना में अधिक है, तो रक्षक एक टुकड़ा खो देता है। अन्यथा, हमलावर एक टुकड़ा खो देता है।

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

(डिफेंडर जीतता है। यदि डिफेंडर और हमलावर दोनों एक रोल करते हैं 4, तो हमलावर एक टुकड़ा खो देता है।)

पासा तुलना

विकिपीडिया लेख के इस उप-युद्ध में, हमलावर का पासा लाल है और रक्षक का पासा सफेद है। हमलावर का पासा 4सबसे ज्यादा है और बचावकर्ता का उच्चतम है 3। चूंकि हमलावर अधिक था, डिफेंडर एक टुकड़ा खो देता है। दूसरा-सबसे अधिक 3हमलावर के 2लिए और रक्षक के लिए हैं। चूंकि हमलावर फिर से उच्च था, डिफेंडर एक और टुकड़ा खो देता है। इस प्रकार इस उप-लड़ाई में, हमलावर कोई टुकड़ा नहीं खोता है और रक्षक 2टुकड़े खो देता है।

ध्यान दें कि तीसरे-उच्चतम टुकड़ों की तुलना नहीं की जाती है। इसका कारण यह है कि डिफेंडर के पास एक एकल उप-लड़ाई पर दो से अधिक पासा नहीं है, इसलिए कभी भी तुलना करने के लिए तीसरे-उच्चतम टुकड़े नहीं हैं।

कार्य

किसी भी सुविधाजनक रूप में दोनों के हमलावर और जोखिम की उप-लड़ाई के रक्षक के दोनों में अनसुचित पासा रोल (रेंज 1 से 6 समावेशी में पूर्णांक) को देखते हुए, प्रत्येक खिलाड़ी को सेना के टुकड़े की संख्या का उत्पादन होता है। आउटपुट किसी भी सुविधाजनक रूप में हो सकता है, जब तक कि पांच संभावनाओं को इंगित करने के लिए अलग-अलग आउटपुट होते हैं। आपको इंगित करना चाहिए कि आपके प्रश्न में उन विभिन्न आउटपुट क्या हैं।

आउटपुट निम्नानुसार निर्धारित किया जाता है: साथ शुरू करें def=0और atk=0। यदि हमलावर के पासा रोल की सूची का सबसे बड़ा मूल्य रक्षक के पासा रोल की सूची के सबसे बड़े मूल्य से अधिक है, तो वेतन वृद्धि def। अन्यथा, वेतन वृद्धि atk

यदि पासा रोल की दोनों सूचियों की लंबाई कम से कम है 2, तो: यदि हमलावर के पासा रोल की सूची का दूसरा सबसे बड़ा मूल्य सूची के दूसरे सबसे बड़े मूल्य से अधिक है, तो वेतन वृद्धि defऔर अन्यथा वेतन वृद्धि atk

अंत में, प्रोग्राम या फ़ंक्शन को निम्न 5 आउटपुट संभावनाओं में से प्रत्येक के लिए एक विशिष्ट पहचानकर्ता का उत्पादन करना चाहिए:

  ╔═══╦═══╗
  ║atk║def║
  ╠═══╬═══╣
  ║ 1 ║ 0 ║
  ║ 0 ║ 1 ║
  ║ 2 ║ 0 ║
  ║ 1 ║ 1 ║
  ║ 0 ║ 2 ║
  ╚═══╩═══╝

उदाहरण

डिफेंडर: [3, 2] हमलावर: [2, 4, 1] बचावकर्ता का 3अधिकतम और हमलावर का अधिकतम है 44>3, तो def=1 दूसरा डिफेंडर है 2और दूसरा हमलावर है 2Not(2>2), तो atk=1। तब उत्पादन हो सकता था [1,1]

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

Defender
Attacker
Output (as [def,atk])
-----
[1]
[1]
[0,1]
-----
[6,6]
[1,1,1]
[0,2]
-----
[1,2]
[5,2,3]
[2,0]
-----
[5]
[3,4]
[0,1]
-----
[4]
[4,5]
[1,0]
-----
[1,3]
[1,2,3]
[1,1]
-----
[4]
[4,5,6]
[1,0]
-----
[4,5]
[6,2]
[1,1]
-----
[5]
[6,1,3]
[1,0]
-----
[5,5]
[4,4,1]
[0,2]
-----
[2,5]
[2,2]
[0,2]
-----
[6,6]
[4,4,3]
[0,2]
-----
[2,1]
[4,3]
[2,0]
-----
[4]
[1,5]
[1,0]
-----
[1]
[5,2]
[1,0]
-----
[6,2]
[4]
[0,1]
-----
[4,2]
[2,5,5]
[2,0]
-----
[2]
[6,6,2]
[1,0]
-----
[6]
[2,6]
[0,1]
-----
[3,1]
[1]
[0,1]
-----
[6,2]
[3,5,2]
[1,1]
-----
[4,2]
[1,1]
[0,2]
-----
[4,3]
[5,4,1]
[2,0]
-----
[5,6]
[1,2]
[0,2]
-----
[3,2]
[4,4]
[2,0]
-----
[2]
[6,3,4]
[1,0]
-----
[1,4]
[6,2,4]
[2,0]
-----
[4,2]
[2,5,4]
[2,0]
-----
[5]
[6,2,1]
[1,0]
-----
[3]
[2,5,4]
[1,0]
-----
[5,4]
[2]
[0,1]
-----
[6,3]
[2,6,5]
[1,1]
-----
[3,1]
[4]
[1,0]
-----
[4]
[6,6,5]
[1,0]
-----
[6,3]
[4,2]
[0,2]
-----
[1,6]
[5,4]
[1,1]
-----
[3,6]
[4,4]
[1,1]
-----
[5,4]
[5,1,1]
[0,2]
-----
[6,3]
[5,4]
[1,1]
-----
[2,6]
[1,2]
[0,2]
-----
[4,2]
[3,5,5]
[2,0]
-----
[1]
[1,2,1]
[1,0]
-----
[4,5]
[1,6]
[1,1]
-----
[1]
[3,5,1]
[1,0]
-----
[6,2]
[6,2]
[0,2]

नमूना कार्यान्वयन

अजगर 2 या 3

def risk(atk_rolls,def_rolls):
    # set the rolls in descending order, e.g. [5,3,2]
    atk_rolls = sorted(atk_rolls,reverse = True)
    def_rolls = sorted(def_rolls,reverse = True)
    # minimum length.
    minlen = min(len(atk_rolls),len(def_rolls))
    atk_lost = 0
    def_lost = 0
    # compare the highest-valued rolls
    if atk_rolls[0]>def_rolls[0]:
        def_lost += 1
    else:
        atk_lost += 1
    if minlen == 2:
        # compare the second-highest-valued rolls
        if atk_rolls[1] > def_rolls[1]:
            def_lost += 1
        else:
            atk_lost += 1
    return [def_lost, atk_lost]    

विशेष विवरण

  • इनपुट को किसी भी रूप में लिया जा सकता है जो स्पष्ट रूप से केवल डिफेंडर के रोल और हमलावर के रोल को एन्कोड करता है ।
  • आउटपुट किसी भी रूप में हो सकता है जो ऊपर सूचीबद्ध पांच संभावनाओं में से प्रत्येक के लिए एक अद्वितीय आउटपुट प्रदान करता है।
  • डिफेंडर के रोल सेट में पूर्णांक 1या 2पूर्णांकों की एक सूची है [1,2,3,4,5,6]। हमलावर रोल की एक सूची रहे हैं 1करने के लिए 3सेट में पूर्णांकों [1,2,3,4,5,6]
  • चूंकि यह , प्रत्येक भाषा में सबसे छोटा कोड जीतता है! करो नहीं गोल्फ भाषाओं में जवाब अन्य भाषाओं में पोस्टिंग जवाब से आप को हतोत्साहित करते हैं।

सैंडबॉक्स पर यह देखा, अच्छा सवाल
नूह क्रिस्टीनो


हमलावर हार जाता है यदि उसका अधिकतम रोल डिफेंडर के उच्चतम रोल के बराबर है, है ना?
मिस्टर एक्सकोडर

1
हां @ मिस्टरकोड, डिफेंडर जीतता है।
फायरफ्लेम 241

इसलिए मैंने टिप्पणी को हटा दिया :)
श्री एक्सकोडर

जवाबों:


8

नंद द्वार, २३।

Logisim के साथ बनाया गया

इनपुट 3-बिट अहस्ताक्षरित बाइनरी हैं, बाईं ओर दर्ज किया गया है। आउटपुट (2 बिट्स) दाईं ओर हैं।

यह स्क्रीन पर फिट होने के लिए बहुत बड़ा है और Logisim ज़ूम नहीं कर सकता है, इसलिए छवि ब्लैक-एंड-व्हाइट है। माफ़ करना :(

सभी परीक्षण मामलों के लिए काम करता है।

कुछ मेमोरी सर्किट का उपयोग करके ऐसा करने का एक बेहतर तरीका है, जिससे बड़े वर्गों का पुन: उपयोग किया जा सकता है।


4

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

NṢ€>/Ṡḟ-o-S

Defender, Attackerरोल की सूची (प्रत्येक सूची के रूप में) की एक विवादास्पद लिंक , बीच में एक पूर्णांक -2और 2समावेशी (रक्षक नुकसान - हमलावर नुकसान) लौटाती है:

result : [def, atk]
    -2 : [  0,   2]
    -1 : [  0,   1]
     0 : [  1,   1]
     1 : [  1,   0]
     2 : [  2,   0]

इसे ऑनलाइन आज़माएं! या एक परीक्षण सूट देखें(जो परिणाम को ओपी प्रारूप में मैप करता है)।

कैसे?

NṢ€>/Ṡḟ-o-S - Link: list [list Def, list Atk]
N           - negate all the rolls
 Ṣ€         - sort €ach of the lists of -1*rolls (max rolls are to the left now)
    /       - reduce by:
   >        -   is greater than?  (when len(Atk) > len(Def) leaves trailing negatives)
     Ṡ      - sign (maps all negatives to -1; zeros and ones of comparison unchanged)
       -    - literal -1
      ḟ     - filter discard (remove the -1s)
         -  - literal -1
        o   - logical or, vectorises (replaces the zeros with minus ones)
          S - sum

2

रेटिना , 82 बाइट्स

%O^`.
((.)+).*(¶(?<-2>.)+)(?(2)(?!)).*
$1$3
O$`.
$.%`
\d
$*1D
(1+)D1*\1

1+D
A
O`.

इसे ऑनलाइन आज़माएं! इनपुट की पहली पंक्ति हमलावर का पासा है, दूसरा बचावकर्ता का पासा है। रिटर्न्स (अलग पंक्ति में) AA, AD, DD, Aया Dके रूप में उपयुक्त।



2

MATL , 23 बाइट्स

oH2$S1&Y)Y&t1M>t~b,Y&sD

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

यह सुनिश्चित नहीं है कि रक्षकों को हमलावरों की तुलना में अधिक पासा की अनुमति क्यों है, लेकिन शायद मैं रिस्क में पारंगत नहीं हूं। मुख्य कार्यक्रम बस है >t~,sD, अन्य सभी बाइट्स अलग-अलग इनपुट लंबाई के लिए अनुमति देने के लिए हैं, थोड़ा छँटाई के साथ। इनपुट डिफेंडर द्वारा पीछा किया जाता है, आउटपुट डिफेंडर घाटे के बाद हमलावर नुकसान होता है।

o    % Convert input to numeric array, padding with zeroes 
H2$S % Sort row-wise (specified to prevent 1v1 sorting)
1&Y) % Split attacker/defender
Y&t  % Logical and to filter out excess dice. Duplicate for 'do twice' later.
1M>  % Get throws again, decide who won
t~   % And the inverse to decide who lost
b,   % Bubble filter to the top. Do twice:
  Y& % Apply filter
  sD % Sum of losses. Display.

2

जावास्क्रिप्ट (स्पाइडरमोनी) , 97 83 78 बाइट्स

d=>a=>{for(u=v=0;d.sort()>[]&a.sort()>[];)a.pop()>d.pop()?u++:v++
return[u,v]}

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

-4 बाइट्स और @ नोव्स और @ क्रैग एयर
-1 बाइट की बदौलत @ शागी को धन्यवाद


दो रक्षकों के खिलाफ एक हमलावर के लिए काम नहीं करता है।
नील

ओह हम्म मैं उस बारे में नहीं सोचता था। मैं इसे ठीक कर
दूंगा

2
यह काम कर सकता है।
अंडा

@ ओवस का सॉल्यूशन सभी टेस्ट केस पास करता है, आप कुछ बाइट्स भी बचा सकते हैं (टियो लिंक बहुत बड़ा था):d=>a=>{for(u=v=0;d.sort()>[]&a.sort()>[];)a.pop()>d.pop()?u++:v++;return[u,v]}
क्रेग आयरे

पहली लाइन ब्रेक अनावश्यक है और आपको एक बाइट की लागत है।
शैगी

2

भूसी , 10 बाइट्स

M#eI¬¤z>Ö>

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

रोल की दो अलग-अलग सूचियों के रूप में इनपुट, सेशन में आउटपुट।

व्याख्या

¤z>Ö> प्रत्येक सूची को अवरोही क्रम में क्रमबद्ध करें और फिर उन्हें संबंधित तत्वों (और लंबी सूची को छोटा) की तुलना करते हुए ज़िप करें।

M#eI¬एक 2-तत्व सूची (बनाता है e) में गिना जाता है के साथ ( #truthy मूल्यों (पहचान के माध्यम से की) I(तार्किक निषेध के माध्यम से) और falsy मान ¬)


1

पर्ल 5 , 66 + 1 (-ए) = 67 बाइट्स

@A=sort split/ /,<>;$b+=@A?pop@A>$_?-1:1:0for reverse sort@F;say$b

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

इनपुट:

दो लाइनें। पहली पंक्ति डिफेंडर (खिलाड़ी 1) है, दूसरी हमलावर (खिलाड़ी 2) है। रिक्त स्थान द्वारा अलग-अलग रोल।

आउटपुट:

डिफेंडर की ताकत बनाम हमलावर में प्रभावी बदलाव का संकेत देता है।

Output Attacker Defender
   2      0        2        Defender wins both
   1      0        1        Defender wins the only roll
   0      1        1        Attacker wins first, defender wins second
  -1      1        0        Attacker wins the only roll
  -2      2        0        Attacker wins both rolls

"प्रोग्राम या फ़ंक्शन को 5 आउटपुट संभावनाओं में से प्रत्येक के लिए एक अद्वितीय पहचानकर्ता का उत्पादन करना चाहिए।" तुम्हारा [1,1] के लिए दो आउटपुट हैं। कृपया इसे ठीक करने के लिए अपने उत्तर को संपादित करें (बस क्रमबद्ध या योग करें)
fireflame241

छह का क्या कसूर है? यह अधिक विशिष्ट है। :) मैंने इसे 6 बाइट्स की कीमत पर बदला।
Xcali

0

जेली , 30 बाइट्स

0,0‘⁸Ṁ€</¤¦‘⁸ḟ"Ṁ€⁺</¤¦⁸L€Ṃ>1¤¡

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

Veeeeeeeery असंगठित! > _ <

आउटपुट बिल्कुल वैसा ही होता है जैसा परीक्षण मामलों में होता है।


वाह, यह मेरे लिए बहुत लंबा रास्ता लगता है: P
श्री Xcoder

0

आर , 46 बाइट्स

function(x,y)s(s(y,T)[1:2]>s(x,T)[1:2])
s=sort

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

यह सब तीन तरह से होता है और एक तुलना ... प्लस बीच में पहले दो तत्वों को निकालता है।

इनपुट पासा रोल के दो वैक्टर हैं।

आउटपुट इनकोडिंग निम्नानुसार है:

╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 10TRUE01FALSE20TRUE  TRUE11FALSE TRUE02FALSE FALSE
╚═══╩═══╝

काम करता है क्योंकि आर में निष्कर्षण इसके तर्क को रीसायकल नहीं करता है, लेकिन परिणाम NAको अनुरोधित लंबाई तक प्राप्त करने के लिए पैड करता है ।

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