রোল ডানজন এবং ড্রাগন পাশা d


20

আমি ডানজন এবং ড্রাগন খেলতে চাই, তবে আমার কোনও ডাইস নেই! আপনার চ্যালেঞ্জটি হ'ল কিছু ডি ও ডি ডাইস রোল করা।

ব্যাকাস-নওর ফর্মের ইনপুট ফর্ম্যাট স্পেসিফিকেশনটি হ'ল:

<valid-input>  ::= <opt-integer> "d" <integer> <opt-modifier>
<opt-integer>  ::= | <integer>
<opt-modifier> ::= | "+" <integer>
<integer>      ::= "0" | "1" | "2" | "3" | "4" | "5" |
                   "6" | "7" | "8" | "9" | <integer> <integer>

এর আগে alচ্ছিক পূর্ণসংখ্যা dহ'ল পাকা রোলের সংখ্যা; এটি অবশ্যই কমপক্ষে 1এবং 1সরবরাহ না করা হলে ডিফল্ট হতে হবে।

প্রয়োজনীয় পূর্ণসংখ্যার সাথে সাথে dপ্রতিটি মরার পাশের সংখ্যা; এটি কমপক্ষে হতে হবে 1। প্রতিটি ডাই এর পক্ষগুলি থেকে শুরু হওয়া স্বতন্ত্র ক্রমাগত ধনাত্মক পূর্ণসংখ্যা 1

.চ্ছিক সংশোধক হতে পারে +0এবং এটি +0নির্দিষ্ট না হলে ডিফল্ট হয় ।

উদাহরণস্বরূপ, ইনপুটটির জন্য 2d10+5, আপনি 1 থেকে 10 সমেত 2 টি থেকে এলোমেলো সংখ্যা উত্পন্ন করেন, তাদের একসাথে যুক্ত করুন এবং 5 যোগ করুন Then তারপরে আপনি ফলাফলটি আউটপুট করবেন।

আপনি অবৈধ ইনপুট যেমন পান তাহলে 2d, d20+, 0d4, 2d5+1+2, 2+2, বা অন্য কিছু যে এই বিন্যাসে, আপনি আউটপুট অবশ্যই "মাপসই করা হবে না Invalid input"। অন্যথায়, আপনাকে অবশ্যই ইনপুট অনুসারে ওজনযুক্ত একক র্যান্ডম পূর্ণসংখ্যার আউটপুট দিতে হবে। উদাহরণস্বরূপ, s এর চেয়ে 3d6বেশি 10এস উত্পাদন করা উচিত4

পরীক্ষার মামলা

Input      Minimum possible output    Maximum possible output
d1         1                          1
d6         1                          6
d1+3       4                          4
d20+3      4                          23
2d1        2                          2
2d6+2      4                          14
d01        1                          1
d01+0      1                          1
01d01+01   2                          2
3d20+10    13                         70

d          Invalid input
d0         Invalid input
d+0        Invalid input
d0+0       Invalid input
0d1        Invalid input
0d1+1      Invalid input
d1+        Invalid input
1d         Invalid input
1d1+       Invalid input
1d+1       Invalid input
2d+2d      Invalid input
d2+d2      Invalid input
d2+2+2     Invalid input
d2-1       Invalid input
-d2        Invalid input
-2d2       Invalid input
4*3        Invalid input
4*d2       Invalid input

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!


1
কি 02d05+073একটি বৈধ ইনপুট?
এমটি0

2
এই প্রশ্নের কঠোর অংশটি ইনপুটটিকে বৈধতা দিচ্ছে, তবে যা অনুচ্ছেদে যাচাইয়ের নিয়মগুলি বর্ণনা করা হয়েছে তা স্ববিরোধী। এটি বর্ণনা করে nএবং palচ্ছিক হিসাবে, তবে ইনপুট যা এগুলি ( d20+) অবৈধ হিসাবে অন্তর্ভুক্ত না করে তা বেছে নেয় ।
পিটার টেলর

1
@ পিটারটেলর: আমি মনে করি +সংশোধনকারী pসরবরাহ করা থাকলে সাইনটি কেবল যুক্ত করা উচিত ।
প্রোগ্রামফক্স

4
@ ডুরকনব, আচ্ছা, কারণ ডি 13 এবং ডি 17 ডি ও ডি তে চালাই ব্যবহৃত হয় না। ডি অ্যান্ড ডি d4, d6, d8, d10, d12, এবং d20 ব্যবহার করে। এছাড়াও, অবশ্যই কিছু ক্ষেত্রে রয়েছে যে কোনও রোলটিতে বিভিন্ন ধরণের ডাইস অন্তর্ভুক্ত থাকবে (উদাহরণস্বরূপ, 1d4+1d6কোনও রোগী ছিনতাইকারীর সাথে আক্রমণ করার জন্য) বা negativeণাত্মক p(যেমন, 1d20-1কোনও র‌্যাঙ্ক / প্রশিক্ষণ এবং দক্ষতা নেতিবাচক দক্ষতা ছাড়াই দক্ষতার জন্য)।
ব্রায়ান এস

2
আপনি কি ইউনডকেস ছাড়াই ডিএনডি খেলছেন 2d8 + 1d6 + 4? আপনার খারাপ সময় হবে
কর্সিকা

উত্তর:


12

পার্ল, 109 95 93 96 89 বাইট

s/^d/1d/;/^(\d+)d(\d+)(\+\d+)?$/;$d+=1+rand$2|0for
1..$1;$_=$1*$2?$d+$3:'Invalid input'

প্রয়োজন -pসুইচ, যা বাইট দুই জন্য অ্যাকাউন্ট। আইডিয়নে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

  • -pস্যুইচের কারণে , একটি লাইন এসটিডিএন থেকে পড়ে এবং এতে সঞ্চিত হয় $_

  • কমান্ডটি 1 থেকে s/^d/1d/প্রারেন্ডিং করে যদি এটি ডি দিয়ে শুরু হয় , অর্থাত্, যদি পাশ্বের সংখ্যা নির্দিষ্ট না করা থাকে।$_

  • নিয়মিত অভিব্যক্তিটি /^(\d+)d(\d+)(\+\d+)?/পরীক্ষা করে যে লাইনটিতে একটি সংখ্যা, একটি আক্ষরিক ডি , অন্য একটি সংখ্যা এবং ally চ্ছিকভাবে , তৃতীয় সংখ্যাটি + চিহ্ন দ্বারা যুক্ত রয়েছে কিনা তা পরীক্ষা করে ।

    যদি একটি ম্যাচ হয়, সংখ্যা সংরক্ষিত হবে $1, $2এবং $3

    এই ক্ষেত্রে, ইনপুটটি বৈধ হবে যদি কেবল $1এবং $2যদি উভয়ই ইতিবাচক হয়।

  • $d += 1 + rand $2 | 0সিউডো-এলোমেলোভাবে নির্বাচিত পূর্ণসংখ্যা 1 থেকে নির্দিষ্ট সংখ্যক পার্শ্বের $d(প্রাথমিকভাবে শূন্য হিসাবে বিবেচিত) যুক্ত করা হয়।

  • for 1 .. $1 উপরের একবার এবং প্রতিটি পাশা সংখ্যার মধ্যে প্রতিটি পূর্ণসংখ্যার জন্য।

  • কমান্ড $_ = $1 * $2 ? $d + $3 : 'Invalid input'নিম্নলিখিতটি করে:

    • যদি $1 * $2শূন্য হয় তবে এটি অবৈধ ইনপুটকে সেট $_করে ।

    • অন্যথায়, ইনপুটটি বৈধ এবং এটি $_ডাইস রোলস এবং সংশোধকটির যোগফলকে সেট করে।

  • -pস্যুইচ করার কারণে , পার্ল এর সামগ্রীগুলি মুদ্রণ করে $_

  • যেহেতু আর কোনও ইনপুট লাইন নেই, স্ক্রিপ্টটি প্রস্থান করে।


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

2
96 টি চর তৈরি করা যায়,/^([1-9]\d*)?d([1-9]\d*)(\+\d+)?$/||die"Invalid input$/";$a+=1+int rand$2for(1..$1||1);$_=$a+$3
হাস্তুরকুন

1
@ আন্ডারগ্রাউন্ডমোনোরাইল: আমি লোককে একক কমান্ড-লাইন সুইচকে এক, দুই এবং এমনকি তিনটি (সাদা স্পেস গণনা করে) বাইট হিসাবে গণনা করতে দেখেছি। আমি বরং এটিকে একটি হিসাবে গণনা করি তবে দুটি বাইট আমার কাছে ভাল লাগে।
ডেনিস

1
@ ভাইরাস আমি ধরে নিলাম আপনারও নেই n't আমি |0ইনট এ কাস্ট করতে ব্যবহার করি , যেহেতু randছদ্ম-এলোমেলোভাবে বেছে নেওয়া ভাসাটি ফেরত দেয় ।
ডেনিস

1
@ ভায়েন্স আমি প্রশ্নের ( আইডোন.কম / জিএলজেফএও ) একটি পারমিংক যুক্ত করেছি । -eআপনি এখানে ডাবল উদ্ধৃতি দিয়ে একক উদ্ধৃতি প্রতিস্থাপন না করা পর্যন্ত সমস্যাযুক্ত হবে।
ডেনিস

4

ফরট্রান: 145

character(1)a;read(*,*)s,a,j,a,k;n=0;if(k<0.or.a=="-")then;print*,"error k<0";stop;endif;do l=1,int(s);n=n+int(s*rand(0)+1);enddo;print*,n+k;end;

আপত্তিজনকভাবে অন্তর্নিহিত টাইপিং ( i-nসবগুলি পূর্ণসংখ্যা, অন্য সব কিছু বাস্তব। গৌণ সাবধানতা: ইনপুট অবশ্যই পৃথক পৃথক হতে 2d10+5হবে , সুতরাং অবশ্যই প্রবেশ করানো উচিত 2 d 10 + 5, অন্যথায় আপনি একটি পাবেন input conversion error


4

রুবি, 116

বিকল্প রুবি সংস্করণ। আমি নিয়মিত প্রকাশ ছাড়াই এটি করার একটি উপায় সন্ধান করার চেষ্টা করছিলাম, তবে আপনাকে যা যাচাই করতে হবে সেগুলি ব্যতীত আরও শক্ত।

gets=~/^(\d+)?d(\d+)(\+\d+)?$/
a=$1||?1
puts$~&&a>?0?eval("r=#{$3||0};#{a}.times{r+=rand(#$2)+1};r"):'Invalid input'

ডেনিসের চালাক পার্ল অ্যালগরিদম ব্যবহার করে এটি 112,

$p='(\d*[1-9]\d*)'
puts~/^#$p?d#$p(\+\d+)?$/?eval("r=#{$3||0};#{$1||1}.times{r+=rand(#$2)+1};r"):'Invalid input'

@ এম.বাট্টনার ধন্যবাদ! আমি কেন জানি না কেন এটি> 0 হতে হবে।
পল প্রেস্টিজ

3

জাভাস্কিপ্ট, 158

m=prompt().match(/^([1-9]\d*)?d([1-9]\d*)(\+\d+)?$/);if(!m)alert("Invalid input");else{for(s=+m[3]|0,i=0;i<(+m[1]||1);i++)s+=Math.random()*+m[2]+1|0;alert(s)}

এর চেয়ে গল্ফ আর ভাল হতে পারে না। সময় এসেছে কাজে ফিরে আসার।


1
s="Invalid input";if(m=prompt().match(/^([1-9]\d*)?d([1-9]\d*)(\+\d+)?$/))for(s=m[3]|0,i=0;i<(m[1]||1);i++)s+=Math.random()*m[2]+1|0;alert(s)মাত্র 137 বাইট রয়েছে।
ডেনিস 14

2
প্রশ্নের মন্তব্য অনুযায়ী, এটি একটি ভুল উত্তর কারণ এটি ইনপুটটিকে প্রত্যাখ্যান করে 02d05+073
পিটার টেলর

3

গল্ফস্ক্রিপ্ট ( 120 106 বাইট)

.100?!1`*\+.43?)!'+0'*+.10,'d+':^*-!*.10,''*-^=*^1/{/n*}/~].,3=*3,or:x~;*{x~\{rand)+}+@*}'Invalid input'if

এটি কেবল প্রথম সংস্করণের চেয়ে ছোট নয়, আরও মার্জিতও। আসলে ডাই রোলিংয়ের অংশটি হ'ল

\{rand)+}+@*

বাকিটি হ'ল মূলত ইনপুট বৈধতা এবং পার্সিংয়ের জন্য কয়েকটি অক্ষর।

# Start by converting valid inputs into valid inputs with all optional bits.
# Prepend a '1' if the string starts with 'd'.
.100?!1`*\+
# Append '+0' if there's no '+' in the string.
.43?)!'+0'*+
# Now we start knocking out the invalid inputs.
# If it contains a character other than [0-9d+], replace the string with ''.
.10,'d+':^*-!*
# If it doesn't contain exactly one 'd', exactly one '+', and the 'd' before the '+',
# replace the string with ''.
.10,''*-^=*
# Now we either have a valid string, an empty string, or a string which is almost valid
# but has some empty substrings which should be integers, or a forbidden 0 integer value.
# Replace the 'd' and '+' with newlines, eval the result, and gather into an array.
^1/{/n*}/~]
# If we had any empty parts, we'll have fewer than 3 items on the stack.
# In that case, replace with integer values which will fail the final validation step.
.,3=*3,or
# Final validation: number of dice * number of sides per die != 0.
:x~;*
# If we pass, do the actual die rolling. Otherwise give the error message.
{x~\{rand)+}+@*}'Invalid input'if

পরীক্ষার কাঠামোর সাথে অনলাইন ডেমো


আমি ভাবছি আপনি কেন ব্যবহার করবেন না n./? 10,n*এক চরিত্রের জন্যও কম হতে পারে ।
হাওয়ার্ড

@ হাওয়ার্ড, প্রথমদিকে, কারণ কিছু পরীক্ষার কেস পাস করার জন্য এটি শেষ মুহূর্তের হ্যাক ছিল এবং আমি এটি গল্ফ করার বিষয়ে ভাবি নি। দ্বিতীয়টি, এটি এটি কিছু অবৈধ ইনপুট গ্রহণ করতে সক্ষম করবে।
পিটার টেলর

2

জে - 130 (45?) চর

নিয়মিত প্রকাশের প্রতি এই চ্যালেঞ্জটি কিছুটা পক্ষপাতদুষ্ট বলে মনে হচ্ছে, বিশেষত অবৈধ ইনপুটটিকে পৃথক করে দেখা দিয়ে। জে এর একটি পসিক্স রেইগেক্স লাইব্রেরি রয়েছে, সুতরাং এটি খুব খারাপ নয়, তবে এটি পার্লের সাথে যেমন হয় তবে এটি সংহত হয় না, তাই জে ভাড়া অন্যান্য ভাষার চেয়ে ভাল।

+/@,`(1+?@#~)/`('Invalid input'"_)@.(0 e.$)0 1 1>.".>|.}.((,'?d','(\+[0-9]+)?$',~}.)'^([0-9]*[1-9][0-9]*)')(rxmatch rxfrom])1!:1]1

যদি আপনি কেবল পাইথন / পিএইচপি সমাধানগুলির মতো বৈধ এক্সপ্রেশনগুলির জন্য যুক্তি বাস্তবায়ন করেন তবে এটি আরও যুক্তিসঙ্গত 45 টি অক্ষর:

+/,(1+[:?@#/1>.".;._2@,&'d')`".;._1'+',1!:1]1

উল্লেখযোগ্য বিট:

  • 1!:1]1হ'ল ইনপুট, এবং (rxmatch rxfrom])এমন যুক্তি যা সুব্রস্প্রেশন ম্যাচগুলিকে ফিরিয়ে দেয়।

  • ইনপুট আইনী ছিল কি না রেজেক্স ম্যাচিংয়ের দ্বারা পরিচালিত হয়, তাই আমরা n এবং p এর সাথে ডিফল্ট সেট করতে পারি 0 1 1>.। এটি পিছনের দিকে দেখায় (ডিফল্ট হিসাবে এন 1 এবং পি 0 হয়) কারণ আমাদের |.আগে তালিকাটি ( ) পূর্বে উল্টাতে হয়েছিল, যাতে শেষে যুক্তিটি সঠিক ক্রমে সম্পাদন করে।

  • @.হয় এজেন্ডা একত্রে মূলত J-পর সুইচ বিবৃতি। যদি ম্যাচগুলি খালি থাকে (যদি 0 টি $ হ্যাপের একটি e.lement হয় 0 e.$), আমরা ত্রুটি বার্তাটি প্রেরণ করি, অন্যথায় আমরা পাশা ঘূর্ণিত করে যাব: ডাইস #~সেট করা, 1+?রোল করা, এবং +/@,সংশোধক পি যোগ করতে এবং যোগফল


এটা কি কাজ করে 01d01+01?
সিইস টিমারম্যান

পছন্দ করুন এটা এখন।
অ্যালগরিদমশর্ক

2

টিনিমুশ , 239

@dig/t +
@op d=+
@lo d=d
@fail d=Invalid input
@cr .
@set .=com
&d .=$*:\ifelse(regmatch(%0,^(\\\\d+)?d(\\\\d+)(\\\\+\\\\d+)?$,0 1 2 3),ifzero(and(or(not(strlen(%q1)),%q1),%q2),Invalid input,add(die(usetrue(%q1,1),%q2),%q3)),Invalid input)

প্রথম চারটি লাইন এই সত্যটি নিয়ে ডিল করে যে "ডি" হ'ল একটি অন্তর্নির্মিত ব্যর্থতা বার্তা সহ সর্বজনীন "ডাউন" প্রস্থান করার জন্য একটি উপ নাম যখন উপস্থিত না থাকে; ব্যবহারকারী নির্ধারিত কমান্ডের আগে প্রস্থানগুলি স্ক্যান করা হয়। বাকী রেখাগুলি বিল্ট-ইন ডাই () ফাংশনটি ব্যবহার করে একটি ব্যবহারকারী-সংজ্ঞায়িত কমান্ড দিয়ে একটি অবজেক্ট তৈরি করে।


2

পিএইচপি, 129

<?eval(preg_filter(~Сף›ÔÖÀ›×£›Ö×£Ô£›ÔÖÀÛÐ,~ÛžÂÝÛÎÝÀÅÎÄ™×ÄÛ–ÔÔÃÛžÄیԞ‘›×ÎÓÛÍÖÖÄšœ—ÛŒÛÌÄ,$_GET[0])?:~šœ—ݶ‘‰ž“–›ß–‘Š‹ÝÄ);

পিএইচপি তারপরে মূল্যায়ন করে এমন একটি এক্সপ্রেশন তৈরি করতে একটি রেজেক্স ব্যবহার করে। ইউআরএল:? 0 = যুক্তির মাধ্যমে ইনপুট খাওয়ানো হয় । নিশ্চিত হয়ে নিন যে আপনি + 2% থেকে + তে urlncode করেছেন। এটি আরও পঠনযোগ্য ফর্মের মতো দেখতে এখানে দেখুন:

eval(preg_filter('/^(\\d)?d(\\d)(\\+\\d)?$/','$a="$1"?:1;for(;$i++<$a;$s+=rand(1,$2));echo$s$3;',$_GET[0])?:'echo"Invalid input";');

বিটওয়্যার ব্যবহার করে স্ট্রিংগুলি উল্টানো ~ কেবল একটি অক্ষর সংরক্ষণ না কারণ আপনার উদ্ধৃতিগুলির প্রয়োজন নেই (পিএইচপি তারা স্ট্রিংগুলি মনে করে) তবে অক্ষরগুলিও সংরক্ষণ করে কারণ আপনাকে নিয়মিত অভিব্যক্তিতে ব্যাকস্ল্যাশগুলি এড়াতে হবে না।

?:অপারেটর তিন অপারেটর একটি বিশেষ রূপ। $foo = $a ? $a : $bহিসাবে একই $foo = $a ?: $b


1

জাভা, 378

সেরা সমাধান থেকে দূরে জাভা সহ একটি সমাধান চেষ্টা করতে চেয়েছিলেন। তবে ওহে: জাভা কোনও ক্ষেত্রেই গল্ফের ভাষা নয়!

এটি কমান্ড লাইন থেকে ইনপুট পায়। প্রথম প্যারামিটার args[0]হ'ল ইনপুট মান।

class A{public static void main(String[]s){System.out.print(s[0].matches(
"(0+\\d+|[1-9]\\d*|)d(0+\\d+|[1-9]\\d*)(\\+\\d+)?")?z(s[0]):"Invalid input");}static int
z(String s){String[]a=s.split("d");String[]b=a[1].split("\\+");int c=a[0].isEmpty()?1:Byte.
decode(a[0]);int d=b.length<2?0:Byte.decode(b[1]);while(c-->0)d+=new java.util.Random().
nextInt(Byte.decode(b[0]))+1;return d;}}

আপনি কি জানেন যে, এটি decodeচেয়ে খাটো valueOf?


1

পাইথন 3, 184 বাইট

import random,re
try:a,b,c=re.findall("^(\d*)d(\d+)(\+\d+)?$",input())[0];t=int(c or 0)+(sum(random.randint(1,int(b))for i in range(int(a or 1)))or q)
except:t="Invalid input"
print(t)

সমস্ত পরীক্ষা পাস। যদি শূন্য পাশা অনুমতি দেওয়া হয়, এটি বাইরে রেখে 6 বাইট ছোট হবে (or q)


যদিও আমি বিএনএফকে ভুল বুঝেছিলাম। এই পৃষ্ঠাটি সাহায্য করে।
সিইস টিমারম্যান

অন্য কারও উপকারের জন্য যারা অবাক হয় যে কেন রেজেক্সটি এক প্রান্তে নোঙ্গর করা হয়েছে তবে অন্যটি নয়: পাইথনের অন্তর্ভুক্ত re.matchস্পষ্টতই নোঙ্গর শুরুতে তবে শেষ পর্যন্ত নয়। আমি অন্য কোন রেগেক্স লাইব্রেরি সম্পর্কে সচেতন নই যা এটি করে।
পিটার টেলর

1
আরম্ভ করে একটি ছোট সঞ্চয় আছে t=int(c or 0); এবং আপনার উত্তরটি আরও দু'জনকে বাঁচাতে বিদ্যমান পাইথনের সাথে (যা কম সাদা অংশ ব্যবহার করে) একত্রিত করা সম্ভব।
পিটার টেলর

0

জাভাস্ক্রিপ্ট 134

m=prompt().match(/^((?!0)\d*)d((?!0)\d+)(\+\d+)?$/);alert(m?eval('for(o=m[3]|0,i=m[1]||1;i--;)o+=m[2]*Math.random()+1|0'):'Invalid input')


ভাল মিল রয়েছে, এটি একই ভাষা / অ্যালগরিদম ... তবে আমি ভেবেছিলাম আলাদা কোড পোস্ট করার জন্য আমার কোডে (এবং রেজেক্স) যথেষ্ট পার্থক্য রয়েছে।
মাইকেল এম।

প্রশ্নের মন্তব্য অনুযায়ী, এটি একটি ভুল উত্তর কারণ এটি ইনপুটটিকে প্রত্যাখ্যান করে 02d05+073
পিটার টেলর

0

রুবি, 167 147

/^(\d+)?d(\d+)(\+\d+)?$/.match gets
abort'Invalid input'if !$~||$1==?0||!$2||$2==?0
p eval(([0]*($1||1).to_i).map{rand($2.to_i)+1}*?+)+($3||0).to_i

সমস্ত কাজ করতে একটি regexp ব্যবহার করে। যেহেতু আমি ব্যবহার করছি \d+, কেবলমাত্র অবৈধ ইনপুট জন্য আমার যাচাই করা দরকার তা হ'ল একটি মিল ছিল, যা ছিল না nএবং mছিল না 0এবং এটি ছিল m। এর মধ্যে যদি কোনওটি পাওয়া যায় তবে এটি একটি বার্তা ( 'Invalid input') দিয়ে বাতিল করে দেয়। তারপরে এটি কেবল ফলাফলটি মুদ্রণ করে, যেহেতু ইনপুটটি অবৈধ থাকলে এটি এখনই বাতিল করে দেওয়া উচিত।

ফলাফল-মুদ্রণটি আকর্ষণীয় নয়, তবে ...

([0]*($1||1).to_i)    # create an array of n elements (1 if there is no n)
.map{rand($2.to_i)+1} # fill it up with random numbers, where the number x is 1 < x < m+1
.inject(:+)           # add them all up
+($3||0).to_i         # and finally add the modifier (0 if there is none)

আমি পরে পরিবর্তিত .inject(:+)করতে eval(...*?+), কিন্তু ধারণা একই।


0

পাইথন 3, 204 বি

খনি প্রয়োজনীয় ত্রুটি পরিচালনা মধ্যে যুক্ত করা এবং পড়ার মাধ্যমে বিদ্যমান পাইথন উত্তর beats d20যেমন 1d20বদলে 0d20:)

import random,re
try:a,b,c=re.findall('^([1-9]\d*)?d(\d+)(\+\d+)?$',input())[0];I=int;R=sum(random.randrange(I(b))+1for x in[0]*(1if a==''else I(a)))+(0if c==''else I(c))
except:R='Invalid input'
print(R)

2 টাইপস ফিক্স সম্পাদিত: I(x) => I(c),Invalid Input => Invalid input

রেজেক্স ঠিক করার জন্য সম্পাদিত: \+?(\d*) => (\+\d+)?


স্পষ্ট প্রশ্ন অনুসারে, এটি একটি ভুল উত্তর কারণ এটি ইনপুট গ্রহণ করে 3d20+
পিটার টেলর

ভাল যুক্তি! # ফিলার
-ব্রেট 16

এবং না 01d01+01
সিইস টিমারম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.