내 D & D 캐릭터의 능력 점수를 구르십시오


18

던전과 드래곤에서 캐릭터의 가장 중요한 속성 중 일부는 능력 점수입니다. 6 가지 능력에 대해 6 가지 능력 점수가 있습니다. 능력은 힘, 손재주, 헌법, 지능, 지혜 및 카리스마입니다.

캐릭터의 점수를 결정할 때 다음 절차를 사용합니다. 4d6 롤, 순서에 상관없이 가장 낮은 값을 떨어 뜨립니다. 이것이 의미하는 것은 4 면체 주사위 4 개를 굴리고 가장 낮은 결과를 무시하고 다른 3 개를 합산한다는 것입니다. 이것은 6 번 수행됩니다. 결과 숫자는 내가 원하는 방식으로 능력에 할당됩니다.

능력에 점수를 할당하는 데 사용하는 시스템은 내 캐릭터의 클래스에 따라 내 캐릭터의 가장 중요한 기술에 가장 높은 점수를 할당하고, 모든 사람이 헌법을 요구하기 때문에 헌법에 두 번째로 높은 점수를 할당하고, 다른 4 개의 점수를 임의로 할당하는 것입니다.

다음은 다양한 수업에서 가장 중요한 기술에 대한 표입니다.

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]for) 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

J, 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


프롤로그가 질투하는 걸 들었습니다 ...
Alex A.

@AlexA. 우리는 방금 쉬고 있는데, 그 동안 다른 것을 시도해 볼 수 있습니다 ...
Fatalize

0

C ++-387 바이트

첫 번째 시도, 특히 어떤 클래스가 사용되고 있는지 결정하는 데 더 많은 골프가 필요합니다.

골프 :

#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();
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.