मेरे डी एंड डी चरित्र की क्षमता स्कोर को रोल करें


18

Dungeons और Dragons में, एक चरित्र के सबसे महत्वपूर्ण गुणों में से कुछ क्षमता स्कोर हैं। छह क्षमताओं के लिए, 6 क्षमता स्कोर हैं। क्षमताएं ताकत, निपुणता, संविधान, बुद्धिमत्ता, बुद्धि और करिश्मा हैं।

एक चरित्र के लिए स्कोर निर्धारित करते समय, मैं निम्नलिखित प्रक्रिया का उपयोग करता हूं: 4d6 को रोल करें, किसी भी क्रम में सबसे कम छोड़ें। इसका मतलब यह है कि मैं 4 छह पक्षीय पासा रोल करता हूं, सबसे कम परिणाम को नजरअंदाज करता हूं, और अन्य 3 को योग करता हूं। यह 6 बार किया जाता है। परिणामी संख्याएं किसी भी तरह से क्षमताओं को निर्दिष्ट की जाती हैं, कृपया।

जिस प्रणाली का उपयोग मैं स्कोर को क्षमताओं के लिए करने के लिए करता हूं, वह मेरे चरित्र के सबसे महत्वपूर्ण कौशल को उच्चतम स्कोर प्रदान करना है, जो मेरे चरित्र की कक्षा पर निर्भर करता है, संविधान के लिए दूसरा उच्चतम स्कोर असाइन करें, क्योंकि सभी को संविधान की आवश्यकता होती है, और अन्य चार अंकों को मनमाने ढंग से असाइन करें।

यहाँ विभिन्न वर्गों के लिए सबसे महत्वपूर्ण कौशल की एक तालिका है:

Bard - Charisma
Cleric - Wisdom
Druid - Wisdom
Fighter - Stregth
Monk - Wisdom
Paladin - Charisma
Rogue - Dexterity
Sorcerer - Charisma
Wizard - Intelligence

चुनौती: मैं आपको (मेरे इनपुट के रूप में) मेरे चरित्र की कक्षा का पहला अक्षर (अपरकेस में) दूंगा। मैं चाहूंगा कि आप क्षमताओं के अंकों को रोल करें और उन्हें ऊपर बताई गई क्षमताओं के अनुसार असाइन करें, और फिर उन्हें ऑर्डर स्ट्रेंथ, निपुणता, संविधान, इंटेलिजेंस, विजडम, करिश्मा में आउटपुट करें।

उदाहरण:

Input: R
Rolls: 4316 3455 3633 5443 2341 6122
Scores: 13 14 12 13 9 10
Ordering: Highest goes to dexterity. Second goes to Constitution.
Output: 13 14 13 12 9 10
or
Output: 9 14 13 10 12 13
or etc.

आउटपुट किसी भी प्रारूप में दिए जा सकते हैं जहाँ संख्याएँ स्पष्ट रूप से अलग और उचित क्रम में हों।

बाइट्स में सबसे छोटा कोड जीतता है। मानक खामियों पर रोक लगाई।

जवाबों:


6

CJam, 43 41 40 बाइट्स

{6a4*:mr$0Zt:+}6*]$2m<"FRXWCDM"r#4e<3e\p

1 बाइट को बंद करने के लिए @ Sp3000 को धन्यवाद।

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

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

{             }6*                       e# Repeat 6 times:
 6a4*                                   e#   Push [6 6 6 6].
     :mr                                e#   Replace each six with a pseudo-randomly
                                        e#   generated integer in [0 ... 5].
        $                               e#   Sort the results.
         0Zt                            e#   Replace the lowest result by 3.
            :+                          e#   Add all four integers
                ]                       e# Wrap the 6 generated integers in an array.
                 $                      e# Sort.
                  2m<                   e# Rotate 2 units to the left to assign the
                                        e# second highest result to Constitution.
                     "FRXWCDM"          e# Push that string.
                              r#        e# Find the index of the input.
                                        e# The string doesn't contain B, P or S, so
                                        e# those push -1.
                                4e<     e# Truncate the index at 4. This way, C, D
                                        e# M all push 4.
                                   3e\  e# Swap the integer at that index with the
                                        e# one at index 3, i.e., the highest one.
                                      p e# Print.

6

पायथन 3, 137 बाइट्स

from random import*
S=sorted
*L,c,h=S(3+sum(S(map(randrange,[6]*4))[1:])for _ in[0]*6)
L[:"FRW BPS".find(input())]+=h,
L[:2]+=c,
print(L)

पूर्णांक की सूची को आउटपुट करता है, उदाहरण के [14, 9, 13, 12, 12, 13]लिए F

इनपुट चार से असाइनमेंट के लिए मानचित्रण आश्चर्यजनक रूप से अच्छा निकला। पहले हम Lसबसे कम 4 रोल होते हैं, जिसके बाद हम सम्मिलित करना चाहते हैं

  • इनपुट के आधार पर सही स्थिति में उच्चतम रोल, फिर
  • संविधान के लिए इंडेक्स 2 में दूसरा सबसे बड़ा रोल।

प्रत्येक इनपुट के लिए, उच्चतम रोल के लिए हम जो सूचकांक चाहते हैं, वे हैं:

Index    Ability          Input(s)
----------------------------------
0        Strength         F
1        Dexterity        R
2        Intelligence     W
3        Wisdom           CDM
4        Charisma         BPS

आश्चर्यजनक रूप से, हमें केवल इसके लिए आवश्यकता "FRW BPS".find(input())है, क्योंकि:

  • FRW उम्मीद के मुताबिक काम करते हैं, अपने संबंधित सूचकांक देते हैं,
  • CDMमौजूद नहीं हैं इसलिए findदेता है -1, जो 4-तत्व सूची के लिए सूचकांक 3 है, और
  • BPS क्रमशः 4, 5, 6 दें, लेकिन इससे कोई फर्क नहीं पड़ता कि हम ओवरशूट करते हैं क्योंकि हम अंत में एक तत्व को जोड़ सकते हैं।

1

जे, 100 97 बाइट्स

(0;0,b)C.^:(b>0)(0;1 2)C.\:~+/"1]1}."1/:~"1]1+?6 4$4$6[b=.('BCDFMPRSW'i.1!:1[1){5 4 4 0 4 5 1 5 3

में इनपुट लेता है STDIN


मैंने सुना है प्रोलॉग को जलन हो रही है ...
एलेक्स ए।

@AlexA। हम सिर्फ एक ब्रेक ले रहे हैं, मैं इस बीच कुछ और कोशिश कर सकता हूं ...
घातक

0

सी ++ - 387 बाइट्स

यहां पहला प्रयास, अधिक गोल्फिंग की आवश्यकता है, विशेष रूप से यह निर्धारित करने में कि किस वर्ग का उपयोग किया जा रहा है।

golfed:

#include<cstdlib>
#include<cstdio>
#include<time.h>
int main(int c,char**v){char*o=*v,l=*v[1];int b=-1,s=-1,i=6,x=0,q=l>=67&&l<=68||l==77?4:l==70?0:l==87?3:l==82?1:5;srand(time(0));for(;i-->0;){int w=9,d=4,u=3,t;for(;d-->0;){t=rand()%6;if(t<w){u+=w<9?w:0;w=t;}else u+=t;}if(u>s){c=s;s=u;u=c;}if(s>b){c=s;s=b;b=c;}if(u>=0)o[x++]=u;}for(i=0;i<6;i++)printf("%d ",i==2?s:(i==q?b:o[--x]));}

बल्कि अपढ़:

#include<cstdlib>
#include<cstdio>
#include<time.h>
int main(int c,char**v)
{
    //name of program must be at least 4 chars
    char*others=*v,clas=*v[1];
    int desired = clas>=67&&clas<=68||clas==77?4:clas==70?0:clas==87?3:clas==82?1:5; //TODO:

    srand(time(0));
    int best=-1,second=-1,i=6,otherIndex=0;
    for(;i-->0;)
    {
        int lowest=9,diecount=4,sum=3;
        for(;diecount-->0;)
        {
            int loc=rand()%6;
            if (loc<lowest)
            {
                sum+=lowest<9?lowest:0;
                lowest=loc;
            }
            else
            {
                sum+=loc;
            }
        }
        if(sum>second)
        {
            c=second;second=sum;sum=c;
        }
        if(second>best)
        {
            c=second;second=best;best=c;
        }
        if(sum>=0)
        {
            others[otherIndex++]=sum;
        }
    }

    for(i=0;i<6;i++)
    {
        printf("%d ",i==2?second:(i==desired?best:others[--otherIndex]));
    }

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