Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How do you calculate %xHKO?
#20
Okay I went to Wikipedia's page on Dice and found an algorithm to calculate the odds of getting a certain sum with i s-sided dice. Wrote a Perl script to test it.

[Image: distt.png]
95% means you'll be doing that at least that number 95% of the time. So if it says 95% = 100, you can 95% 1hko anything with 100 HP.

Only problem is that it's massively recursive so that it takes forever to calculate anything with more than 3 dice, and that's on 2-digit ranges. Does not work at all for large ranges.

Here's the code:
Code:
#!usr/bin/perl

use strict;
use warnings;

die "Usage: $0 min max hits %dmg\n" if (@ARGV != 4);

#main
my $sides = $ARGV[1] - $ARGV[0] + 1;
my $dice = $ARGV[2];
my $offset_add = ($ARGV[0] - 1);
my $offset_mult = $ARGV[3];
my $poss = &power($sides, $dice);
my $sum = 0;
my %distr;
my @checkpoints = qw(100 095 075 050 025 005 001);
my $counter = 0;

for (my $i = $dice; $i <= $sides*$dice; $i++)
{
    if (100*$sum/$poss >= 100 - $checkpoints[$counter])
    {
        $distr{$checkpoints[$counter]} = $i;
        $counter++; #find next distribution checkpoint
        last if ($counter >= @checkpoints);
    }
    $sum += &recf($sides, $dice, $i);
}

print "Distribution:\n",
foreach my $key (sort keys %distr)
{
    my $vl = ($distr{$key} + $offset_add*$dice) * $offset_mult/100;
    printf "%3d%% = %d\n", $key, $vl;
}


sub recf #(sds, ithd, num)
#Recursive function to find possible ways to roll a particular number. algorithm is
#F[sds,ithd](num) = sum(F[sds,1](n)*F[sds,i-1](num-n), n) for all integer n
#base case is f[sds,1](num) = 1 if 1 <= num <= sds, 0 else
{
    my ($sds, $ithd, $num) = @_;
    return ($num >= 1 && $num <= $sds)? 1 : 0 if ($ithd == 1);

    my $total = 0;
    for (my $i = 1; $i <= $sds; $i++)
    {
        my $j = $num - $i;
        $total += &recf($sds, 1, $i) * &recf($sds, $ithd - 1, $j);
    }
    return $total;
}

sub power #(base, expo)
{
    my ($base, $expo) = @_;
    if ($expo == 0) { return 1; }
    elsif ($expo % 2 == 1) { return $base * &power($base, $expo - 1); }
    else
    {
        my $x = &power($base, $expo/2);
        return $x*$x;
    }
}
Reply


Messages In This Thread
How do you calculate %xHKO? - by Dusk - 2009-08-14, 11:40 AM
How do you calculate %xHKO? - by Kortestanov - 2009-08-14, 12:45 PM
How do you calculate %xHKO? - by Shidoshi - 2009-08-14, 01:59 PM
How do you calculate %xHKO? - by Stereo - 2009-08-14, 02:00 PM
How do you calculate %xHKO? - by KaidaTan - 2009-08-14, 05:29 PM
How do you calculate %xHKO? - by Russt - 2009-08-14, 05:41 PM
How do you calculate %xHKO? - by modular - 2009-08-14, 06:59 PM
How do you calculate %xHKO? - by Russt - 2009-08-14, 07:01 PM
How do you calculate %xHKO? - by Shidoshi - 2009-08-14, 08:45 PM
How do you calculate %xHKO? - by singularity - 2009-08-15, 06:23 AM
How do you calculate %xHKO? - by Russt - 2009-08-15, 12:56 PM
How do you calculate %xHKO? - by Shady - 2009-08-15, 04:30 PM
How do you calculate %xHKO? - by singularity - 2009-08-18, 12:19 AM
How do you calculate %xHKO? - by Stereo - 2009-08-18, 12:29 AM
How do you calculate %xHKO? - by Russt - 2009-08-18, 12:39 AM
How do you calculate %xHKO? - by Dusk - 2009-08-18, 12:57 AM
How do you calculate %xHKO? - by modular - 2009-08-18, 12:57 AM
How do you calculate %xHKO? - by Russt - 2009-08-18, 01:03 AM
How do you calculate %xHKO? - by Dusk - 2009-08-18, 01:21 AM
How do you calculate %xHKO? - by Dusk - 2009-08-23, 01:45 PM
How do you calculate %xHKO? - by Russt - 2009-08-23, 01:56 PM
How do you calculate %xHKO? - by singularity - 2009-08-24, 10:38 PM
How do you calculate %xHKO? - by Russt - 2009-08-24, 10:51 PM
How do you calculate %xHKO? - by Noah - 2009-08-26, 04:38 PM
How do you calculate %xHKO? - by rainbowBean - 2009-12-14, 08:22 AM
How do you calculate %xHKO? - by KaidaTan - 2009-12-14, 09:07 AM
How do you calculate %xHKO? - by Stereo - 2009-12-14, 12:19 PM
How do you calculate %xHKO? - by KaidaTan - 2009-12-14, 04:19 PM
How do you calculate %xHKO? - by shouri - 2009-12-14, 04:42 PM
How do you calculate %xHKO? - by KaidaTan - 2009-12-14, 05:02 PM
How do you calculate %xHKO? - by Russt - 2009-12-14, 08:46 PM
How do you calculate %xHKO? - by shouri - 2009-12-14, 08:56 PM
How do you calculate %xHKO? - by Noah - 2009-12-14, 09:32 PM
How do you calculate %xHKO? - by Stereo - 2009-12-14, 09:33 PM
How do you calculate %xHKO? - by Russt - 2009-12-14, 09:40 PM
How do you calculate %xHKO? - by KaidaTan - 2009-12-14, 10:32 PM
How do you calculate %xHKO? - by rainbowBean - 2009-12-14, 11:01 PM
How do you calculate %xHKO? - by Russt - 2009-12-15, 03:50 AM
How do you calculate %xHKO? - by KaidaTan - 2009-12-15, 03:54 AM
How do you calculate %xHKO? - by Stereo - 2009-12-15, 03:51 PM
How do you calculate %xHKO? - by Noah - 2009-12-16, 09:28 PM
How do you calculate %xHKO? - by Stereo - 2010-01-18, 09:17 PM
How do you calculate %xHKO? - by Jellyflower - 2010-02-23, 08:30 PM
How do you calculate %xHKO? - by Jellyflower - 2010-02-23, 10:18 PM
How do you calculate %xHKO? - by KaidaTan - 2010-02-23, 10:34 PM
How do you calculate %xHKO? - by Russt - 2010-02-23, 10:42 PM
How do you calculate %xHKO? - by Noah - 2010-03-06, 06:51 AM
How do you calculate %xHKO? - by Russt - 2010-03-06, 09:08 AM
How do you calculate %xHKO? - by Shidoshi - 2010-03-06, 10:40 AM
How do you calculate %xHKO? - by Russt - 2010-03-06, 10:50 AM
How do you calculate %xHKO? - by Stereo - 2010-03-06, 11:42 AM
How do you calculate %xHKO? - by Noah - 2010-03-06, 12:39 PM
How do you calculate %xHKO? - by Russt - 2010-03-06, 02:57 PM
How do you calculate %xHKO? - by Noah - 2010-03-08, 12:00 PM
How do you calculate %xHKO? - by Kortestanov - 2010-05-03, 08:39 AM
How do you calculate %xHKO? - by Nikkey - 2010-05-03, 12:11 PM
How do you calculate %xHKO? - by Kortestanov - 2010-05-03, 02:16 PM
How do you calculate %xHKO? - by KaidaTan - 2010-05-03, 02:24 PM
How do you calculate %xHKO? - by shouri - 2010-05-03, 02:24 PM
How do you calculate %xHKO? - by Nikkey - 2010-05-03, 02:56 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)