ডি অ্যান্ড ডি দক্ষতা চ্যালেঞ্জগুলি


14

ইন dungeons & ড্রাগন , প্রায় সবকিছু একটি ডাই ঘূর্ণায়মান দ্বারা নির্ধারিত হয়। সাধারণত, যদি রোল নির্দিষ্ট মানের চেয়ে বড় বা তার সমান হয় তবে আপনি যা করতে চান তা করার চেষ্টা আপনার সাফল্য পেয়েছে এবং অন্যথায় ব্যর্থ হয়। বেশিরভাগ ক্ষেত্রে, 20-পক্ষীয় ডাই (ওরফে ডি 20) রোল করতে ব্যবহৃত হয়।

অন্যান্য সময়, দক্ষতা চ্যালেঞ্জ সিস্টেম ব্যবহার করা হয়। এটি উপরে বর্ণিত সাধারণ ব্যবস্থার মতোই, তবে প্লেয়ার (গুলি) কোনও নির্দিষ্ট সময় ব্যর্থ হওয়ার আগে নির্দিষ্ট সংখ্যক বার রোল করে কিনা তা দ্বারা সাফল্য নির্ধারিত হয়। উদাহরণস্বরূপ, প্লেয়ার (গুলি) সীমিত সংখ্যক লকপিকস সহ একটি দরজায় একাধিক লক বাছতে চেষ্টা করছে। স্বতন্ত্র সফল রোলগুলি সফলভাবে একটি তালা বাছাই করে এবং স্বতন্ত্র ব্যর্থ রোলগুলি একটি লকপিক ভাঙ্গার প্রতিনিধিত্ব করে। সামগ্রিক সাফল্যের অর্থ সমস্ত লকপিকস ভাঙ্গার আগে সফলভাবে সমস্ত লক বাছাই করা হবে।

তদুপরি, নির্দিষ্ট রোলগুলি সমালোচনামূলক রোল হতে পারে। ডি -20 এ, 1 রোল করা একটি জটিল ব্যর্থতা, এর ফলে অবিলম্বে পুরো চ্যালেঞ্জ ব্যর্থ হয়ে যায় (উপরের উদাহরণস্বরূপ, প্লেয়ার (গুলি) দুর্ঘটনাক্রমে কোনও প্রহরীকে সতর্ক করতে পারে)। একটি 20 রোলিং একটি গুরুত্বপূর্ণ সাফল্য, সঙ্গে সঙ্গে পুরো চ্যালেঞ্জটি অবিলম্বে সফল হয় (উপরের উদাহরণস্বরূপ, প্লেয়ার (গুলি) লকগুলির জন্য একটি কী খুঁজে পেতে পারে এবং সেগুলি বেছে নেওয়ার প্রয়োজনীয়তা সরিয়ে ফেলতে পারে)। একটি সমালোচনামূলক রোলের ক্ষেত্রে, চ্যালেঞ্জটি অবিলম্বে শেষ হয়ে গেছে এবং পূর্ববর্তী সাফল্য এবং ব্যর্থতা নির্বিশেষে ফলাফলটি সিদ্ধান্ত নিয়েছে।

এই চ্যালেঞ্জে আপনাকে একটি অসুবিধা, প্রয়োজনীয় সাফল্যের সংখ্যা এবং চ্যালেঞ্জ ব্যর্থ হয়েছে এমন ব্যর্থতার সংখ্যা আপনাকে দেওয়া হবে। আপনাকে অবশ্যই একজন খেলোয়াড়কে চ্যালেঞ্জটি ব্যবহার করে অনুকরণ করতে হবে এবং ফলাফলটি আউটপুট করতে হবে।

ইনপুট

3 পূর্ণসংখ্যা, একটি পৃথক রোলে সাফল্যের জন্য যে মানটি পূরণ করতে হবে বা অতিক্রম করতে হবে তা উপস্থাপন করে, চ্যালেঞ্জে সফল হওয়ার জন্য প্রয়োজনীয় সাফল্যের সংখ্যা এবং চ্যালেঞ্জটি ব্যর্থ হয়েছে এমন ব্যর্থতার সংখ্যা। আপনি কোন অর্ডারটি ব্যবহার করবেন তা নির্দিষ্ট করে যতক্ষণ ইনপুটগুলির অর্ডার এবং ফর্ম্যাটটি বিবেচনা করে না। অসুবিধাটি 1 এবং 20 এর মধ্যে থাকবে, সমেত এবং সাফল্য এবং ব্যর্থতার সংখ্যা উভয়ই 1 এবং 100 এর মধ্যে থাকবে।

আউটপুট

প্রতিটি ডি -20 রোলের ফলাফল (পূর্ণসংখ্যার ক্রম অনুযায়ী) এবং চ্যালেঞ্জের সামগ্রিক ফলাফল (সত্য / মিথ্যা মান) value বিন্যাসটি গুরুত্বপূর্ণ নয়, যতক্ষণ না পৃথক ফলাফলগুলি যথাযথ থাকে, সামগ্রিক ফলাফল হয় পৃথক রোলগুলির আগে বা পরে আসে (উদাহরণস্বরূপ, আপনি রোলগুলির মাঝখানে সামগ্রিক ফলাফল আউটপুট করতে পারবেন না), এবং আপনি কোন আউটপুট ফর্ম্যাটটি ব্যবহার করেন এবং এটি ধারাবাহিকভাবে ব্যবহার করেন তা নির্দিষ্ট করে।

উদাহরণ (প্রথম বন্ধনীগুলির মানগুলি ব্যাখ্যার জন্য এবং এগুলি অন্তর্ভুক্ত করার দরকার নেই):

ইনপুট:

12 5 3 (difficulty successes failures)

আউটপুট:

15 (success, 1-0)
10 (failure, 1-1)
5  (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)

ইনপুট:

15 2 3 (difficulty failures successes)

আউটপুট:

0  (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)

ইনপুট:

5 5 10 (successes failures difficulty)

আউটপুট:

11 (success, 1-0)
5  (failure, 1-1)
20 (critical success)
1  (overall success)

ইনপুট:

3 10 3 (failures difficulty successes)

আউটপুট:

12 (success, 1-0)
11 (success, 2-0)
1  (critical failure)
False (overall failure)

বিধি

  • এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড
  • প্রতিটি রোলের জন্য আপনাকে অবশ্যই এলোমেলোভাবে 1 এবং 20 (সমেত) এর মধ্যে একটি পূর্ণসংখ্যা মান চয়ন করতে হবে। প্রতিটি মানের বাছাই হওয়ার সমান সম্ভাবনা থাকা উচিত (বা যতটা সম্ভব সমান কাছাকাছি)।

@ ব্র্যাডগিলবার্টব 2 গিলস the number of successes and failures will both be between 1 and 100, inclusive.তাই, হ্যাঁ, একক ব্যর্থতার ফলে পুরো চ্যালেঞ্জ ব্যর্থ হওয়ার সম্ভাবনা রয়েছে।
মেগো

আমার কি ধরে নেওয়া উচিত যে সামগ্রিক সাফল্যের প্রতিনিধিত্বকারী সত্য মূল্য সর্বদা একই সত্য মান হতে হবে? বা এটি কি কেবলমাত্র ব্যর্থতার সংখ্যা বাকি থাকতে পারে?
ব্র্যাড গিলবার্ট ডিসি

@ ব্র্যাডগিলবার্টবিজিগিলস এটি একই সত্য মূল্য হতে হবে না; আমি আমার পাইথন উত্তরে থাকা ব্যর্থতার সংখ্যাটি ব্যবহার করি ।
মেগো

এহ, আমি সম্ভবত এটি একটি বুল ফিরিয়ে দেওয়া হিসাবে ছেড়ে যাচ্ছি, কারণ এটি কেবল একটি বাইট, এবং এটি আউটপুটটির পঠনযোগ্যতা উন্নত করতে সহায়তা করে।
ব্র্যাড গিলবার্ট ডিসি

@ ব্র্যাডগিলবার্টব ২ গিলস পঠনযোগ্যতা স্কোরের চেয়ে অনেক কম গুরুত্বপূর্ণ।
মেগো

উত্তর:


3

জাভাস্ক্রিপ্ট, 83 78 76 75 বাইট

F=(d,f,s)=>!s||f&&(r=~(Math.random()*20))+""+F(d,~r&&f-(k=d>-r),r+20&&s-!k)

এই কোডটি পুনরাবৃত্তভাবে সাফল্য এবং ব্যর্থতাগুলি ঘটায় তা গণনা করে। যখন সাফল্য ( s) বা ব্যর্থতা ( f) হয় তা গণনা করা হয়0 , আমরা সঙ্গে শেষ trueমান !sযখন sহয় 0অথবা falsy মান fযখন fহয় 0

আউটপুট নিয়মিত-এক্সপ্রেশন ফর্ম হয় /^(-\d{1,2})+(0|true)$/ (বা আরও কঠোরভাবে /^(-[1-9]|-1[0-9]|-20)+(0|true)$/)। এটি হ'ল, ইনপুটটির একটি শীর্ষস্থানীয় হাইফেন রয়েছে, তারপরে হাইফেন দ্বারা বর্ণিত রোল মানগুলি এবং অবশেষে চূড়ান্ত ফলাফল ( 0বা true), যা চূড়ান্ত রোল থেকে বর্ণিত নয়। আউটপুট (হয় শেষ অক্ষর: যাইহোক, এই এখনও একটি দ্ব্যর্থহীন ব্যাকরণ কারণ utilmate ফলাফল এবং চূড়ান্ত রোল সবসময় আলাদা করা যেতে পারে 0বা e) করা হয় সবসময় ফলাফল ইঙ্গিতবহ, এবং একটি চূড়ান্ত0 সবসময় নম্বর থেকে আলাদাভাবে পড়া হয় (গুলি) চূড়ান্ত রোল এর।

এর জন্য নমুনা আউটপুট F(11,3,4):

-3-14-12-16-16true  // normal success
-2-12-20true        // critical success
-20true             // first-roll critical success
-18-2-8-14-18-90    // normal failure
-18-12-10           // critical failure
-10                 // first-roll critical failure
-4-16-4-100         // normal failure where last roll is a 10

ব্যাখ্যা:

এই কোডটি রোল করে কাজ করে নেতিবাচক ডি 20 (ডাব্লিটর) হিসাবে নেতিবাচক চিহ্নগুলি ব্যবহার করে কাজ করে।

F=(d,f,s)=>    // define function F(difficulty, fails, successes)

!s||   // if zero more successes needed, return true
f &&   // if zero more failures needed, return 0

    (r=~(Math.random()*20)  // add negative d20 to output, store in `r`
    +""+                    // string concatenation
    F(                      // recursive call to F with changed fail/success
       d,                   //   pass along d      
       ~r                   //   if r is -1, zero more fails needed
          &&f-              //   otherwise, reduce fails needed by
              (k=d>-r),     //   the boolean `d>-r` (and store in k)
       r+20                 //   if r is -20, zero more successes needed
           &&s-!k           //   otherwise, reduce successes needed by
                            //   the opposite of `k` (which indicates a fail)
      )
   ]

নম্বর-বিয়োগ-বুলিয়ান এক্সপ্রেশন কারণ কাজ trueএবং falseকাস্ট হয় 1এবং 0একটি সাংখ্যিক প্রেক্ষাপটে। এই ক্ষেত্রে, রোলটি যদি ব্যর্থতা হয় এবং এটি যদি সফল হয় d>-rwill10


4

পাইথন, 134 বাইট

বাইটস সংরক্ষণের জন্য Pietu1998 ধন্যবাদ

from random import*
def g(a,b,c):
 s,z=[],[c,b]
 while z[0]*z[1]:d=randint(1,20);z[a<d]-=[1,z[a<d]][d in[1,20]];s+=[d]
 return[z[0]]+s

খুব সহজ, সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে, তবে আমাদের এটিকে বন্ধ করার জন্য কিছু দরকার ছিল। এটি অনলাইনে চেষ্টা করুন


আপনি বাইট দুয়েক রক্ষা করতে পারে: থেকে আমদানি পরিবর্তন from random import*ও ছেড়ে দিন random., ব্যবহার randint(1,20)পরিবর্তে randrange(20)+1, প্রতিস্থাপন and সঙ্গে *। স্থান সংরক্ষণ করে আউটপুট শুরুর ক্ষেত্রে আপনাকে চূড়ান্ত ফলাফল দেওয়ার অনুমতি দেওয়া হয়।
পূর্কাকুডারী

3

পাইথন 2, 123 121 বাইট

from random import*
def f(a,b,c):
 while c*b:
    r=randint(1,20);print r;c-=r<a;b-=r>=a
    if r in[1,20]:return r>9
 return c

(এই উত্তরটি ফাঁকা স্থান এবং ট্যাবগুলিকে মিশ্রিত করে , তাই প্রথম ইন্ডেন্টেশন স্তরটি একটি একক স্থান, যখন দ্বিতীয়টি একক ট্যাব)

কাজ f নিম্নলিখিত যুক্তিগুলি গ্রহণ করে:

a, সাফল্য হিসাবে গণনা করার জন্য একটি পৃথক ডাই রোলের প্রান্তিকতা,

b, সামগ্রিক সাফল্যের জন্য প্রয়োজনীয় সাফল্যের সংখ্যা,

cসামগ্রিক ব্যর্থতার জন্য প্রয়োজনীয় ব্যর্থতার সংখ্যা।

প্রতিটি ডাই রোল bবা হয়c হ্রাস করা হয় (তবে উভয়ই নয়)। যতক্ষণ না উভয়ই ইতিবাচক, ততক্ষণ তা আবার পিছলে যায়, সমালোচনামূলক ব্যর্থতা বা সমালোচনামূলক সাফল্যের ক্ষেত্রে বাদে।

কোনও সমালোচক সাফল্য বা ব্যর্থতা ধরে না রেখে যখন লুপটি শেষ হয় bবা cশূন্য হবে তবে উভয়ই নয়। সেক্ষেত্রে ফাংশনটি কেবলমাত্র বর্তমান মানটি প্রদান করেc যা শূন্য (ফালসি) যদি আমরা আমাদের সমস্ত ব্যর্থতা অবসন্ন করি এবং যদি আমরা সফল হই তবে ইতিবাচক (সত্যবাদী) হয়।

বোনাস হিসাবে, আউটপুট আপনাকে জানায় যে আপনার কতগুলি ব্যর্থতা বাকি ছিল, যা পরে বলার জন্য আরও লক রয়েছে (বলুন) ভাল। (যদি এটি একটি জটিল ব্যর্থতা বা সাফল্যে অবসান না হয় তবে এক্ষেত্রে আউটপুটটি কোনও int এর পরিবর্তে বুলিয়ান হবে))


3

পিপ , 39 বাইট

কেউ বলেছিলেন যে তারা একটি গল্ফের ভাষায় সমাধান দেখতে চায়।

Wc&b{Pd:1+RR20d<a?--c--bc*:d>1b*:d<20}c

আমি নিশ্চিত যে এটি কোনও ভাষার বৈশিষ্ট্য প্রশ্নের চেয়ে নতুন ব্যবহার করে না। এই ক্রমে কমান্ড-লাইন আরগস হিসাবে ইনপুট নেয়: অসুবিধা, সাফল্য প্রয়োজন, ব্যর্থতা প্রয়োজন। সামগ্রিক সাফল্যের জন্য আউটপুট 0 বা সম্পূর্ণ ব্যর্থতার জন্য ননজারো। এটি অনলাইন চেষ্টা করুন!

কৌশলটি মোটামুটি সোজা যখন লুপ কৌশল, অন্য কৌশল থেকে নেওয়া দুটি কৌশল বা কৌশল নিয়ে। এখানে মন্তব্য, সাদা স্থান এবং কিছু অতিরিক্ত আউটপুট সহ একটি সংস্করণ রয়েছে:

; a,b,c are initialized to the cmdline args
; a = difficulty (roll >=a succeeds, roll <a fails)
; b = required successes to succeed the task
; c = required failures to fail the task
; d = single die roll

; Loop while c and b are both nonzero:
W c&b {
 ; d gets 1+randrange(20); output it
 O d:1+RR20
 ; If d<a, decrement req'd failures, else decrement req'd successes
 d<a ? --c --b
 ; Verbose output for the ungolfed version
 P " (" . (d=1|d=20 ? "critical " "") . (d<a ? "failure" "success") . ")"
 ; If d=1, req'd failures is * by 0 (becomes 0), else * by 1 (unchanged)
 c *: d>1
 ; If d=20, req'd successes is * by 0 (becomes 0), else * by 1 (unchanged)
 b *: d<20
}
; c, remaining failures, is the output: 0 if overall failure, nonzero if overall success
c . " (overall " . (c ? "success" "failure") . ")"

2

রুবি 2.2, 75 বাইট

f=->(v,s,f){p(r=rand(20)+1)<2?f=0:r>19?s=0:r<v ?f-=1:s-=1while s*f>0
p s<1}

বেসিক পুনরাবৃত্তি সমাধান। উদাহরণ রান:

f[12, 5, 3]

আউটপুট:

11
17
8
14
7
false

আপনি এটি এখানে আইডিয়োন চলমান দেখতে পাবেন ।


আমাকে 0 টি মিথ্যা বলে ল্যাংগুলিতে সত্যই alousর্ষা করে তোলে!
পল প্রেসিডেজ

1

ভিবিএ 180 বাইট

Sub P(d,s,f):k=1
Do While x<s And v<f:r=Int(20*Rnd()+1)
If r=20 Then x=s
If r=1 Then v=f
If r>=d Then: x=x+1: Else: v=v+1
Debug.Print r:Loop:If v>=f Then k=0
Debug.Print k:End Sub

উদাহরণ আউটপুট

P 12,5,3
 18 
 2 
 19 
 8 
 11 
 0 

আউটপুট শেষের ডিজিটটি একটি হতে হবে 0জন্য Falseবা একটি 1জন্য True। প্রতিটি রোল একটি নতুন লাইন দ্বারা পৃথক করা হয়। এটি আরএনজিতে নির্মিত ভিবিএ ব্যবহার করে rnd()যা এতটা এলোমেলো হওয়ার জন্য জানা , তবে এটি প্রয়োজনীয়তা যথাসম্ভব যথাযথভাবে পূরণ করতে হবে should

Sub P(d,s,f)
k=1
Do While x<s And v<f               'Keep Rolling while Current Successes and Failures are less then the Maximum Allowed
r=Int(20*Rnd()+1)                'Creates a Randomish Number between 1 and 20
If r=20 Then x=s                   'Checks for Crit Success
If r=1 Then v=f                    'Checks for Crit Failure
If r>=d Then: x=x+1: Else: v=v+1   'Increments Current Success or Fails
Debug.Print r                      'Prints (Could us MSGBOX, it is shorter)
Loop
If v>=f Then k=0                   'Checks & Changes Total Outcome to False
Debug.Print k                      'Prints (Could us MSGBOX, it is shorter)
End Sub

1

স্পেসবিএএস - 165 বাইট

1 INPUT d,s,f
2 DIM p(2)
3 DO 
4 r=1+INT(RND*20): ?r
5 IF r IN [1,20] THEN EXIT 
6 INC p((r>=d)+1)
7 LOOP UNTIL p(1)>=f OR p(2)>=s
8  ?IIF$(r=1 OR p(1)>=f,"fail","success")

ইনপুটটি অসুবিধা, সাফল্য, ব্যর্থতার ক্রমে প্রবেশ করা উচিত।

স্পেসবিএসের নতুন প্রকাশের অনুমতি এখন "?" পরিবর্তে পরিবর্তনশীল অ্যাসাইনমেন্টের সামনে PRINTপ্রয়োজনীয়তা সরিয়ে দেয় এবং LETতাদের চেষ্টা করে দেখার জন্য এটি একটি দুর্দান্ত উপায় ছিল।

অ্যারেগুলি ডিফল্টরূপে 1-ভিত্তিক, লাইন 6 টি 0/1 প্রদান করে যদি রোল অসুবিধে হয় এবং সঠিক সূচক আপডেট করতে 1 যোগ করে।


1

পার্ল 6 ,  101   99 বাইট

->$/ {(1..20).roll(*).map({$1*$2||last;$2-=$0>$_;$2=0 when 1;$1-=$_>=$0;$1=0 when 20;$_}).eager,$2}
# 101 bytes
->$/ {
  (1..20).roll(*).map({  # roll an infinite sequence, and map over them
    $1*$2||last;         # stop if either counter is 0
    $2-=$0>$_;           # decrement failure counter when a failure
    $2=0 when 1;         # set failure counter to 0  when a critical failure
    $1-=$_>=$0;          # decrement success counter when a success
    $1=0 when 20;        # set success counter to 0  when a critical success
    $_                   # the rolled value
  }).eager,$2            # the value of failure counter
}

ইনপুট হ'ল একটি পরিবর্তনীয় অ্যারে যা অসুবিধা, সাফল্য, ব্যর্থতা সমন্বিত

আউটপুট একটি দুটি উপাদান তালিকা, প্রথম উপাদানটি ঘূর্ণিত মানগুলির একটি তালিকা, দ্বিতীয় উপাদানটি হ'ল ব্যর্থতার সংখ্যা।

ব্যবহার:

# give it a name for ease of use
my &code = {...}

for ^10 { say code [12, 5, 3] }
((14 4 15 5 5) 0)
((17 4 16 12 3 8) 0)
((2 14 14 7 14 19 19) 1)
((3 12 13 15 10 1) 0)
((3 17 16 10 11) 0)
((18 11 18 4 6) 0)
((15 13 1) 0)
((13 15 8 2 8) 0)
((16 17 8 10 11) 0)
((9 20) 2)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.