ডি অ্যান্ড ডি পয়েন্ট কেনার ব্যয়


20

একটি ডানজিওনস এবং ড্রাগন চরিত্র তৈরি করার সময়, ঘূর্ণায়মান দক্ষতার স্কোরগুলির বিকল্প হ'ল পয়েন্ট বাই নামক একটি পাওয়ার বাজেটের মধ্যে তাদের নিয়োগ করা। উচ্চতর দক্ষতার স্কোরগুলির জন্য আরও বেশি পয়েন্ট ব্যয় হয়, বিশেষত উপরের প্রান্তের দিকে: 8 এর স্কোরটি নিখরচায় থাকে এবং 1 বা 1 ব্যয় করে স্কোর বাড়াতে ব্যয় হয়, 15 বা 16 খরচ 2 পয়েন্ট এবং 17 বা 18 এর দাম 3 পয়েন্ট বাড়ানো ব্যতীত।

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

পয়েন্ট কিনতে ব্যয়টি ছয়টি সক্ষমতার স্কোরের জন্য সংযুক্ত করা হয়।

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

ছয়টি দক্ষতার স্কোর দেওয়া হয়েছে, প্রতি 8 থেকে 18 এর মধ্যে মোট পয়েন্ট কেনার ব্যয় আউটপুট। সবচেয়ে কম বাইট জেতা


2
Itএইচএম এটি কি আমি বা প্রদত্ত চালানটি অনুপস্থিত? 0o
জায়েবিস

1
@ জাইবিস আপনার অর্থ কী তা নিশ্চিত নয়। আমি "অল্পতম বাইট জিতেছে" রেখেছি - আপনি কি তা বোঝাতে চেয়েছিলেন?
xnor

tmp ব্লাহ বলার জন্য: হ্যাঁ
জায়েবিস

উত্তর:


11

জাভাস্ক্রিপ্ট (ES7), 44 42 40 বাইট

ক্রস করা হয়েছে 44 এখনও নিয়মিত 44 :(

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

2 বাইট সংরক্ষণের জন্য @ অ্যাপসিলারদের ধন্যবাদ !

ব্যাখ্যা

মজার অংশটি হ'ল -1-~((s-14)**1.3)(s-14)**1.3উত্পাদন করে 1, 2, 4এবং 6মানের জন্য 15 - 18। কম সংখ্যক যে কোনও সংখ্যা 15ত্রুটি সৃষ্টি করে কারণ জাফাস্ক্রিপ্টের কার্যকর জাভাস্ক্রিপ্ট প্রয়োগ কার্যকর করতে পারে না ভগ্নাংশের সাথে negativeণাত্মক মানগুলিতে। মূলত, এর জন্য কোনও মান 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। (যদি সমস্যাটি ইনপুট হিসাবে একক-উপাদান অ্যারে অনুমতি দেয় তবে এটিতে সমস্যা হবে would)
অ্যাপসিলাররা

@ অ্যাপসিলার ওহ, এটি একটি দুর্দান্ত টিপ! ধন্যবাদ
ব্যবহারকারী 81655

8

সিজেম, 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

পাইথ, 14 বাইট

s>#0-M*Q+14yB8

পরীক্ষা স্যুট

এটি গণনার একই মৌলিক উপায়গুলি মার্টিন বাটনার হিসাবে ব্যবহার করে, যথা:

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

বলা হচ্ছে, গণনার মাধ্যম খুব আলাদা। বিয়োগের জন্য সংখ্যার তালিকা তৈরি করতে আমি প্রকাশটি ব্যবহার করি +14yB8yB8অর্থ "ফাংশন y তে দ্বিখণ্ডিত 8"। y সংখ্যা দ্বিগুণ হয়, সুতরাং এটি দেয় [8, 16]। তারপরে, আমরা 14 দিয়ে যোগ করব, তালিকাটি দিচ্ছি [14, 8, 16]

এরপরে, আমরা কার্টেসিয়ান পণ্যটি ইনপুট দিয়ে নিই এবং প্রতিটি জোড়া মানকে বিয়োগ করি।

এরপরে, সর্বাধিক ক্রিয়াকলাপটি সম্পাদন করুন, আমরা কেবলমাত্র ইতিবাচক মানগুলির জন্য ফিল্টার করি এবং বাকী অংশটি যোগ করি।


4

সামু , 19 বাইট

আমার নতুন ভাষার শেষ প্রতিশ্রুতি পরে প্রশ্ন পোস্ট করা হয়েছে কিনা তা নিশ্চিত নয় । তারা দু'ঘণ্টা আগে। তবে এখানে ব্যবহৃত সমস্ত বৈশিষ্ট্যগুলি তার আগে যুক্ত করা হয়েছিল।

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

সামাউ সিপি 737 এর ডিফল্ট অক্ষর এনকোডিং হিসাবে ব্যবহার করে।

▐[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

পাওয়ারশেল, 48 বাইট

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

(খুব নিশ্চিত যে এটি সর্বোত্তম নয়))

ইনপুট কমান্ড-লাইন আর্গুমেন্ট নেয় এবং এগুলিকে একটি লুপে পাইপ দেয় |%{...}। প্রতিটি পুনরাবৃত্তি, আমরা আমাদের $t+=বর্তমান সংখ্যা বিয়োগ 8 এর $_-8সাথে আরও ব্যয়বহুল মানগুলির জন্য একটি হ্যাশটেবলে সূচকের ফলাফলের সাথে বাড়িয়ে তুলি @{...}[$_]। তারপরে আমরা $tশেষে শেষে আউটপুট ।


0

(🐂👍) অক্স ++, 248 বাইট (62 টি অক্ষর)

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

ভাষা আমি কাজ করছি। কোডটিতে এখানে আটকান ।


আমার ব্রাউজারটি এর মধ্যে কেবল 7 টি অক্ষর প্রদর্শন করতে পারে।
ইসাকাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.