D & D 포인트 구매 비용


20

던전 앤 드래곤 캐릭터를 만들 때 , 롤링 능력 점수 의 대안 은 포인트 구매라는 파워 예산 내에서 할당하는 것입니다. 능력 점수가 높을수록, 특히 상단을 향하여 더 많은 점수가 부과됩니다. 점수 8은 무료이며, 15 또는 16 비용 2 포인트로 올리거나 17 또는 18 비용 3 포인트로 올리는 것을 제외하고는 1 비용 1 포인트 올립니다.

+-------+------+
| Score | Cost |
+-------+------+
|     8 |    0 |
|     9 |    1 |
|    10 |    2 |
|    11 |    3 |
|    12 |    4 |
|    13 |    5 |
|    14 |    6 |
|    15 |    8 |
|    16 |   10 |
|    17 |   13 |
|    18 |   16 |
+-------+------+

목록 형태로 :

[(8, 0), (9, 1), (10, 2), (11, 3), (12, 4), (13, 5), (14, 6), (15, 8), (16, 10), (17, 13), (18, 16)]

포인트 구매 비용은 6 가지 능력 점수 모두에 합산됩니다.

Ability scores: 16   17   8  13   8  12
Point buy cost: 10 + 13 + 0 + 5 + 0 + 4  = 32

8에서 18까지 6 개의 능력 점수가 주어지면 총 포인트 구매 비용이 산출됩니다. 가장 적은 바이트가 이깁니다.


2
Ähm 그것은 단지 나입니까? 0o
Zaibis

1
@Zaibis 무슨 뜻인지 잘 모르겠습니다. 나는 "최소 바이트 승리"를 넣었습니다.
xnor

tmp blah blah
toh

답변:


11

자바 스크립트 (ES7), 44 42 40 바이트

44를 넘어서도 여전히 규칙적인 44입니다 :(

a=>a.map(s=>t+=s-9-~((s-14)**1.3),t=0)|t

@apsillers 덕분에2 바이트를 절약 한 에 합니다!

설명

흥미로운 부분은 -1-~((s-14)**1.3)입니다. (s-14)**1.3생산 1, 2, 46값에 대한 15 - 18. 15지수의 JavaScript 구현이 소수 지수로 음수 값에서 작동 할 수 없으므로 숫자보다 작은 숫자 는 오류를 발생시킵니다. 기본적으로 모든 값은 s < 15을 반환 NaN하므로 -1-~숫자 ( 0) 로 캐스팅됩니다 .

a=>                       // a = input scores as an array of numbers
  a.map(s=>               // for each passed score
    t+=                   // add to the total
      s-9                 // point value = s - 8 (-1 used for next line)
      -~((s-14)**1.3),    // add extra points for scores 15 - 18
    t=0                   // t = total points (this happens BEFORE the map call)
  )
  |t                      // return the total points

ES6 솔루션 (42 바이트)

a=>a.map(s=>t+=s-9-~[1,2,4,6][s-15],t=0)|t

테스트

이 테스트에서는 Math.pow지수 연산자 ( **)를 사용하여 표준 브라우저에서 실행할 수 있습니다.


하나 더 바이트 : |t대신 사용하십시오 &&t. 인 ECMAScript 동작은ToInt32 항상 결과 강요합니다 map여기에을 0다중 요소의 배열이 항상 있기 때문에, ToNumber에 -ify NaN. (사양에서 단일 요소 배열을 입력으로 허용했지만 6 개의 요소가 필요한 경우 문제가됩니다.)
apsillers

@apsillers Ooh, 좋은 팁입니다! 감사합니다
user81655

8

CJam, 18 바이트

l~[8EG]ff-:~0fe>:+

또는

l~[8EG]m*::m0fe>:+

여기에서 테스트하십시오.

설명

아이디어는 포인트 비용을 세 가지 구성 요소로 분해합니다.

 Score: 8  9 10 11 12 13 14 15 16 17 18
        0  1  2  3  4  5  6  7  8  9 10
        0  0  0  0  0  0  0  1  2  3  4
        0  0  0  0  0  0  0  0  0  1  2
       --------------------------------
 Cost:  0  1  2  3  4  5  6  8 10 13 16

세 가지 성분 모두 단일 빼기를 통해 계산할 수 있으며 결과를 음이 아닌 값으로 제한 할 수 있습니다.

l~    e# Read and evaluate input.
[8EG] e# Push [8 14 16].
ff-   e# For each pair from the two lists, subtract one from the other. 
:~    e# Flatten the result.
0fe>  e# Clamp each difference to non-negative values.
:+    e# Sum them all up.

8

Pyth, 14 바이트

s>#0-M*Q+14yB8

테스트 스위트

이것은 Martin Büttner와 동일한 기본 계산 방법을 사용합니다.

max(n-8, 0) + max(n-14, 0) + max(n-16, 0)

말하자면, 계산 방법은 매우 다릅니다. 빼는 숫자 목록을 생성하려면 표현식을 사용합니다 +14yB8. yB8"함수 y에서 8을 분기"를 의미합니다. y는 숫자를 두 배로하여을 제공합니다 [8, 16]. 그런 다음 14를 추가하여 목록을 제공합니다 [14, 8, 16].

다음으로, 입력 값이있는 카티 전 곱을 취하고 모든 값 쌍을 뺍니다.

다음으로 최대화 작업을 수행하고 양수 값만 필터링하고 나머지를 합산합니다.


4

사마 우 , 19 바이트

새 언어를 마지막으로 커밋 한 후에 질문이 게시되었는지 확실하지 않습니다 . 둘 다 2 시간 전입니다. 그러나 여기에 사용 된 모든 기능이 그 전에 추가되었습니다.

▐[8 14 16]`-o;0>*ΣΣ

SamauCP737 을 기본 문자 인코딩으로 사용합니다.

▐[8 14 16]`-o;0>*ΣΣ
▐                      read a list of numbers
 [8 14 16]             push [8 14 16]
          `-           push the function [-]
            o          outer product
             ;         duplicate
              0>       for each element, test if it's larger than 0
                *      times
                 ΣΣ    take the sum twice because it's a 2d array

0

PowerShell, 48 바이트

$args|%{$t+=$_-8+@{15=1;16=2;17=4;18=10}[$_]};$t

(이것이 최적이 아닌 것을 확실히하십시오.)

입력 명령 행 인수를 가져 와서 루프로 파이프합니다 |%{...}. 반복 할 때마다 $t+=현재 수에서 8을 $_-8더한 값과 더 비싼 값을 위해 해시 테이블로 색인화 한 결과로 총계 를 증가시킵니다 @{...}[$_]. 그런 다음 $t마지막에 출력 합니다.


0

(🐂👍) Ox ++, 248 바이트 (62 자)

🐀👉🌑👺🐁👉🌑👺😂🐀🐟🌗😂🐂👉😷😺😺😷👺🐁👉🐁👏🐂🙌🌙👏🌜🐂🐳🌒🌕🌛👥🌜🐂🙌🌒🌕🌛👏🌜🐂🐳🌒🌗🌛👥🌜🐂🙌🌒🌗🌛👺🐀👍😂👄🐁👄

내가 일하고있는 언어. 여기 에 코드를 붙여 넣습니다 .


내 브라우저는이 문자 중 7 개만 표시 할 수 있습니다.
isaacg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.