Điểm số khả năng của nhân vật D & D của tôi


18

Trong Dungeons và Dragons, một số thuộc tính quan trọng nhất của nhân vật là điểm số khả năng. Có 6 điểm khả năng, cho sáu khả năng. Các khả năng là Sức mạnh, Khéo léo, Hiến pháp, Trí thông minh, Trí tuệ và Thần thái.

Khi xác định điểm cho một nhân vật, tôi sử dụng quy trình sau: Cuộn 4d6, giảm thấp nhất, theo bất kỳ thứ tự nào. Điều này có nghĩa là tôi tung 4 con xúc xắc sáu mặt, bỏ qua kết quả thấp nhất và tính tổng số còn lại 3. Điều này được thực hiện 6 lần. Các số kết quả được gán cho các khả năng theo bất kỳ cách nào tôi muốn.

Hệ thống tôi sử dụng để gán điểm cho các khả năng là gán điểm cao nhất cho kỹ năng quan trọng nhất của nhân vật, tùy thuộc vào lớp nhân vật của tôi, gán điểm cao thứ hai cho Hiến pháp, vì mọi người đều cần Hiến pháp và gán bốn điểm khác tùy ý.

Đây là bảng các kỹ năng quan trọng nhất cho các lớp khác nhau:

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

Thách thức: Tôi sẽ cung cấp cho bạn (dưới dạng đầu vào) chữ cái đầu tiên của lớp nhân vật của tôi (viết hoa). Tôi muốn bạn cuộn điểm số khả năng và gán chúng cho các khả năng như được mô tả ở trên, và sau đó xuất chúng theo thứ tự Sức mạnh, Khéo léo, Hiến pháp, Trí thông minh, Trí tuệ, Thần thái.

Thí dụ:

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.

Đầu ra có thể được đưa ra ở bất kỳ định dạng nào trong đó các số được phân tách rõ ràng và theo đúng thứ tự.

Mã ngắn nhất trong byte thắng. Sơ hở tiêu chuẩn bị cấm.

Câu trả lời:


6

CJam, 43 41 40 byte

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

Cảm ơn @ Sp3000 vì đã chơi golf 1 byte.

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

{             }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

Python 3, 137 byte

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)

Xuất ra một danh sách các số nguyên, ví dụ [14, 9, 13, 12, 12, 13]cho F.

Ánh xạ từ char đầu vào đến các bài tập hóa ra lại đẹp một cách đáng ngạc nhiên. Đầu tiên chúng tôi bắt đầu bằng cách Lchứa 4 cuộn thấp nhất, sau đó chúng tôi muốn chèn

  • Cuộn cao nhất vào đúng vị trí dựa trên đầu vào, sau đó
  • Cuộn cao thứ hai vào chỉ số 2, cho Hiến pháp.

Đối với mỗi đầu vào, các chỉ số chúng tôi muốn cho các cuộn cao nhất là:

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

Thật đáng ngạc nhiên, chúng ta chỉ cần "FRW BPS".find(input())điều này, bởi vì:

  • FRW làm việc như mong đợi, đưa ra các chỉ số tương ứng của họ,
  • CDMkhông có mặt vì vậy findcung cấp -1, cho danh sách 4 yếu tố là chỉ số 3 và
  • BPS đưa ra 4, 5, 6 tương ứng, nhưng không thành vấn đề nếu chúng ta vượt quá vì chúng ta chỉ có thể nối thêm một phần tử vào cuối.

1

J, 100 97 byte

(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

Đưa đầu vào vào STDIN


Tôi nghe thấy Prolog đang ghen tị ...
Alex A.

@AlexA. Chúng tôi đang nghỉ ngơi, tôi có thể thử một cái gì đó khác trong khi đó ...
Fatalize 10/07/2015

0

C ++ - 387 byte

Lần thử đầu tiên ở đây, cần phải chơi gôn nhiều hơn, đặc biệt là trong việc xác định lớp nào đang được sử dụng.

Chơi gôn

#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]));}

Khá vô văn hóa:

#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();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.