এগুলি আমার ভাগ্যবান পাশা [বন্ধ]


10

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

তবে, এটি স্টেরিওটাইপিকাল গেমারদের যেমন কাজ করার প্রত্যাশা করে, তেমনি বাস্তব ডাইসের কাজ হিসাবে নয় work

এটি গেমারদের মধ্যে একটি কৌতুক, এটি যে খুব গুরুত্বপূর্ণ রোলের জন্য বিশেষভাবে ভাগ্যবান মারা যেতে পারে, এর আগে প্রচুর ডাইস ফেলে দিয়ে "1" এর ফলস্বরূপ সেগুলি নির্বাচন করে তারপরে আবার ছুঁড়ে ফেলা হয়, যতক্ষণ না আপনি পান কয়েকটি যা "1" একাধিকবার ঘুরেছে। তারপরে আপনি তাদের সাবধানে সংরক্ষণ করুন, কারণ তারা ধারাবাহিকভাবে 1 টি একাধিকবার ঘুরেছে, সুতরাং পরের বার 1 টি রোল করার সম্ভাবনা অত্যন্ত কম হওয়া উচিত।

অবশ্যই, বাস্তব জীবনে ডাইস কাজ করে না , কারণ রোলগুলি পরিসংখ্যানগতভাবে স্বতন্ত্র।

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

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

ভোটারগণ, দয়া করে এই "ত্রুটি" কীভাবে লুকিয়ে রয়েছে তা বিবেচনা করুন।

প্রোগ্রামগুলি পরিষ্কার হওয়া উচিত, এবং নিরবচ্ছিন্ন নয়। অস্পষ্ট প্রোগ্রামে দুষ্ট কোডটি লুকানো খুব সহজ।


3
আমরা কতটা গোপন কথা বলছি? আইএমও, ভাষার সমতুল্য কিছু ছাড়াই এর getRandomBetween(1,d)গভীরতা আমাকে দেখাবে।
জিওবিটস

@ জিওবিটস: আন্ডারহ্যান্ডড সমস্যাগুলি কীভাবে সমাধান করা যায় তার জন্য আপনি খুব সুন্দর উদাহরণ খুঁজে পেতে পারেন: কোডগল্ফ.স্ট্যাকেক্সেঞ্জার / প্রশ্নস / ১৯৫৯ / / আমার অর্থ আপনি যদি এটিকে যথেষ্টভাবে যথাযথভাবে প্রমাণ করেন তবে আপনি যে কোনও কিছু করতে পারেন, অবশ্যই ন্যায়সঙ্গত হতে পারে বড় মিথ্যা.
vsz

গডমায়দমনিট, জাভাতে আন্ডারহ্যান্ডেড স্টাফগুলির জন্য পর্যাপ্ত
ছটফট নেই


4
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করার পক্ষে ভোট দিচ্ছি কারণ আন্ডারহ্যান্ডেড চ্যালেঞ্জগুলি এখন অফ-টপিক, এবং কোনওভাবে এইটি রাডারটির নিচে চলে গেছে।
মেগো

উত্তর:


3

জাভা

public class GamerDie {
    private final java.util.Random rnd;
    private final int sides;

    public GamerDie(int sides) {
        this.sides = sides;
        this.rnd = new java.util.Random();
    }

    public int throw() {
        return rnd.nextInt(sides) + 1;
    }
}

এটি এত সহজ যে এটি স্পষ্টত কোনও কিছু আড়াল করছে না: তবে java.util.Randomএটি একটি সোজাসুজি রৈখিক একত্রিত জেনারেটর, এবং এটি অভিন্নতা নিশ্চিত করার জন্য একটি বিলোপ কৌশল ব্যবহার করে, তাই এটি গ্যারান্টি দেয় যে size2 ^ 48 এর চেয়ে কম নমুনার বৃহত্তম একাধিক রান এটি বিতরণ করবে সমানভাবে সংখ্যা, প্রয়োজনীয়তা সন্তুষ্ট।


java.util.random কীভাবে কাজ করে তা
বোঝাতে পিছপা না

যে উত্তোলনটি java.util.Randomসম্পাদন করে সেগুলির এই উত্তরের আচরণের সাথে খুব কম সম্পর্ক রয়েছে। সত্যই, এই উত্তরটির উপর যা নির্ভর করে তা হ'ল যে কোনও আরএনজির মতো তারও java.util.Randomএকটি পিরিয়ড রয়েছে এবং আপনি যদি পিরিয়ডের ক্রম অনুসারে প্রচুর সংখ্যা তৈরি করেন তবে এর পরিসংখ্যানগত বৈশিষ্ট্যগুলি ভেঙে যায়। এটি খুব আকর্ষণীয় নয়; ব্লাম ব্লাম শাবের মতো কোনও ক্রিপ্টোগ্রাফিক-সুরক্ষিত আরএনজির ক্ষেত্রেও এটি ঘটবে যদি আপনি এটি দীর্ঘকাল চালিত হন।
ব্যবহারকারী 2357112

@ ব্যবহারকারী 2357112, বিযুক্তি প্রাসঙ্গিক কারণ প্রশ্নটির অভিন্নতার প্রয়োজন, ছোট সংখ্যার সাথে একটি ছোট পক্ষপাত নয়। আমার মতে এই উত্তরটি আন্ডারহেনডিকে প্রকাশ করে: প্রথম নজরে স্বচ্ছভাবে সঠিক বলে মনে হচ্ছে এমন একটি স্ট্যান্ডার্ড লাইব্রেরির ইচ্ছাকৃতভাবে ব্যবহার কিন্তু বাস্তবে এটি তার নকশা প্যারামিটারের বাইরে নিয়ে যায়।
পিটার টেলর

যদিও খুব ভাল প্রতিটি আরএনজি ছাড়ার জিনিসটি করে does এটি বিশেষ কিছু নয়। আপনি এই উত্তরটি আক্ষরিকভাবে কোনও সিউডোরোডম নম্বর জেনারেটরের সাথে ব্যবহার করতে পারতেন, কারণ যদি কোনও আরএনজি 1) এর পিরিয়ড থাকে এবং 2) একক সময়ের মধ্যে 1 টির বেশি সংখ্যক সংখ্যা তৈরি করতে পারে তবে আরও একটি সংখ্যা প্রদর্শিত হবে অন্যান্য সংখ্যার তুলনায়, সামান্য গণনা যুক্তি দ্বারা পরবর্তী সময়কালে এটি যত কম প্রদর্শিত হবে।
ব্যবহারকারী 2357112

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

0

চুনি

বর্তমানে কেবল ডি 6 সমর্থন করে, পরে ডি 20 সমর্থন যোগ করবে ...

দেখুন এবং দেখুন - এই dices কদর্য!

# first idea was to create 6 super cool dices just by copy&paste
# -> each dice holds its number at the beginning of the array
# -> we don't need all of them now, so we comment them out
dice0 = %w[[[[[[[[[ 0 . : :. :: ::. ::: ]]]]]]]]
#dice1 = %w[[[[[[[ 1 : . :. ::. :: ::: ]]]]]]]
#dice2 = %w[[[[[[ 2 . : :. :: ::. ::: ]]]]]]
#dice3 = %w[[[[[[ 3 : . :. ::. :: ::: ]]]]]]]
#dice4 = %w[[[[[[[ 4 . : :. :: ::: ::. ]]]]]]]
#dice5 = %w[[[[[[[[ 5 . : :. :: ::. ::: ]]]]]]]]]

# and hey, those dices are almost ascii art ;)

# well, let's just create a standard dice
# -> get rid of the number at the beginning
# -> then sort (maybe we need that later due to the
#    currently unused dices being unsorted)
dice = dice0.select!{|e| /[:.]+/ === e}.sort

def roll(d)
  # rolling is easy
  # -> use size instead of hardcoded number,
  #   maybe we'll have other dices later
  d.slice!(rand(d.size - 1))
end

# and here you have 8 very underhanded dices!
dices = [dice]*8

# roll like a champion
roll(dices[0])
...

আমি কোনও "গর্ভপাত" যুক্ত করতে চাইলে সেখানে রুবি 2 "কোথাও RUBY_VERSION <" 2 "'লাগছে, যেন আপনি এটি পূর্ববর্তী সংস্করণগুলিতে চালান এটি কৌতুকটি নষ্ট করে
বাজরঘ

0

Haskell,

অন্য এলোমেলো জিনিস তৈরি করতে একটি এলোমেলো জিনিস ব্যবহার করুন: এক্ষেত্রে, পাশা নিক্ষেপ উত্পন্ন করতে কার্ডগুলিকে শাফল করুন।

import System.Environment
import System.Random
import Data.Array.IO
import Control.Monad
-- make random dice from random cards
suit c=map (\(a,b)->[a,b])$zip "A23456789TJQK" (repeat c)
deck=concatMap(\s->suit s) "♠♥♦♣"
-- just like casinos, use more decks for extra randomness
decks=concat$take 8$repeat deck
-- shuffle the cards
shuffle :: [a] -> IO [a]
shuffle xs = do
        ar <- newArray n xs
        forM [1..n] $ \i -> do
            j <- randomRIO (i,n)
            vi <- readArray ar i
            vj <- readArray ar j
            writeArray ar j vi
            return vj
  where
    n = length xs
    newArray :: Int -> [a] -> IO (IOArray Int a)
    newArray n xs =  newListArray (1,n) xs
-- convert a card to a die, by counting along the original deck
-- then taking mod (faces). If we don't have enough cards to make
-- a full set of faces, assign the 'extra' cards a value of 0
card2die faces card=
  let index=(head[i|(i,c)<-zip[0..]deck,c==card]) in
  if (index > (length deck-(length deck`mod`faces)))
  then 0
  else (index`mod`faces)+1
main=
  do
    args <- getArgs
    let faces = read (args!!0)
    -- throw away cards we can't map to die faces
    cards<-shuffle$filter (\card->card2die faces card/=0) decks
    mapM_ (\card->putStrLn (card++" -> "++(show (card2die faces card)))) cards

একটি যুক্তি নেয়, ডাইতে মুখের সংখ্যা। আউটপুট এর মত:

./cards 20|head
2♦ -> 8
7♥ -> 20
J♦ -> 17
6♥ -> 19
9♥ -> 2
8♥ -> 1
5♥ -> 18
4♠ -> 4
Q♥ -> 5
2♣ -> 1

... এবং তাই সমস্ত কার্ডের জন্য (বিচ্ছিন্নতা মুদ্রিত হয় না)। অবশ্যম্ভাবী?

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