สะสมคะแนนความสามารถของตัวละคร D & D ของฉัน


18

ในคุกใต้ดินและมังกรคุณสมบัติที่สำคัญที่สุดของตัวละครคือคะแนนความสามารถ มี 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

ขอบคุณ @ Sp3000 สำหรับการตีกอล์ฟ 1 ไบต์

ลองใช้ออนไลน์ในล่าม 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

Python 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

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


ฉันได้ยินเปิดฉากจะได้รับอิจฉา ...
อเล็กซ์เอ

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

ค่อนข้าง ungolfed:

#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.