মৃত্যুর জন্য তৈরী হও?


22

পটভূমি

ট্যাবলেটপ রোল-প্লেয়িং গেমগুলিতে এন্নুইয়ের একটি উত্স হ'ল বহু ডাইসে জড়িত রোলগুলি নিয়ে কাজ করে। একটি বিভাজন স্পেল কাস্ট করা তাত্ক্ষণিক হতে পারে, তবে ঘূর্ণায়মান এবং 40 টি ডাইস একসাথে যুক্ত করা অবশ্যই নয়!

এটি পরিচালনা করার জন্য বেশ কয়েকটি পরামর্শ rpg.stackexchange.com এ আলোচনা করা হয়েছে । এর মধ্যে কিছু, যেমন রোলার প্রোগ্রাম ব্যবহার করা বা ডাইভারেজ গড় চালানো, খেলোয়াড়দের কাছ থেকে কিছু মজাদার এবং নিয়ন্ত্রণের সংজ্ঞা কেড়ে নেয়। অন্যান্য যেমন 4 টি ডাইস ঘূর্ণায়মান এবং 10 টি দ্বারা মোট গুণ করে ফলাফলগুলি আরও বেশি সুইং করে তোলে (পাশের গড় পাশ্ব বিপরীত দিকে কাজ করে)।

এই প্রশ্নটি গড় ফলাফল (গড়) বা এর ঝলকানো (বৈকল্পিকতা) পরিবর্তন না করেই ডাইস রোলগুলির সংখ্যা হ্রাস করার একটি পদ্ধতি সম্পর্কে উদ্বেগ প্রকাশ করে ।

স্বরলিপি এবং গণিত

এই প্রশ্নে, আমরা পাশা রোল প্রতিনিধিত্ব করতে নিম্নলিখিত স্বরলিপি ব্যবহার করব:

  • n ডি কে (যেমন 40 ডি 6) কে-পার্শ্বযুক্ত ডাইয়ের এন রোলসের যোগফলকে বোঝায়।
  • n d k * c (উদাঃ 4d6 * 10) ধ্রুবক সি দ্বারা ফলাফলকে গুণিত করার বর্ণনা দেয়।
  • আমরা রোলগুলি (উদাহরণস্বরূপ 4d6 * 10 + 40d6) এবং ধ্রুবকগুলিও যুক্ত করতে পারি (উদাঃ 4d6 + 10)।

একটি ডাই রোলের জন্য, আমরা এটি দেখাতে পারি:

  • গড় : ই [1 ডি কে ] = (কে + 1) / 2
  • বৈচিত্র : ভার (1 ডি কে ) = (কে -1) (কে + 1) / 12

গড় এবং বৈকল্পিকের মূল বৈশিষ্ট্যগুলি ব্যবহার করে আমরা আরও অনুমান করতে পারি:

  • গড় : E [ m d k * a + n d l * b + c ] = am .E [1 ডি কে ] + বিএন । [১ ডি এল ] + সি
  • ভ্যারিয়েন্স : Yvelines ( মি * একটি + + N * + + ] = একটি । ² এর মি .Var (1d ) + + ² এর। এন .Var (1d )

কার্য

তিনটি সংখ্যার এন , কে এবং আর দেওয়া , আপনার প্রোগ্রামটি নিম্নলিখিত সীমাবদ্ধতার সাথে সর্বাধিক আর রোলগুলিতে এন ডি কে প্রায় অনুমান করার একটি উপায় আউটপুট করা উচিত :

  • সমাধানটির n ডি কে হিসাবে একই গড় এবং বৈকল্পিক হওয়া উচিত ।
  • সমাধানে আর এর চেয়ে কম বা তার সমান রোলগুলির বৃহত্তম সম্ভাব্য সংখ্যক সংখ্যা থাকা উচিত , কারণ আরও রোলগুলি একটি মসৃণ বিতরণ তৈরি করে।
  • আপনি শুধুমাত্র ব্যবহার করে আপনার সমাধানগুলি সীমিত করা উচিত পার্শ্বযুক্ত পাশা, যদি না আপনি (নিচে দেখুন) বোনাস জন্য নিশানা করছি।
  • যদি কোন সমাধান (যেমন খুবই ছোট), প্রোগ্রাম উচিত আউটপুট স্ট্রিং "আমি একটি সেক্সি জুতোহীন যুদ্ধের দেবতা!"।
  • পরামিতিগুলি একটি একক স্থান-বিভাজিত স্ট্রিং হিসাবে পাস করা হয়েছে।
  • আপনি ধরে নিতে পারেন যে 1 ≤ n ≤ 100, 1 ≤ rn এবং সেই কে 4, 6, 8, 10, 12 এবং 20 এর মধ্যে একটি (ট্যাবলেটগুলিতে ব্যবহৃত স্ট্যান্ডার্ড ডাইস)।
  • আউটপুট নোটেশন বর্ণিত বিন্যাসে হওয়া উচিত (যেমন 4d6 * 10 + 5), এর প্রায়শই optionচ্ছিক স্পেস থাকলেও অন্য কোথাও নেই। ইউনিট মাল্টিপ্লায়ারগুলিও optionচ্ছিক: 4d6 * 1 এবং 4d6 উভয়ই বৈধ।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে একটি প্রোগ্রাম বা ফাংশন লিখতে পারেন। ফলাফলগুলি STDOUT (বা নিকটতম বিকল্প) এ মুদ্রিত হওয়া উচিত বা স্ট্রিং হিসাবে ফিরে আসতে হবে।

উদাহরণ

>> "10 6 10"
10d6
>> "10 6 4"
2d6*2+2d6+14
>> "10 6 3"
1d6*3+1d6+21
>> "10 6 2"
1d6*3+1d6+21
>> "10 6 1"
I AM A SEXY SHOELESS GOD OF WAR!

স্কোরিং

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

বোনাস

-33% (বিয়োগ পায়ের সামনে বৃত্তাকার) যদি আপনার প্রোগ্রাম এছাড়াও সমাধান তদন্য বৈধ পাশা অন্তর্ভুক্ত আসতে (যেখানে বৈধ মান, যেমন উপরে উল্লিখিত হয় 4, 6, 8, 10, 12 এবং 20)। যদি আপনি এটি করতে পছন্দ করেন, তবে আপনার যথাযথ হলে সর্বদা এই জাতীয় সমাধানগুলি ফিরে আসা উচিত এবং একাধিক ধরণের ডাই ব্যবহার করে এমন সমাধানগুলি পরিচালনা করতে হবে। উদাহরণ:

>> "7 4 3"
3d6+7

6
ওটস রেফারেন্সের জন্য +1। ;) (ভাল এবং কারণ এটি একটি দুর্দান্ত চ্যালেঞ্জ, আসলে।)
মার্টিন এন্ডার

1
এই প্রশ্নটি স্থগিত করতে হয়ত আমাদের নতুন \ \ ল্যাটেক্স $ দক্ষতা ব্যবহার করবেন?
orlp

2
@ উরিজারফ্যাটি: আমি ল্যাটেক্স ব্যবহারের জন্য আপনার সূত্রগুলি আপডেট করেছি। আশা করি ঠিক আছে। যদি আপনি এটি পছন্দ না করেন তবে আপনি কেবল পোস্টটি রোল করতে পারেন এবং এটি আগের মতো ফিরে আসবে।
অ্যালেক্স এ।

1
আমি ল্যাটেক্স সম্পাদনাটি ফিরিয়ে নিয়েছি, কারণ দুর্ভাগ্যক্রমে, এটি এখনই আবার নিষ্ক্রিয় হবে
মার্টিন ইন্ডার

1
# স্যাডপাণ্ডা - আমি ভেবেছিলাম এটি "হ্যালো। আমার নাম ইনিগো মন্টোয়া to আপনি আমার বাবাকে হত্যা করেছেন die
স্ক্যানলিফ

উত্তর:


5

গল্ফস্ক্রিপ্ট ( 163 143 133 বাইট)

~@:^\?,{^base 0-}%{0\{.*+}/^=},.{{,}$-1=..&{[[1$[1$]/,(3$@]'d*+'1/]zip}%^@{-}/@)*.2/\1&'.5'*}{];'I AM A SEXY SHOELESS GOD OF WAR!'}if

অনলাইন ডেমো

পাশের ধরণের মিশ্রণ না করার সময়, সমস্যাটি স্কোয়ারের nচেয়ে বেশি হিসাবে যোগ করা হিসাবে কমিয়ে দেয় এবং শেষে ধ্রুবকের গণনা ব্যতীত অপ্রাসঙ্গিক। এই উত্তরটি বাল্ক হিসাবরক্ষণ পছন্দসই বিন্যাসে ফলাফলের প্রকাশ করা প্রয়োজন হল: প্রকৃত হিসাব হয় গুণ কারণের এটি , ইত্যাদি .; এবং ধ্রুবক গণনা।rk^\?,{^base}%{0\{.*+}/^=},ab^@{-}/@)*.2/

ব্যবচ্ছেদ

~                # Stack: n k r
@:^\?,{          # Store n in ^, and for 0 to n**r
  ^base 0-       #   convert to base n and remove 0s.
}%               # Stack: k [arrays of up to r values from 1 to n-1]
{0\{.*+}/^=},    # Filter them to arrays whose sum of squares is n,
                 #   i.e. to multipliers which have the right variance
.{               # If any multiplier array passes the filter...
  {,}$-1=        #   Pick one with the greater number of rolls
                 #   Stack: k [multipliers]
  ..&{           #   Map each distinct multiplier a...
    [[           #     Gather in nested array for later zip
      1$[1$]/,(  #       Split a copy of the multipliers around a to count the as
                 #       Let's denote that count as m
                 #       Stack: k [multipliers] a [ [ m
      3$@        #       Copy k and rotate the a inside the nested array
     ]           #       Stack: k [multipliers] [ [m k a]
      'd*+'1/    #       Push an array ['d' '*' '+'] and close nested array
    ]zip         #       Giving [[m 'd'] [k '*'] [a '+']]
                 #       which will be printed as mdk*a+
  }%             #   Stack: k [multipliers] [string representations of dice]
  ^@{-}/@)*      #   Compute (n - sum(multipliers)) * (k + 1)
                 #   That's twice the constant we need to add to fix the mean
  .2/\1&'.5'*    #   And convert it to a renderable form, including .5 if needed
}{               # Otherwise clear the stack and push the error message
  ];'I AM A SEXY SHOELESS GOD OF WAR!'
}if

1

পাইথন, 487 461 452 - 33% = 303 বাইট

যেহেতু অন্য কেউ এটি করেনি, তাই এখানে একটি সমাধান যা বিভিন্ন ধরণের ডাইস পরিচালনা করে। অন্যান্য সমাধানের মতো এটিও সম্ভাব্য সমাধানের একটি ব্যাপ্তি তৈরি করে এবং সেগুলি ফিল্টার করে। অপ্রয়োজনীয় ফর্ম মুদ্রণ 0 দিন ওপর থেকে নিষেধাজ্ঞা অভাব: এটা সত্য যে (ট + 1 টি) (ট-1) = বৈশিষ্ট ট ^ 2-1 এবং দুই আধা সমস্যা (! ওহো) ব্যবহার করে * একটি (যা সংরক্ষণ করে 5 টি বাইটের সমস্ত!) এবং চলমান সময়ের সীমাবদ্ধতার অভাব (এটি দেওয়া সমস্ত উদাহরণ চালিত করে যদিও এটি মোটামুটি দ্রুত ধীর হয়ে যায়)।

from itertools import*
N,K,R=map(int,input().split())
S=lambda l:sum([x[0]for x in l])
s=[x for x in product(*[[(n,k,a)for n in range(N*(K**2-1)/((k**2-1)*a**2)+1)]for a in range(1,N+1)for k in[4,6,8,10,12,20]if a**2<=N])if sum([n*(k**2-1)*a**2 for n,k,a in x])==N*K**2-N and S(x)<=R]
if s:s=max(s,key=S);print"+".join(["%sd%s*%s"%x for x in s]+[str(int(N*(K+1)/2.-sum([n*a*(k+1)/2.for n,k,a in s])))])
else:print"I AM A SEXY SHOELESS GOD OF WAR!"

সুন্দর আউটপুট যোগ করার জন্য if x[0]পর "%sd%s*%s"%x for x in s:

>> "7 4 3"
3d6+7
>> "10 6 3"
1d6*1+1d8*1+1d8*2+18
>> "10 6 2"
1d6*1+1d6*3+21
>> "10 6 1"
I AM A SEXY SHOELESS GOD OF WAR!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.