5人対象の諸刃の剣によって攻撃力1位/2位になる確率

5人対象の諸刃の剣によって攻撃力1位/2位になる確率

5人対象の諸刃の剣によって攻撃力1位/2位になる確率

Table of Contents

諸刃の剣の対象を、バフの効果によって攻撃力が1位/2位になりうる攻撃力上位と、2位にすらなりえない攻撃力下位に分ける。それを用いて諸々の確率を計算する。1

1 結果

Table 1: 下位が0人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 100% 100% 0%              
4 100% 100% 0% 0%            
5 100% 100% 0% 0% 0%          
6 83.3% 83.3% 33.3% 0% 0% 0%        
7 71.4% 71.4% 42.9% 14.3% 0% 0% 0%      
8 62.5% 62.5% 44.6% 23.2% 7.14% 0% 0% 0%    
9 55.6% 55.6% 43.7% 27.8% 13.5% 3.97% 0% 0% 0%  
10 50.0% 50.0% 41.7% 29.8% 17.9% 8.33% 2.38% 0% 0% 0%

Table 2: 下位が1人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 100% 100% 0%              
4 100% 100% 0% 0%            
5 83.3% 83.3% 33.3% 0% 0%          
6 71.4% 71.4% 42.9% 14.3% 0% 0%        
7 62.5% 62.5% 44.6% 23.2% 7.14% 0% 0%      
8 55.6% 55.6% 43.7% 27.8% 13.5% 3.97% 0% 0%    
9 50.0% 50.0% 41.7% 29.8% 17.9% 8.33% 2.38% 0% 0%  
10 45.5% 45.5% 39.4% 30.3% 20.6% 11.9% 5.41% 1.52% 0% 0%

Table 3: 下位が2人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 100% 100% 0%              
4 83.3% 83.3% 33.3% 0%            
5 71.4% 71.4% 42.9% 14.3% 0%          
6 62.5% 62.5% 44.6% 23.2% 7.14% 0%        
7 55.6% 55.6% 43.7% 27.8% 13.5% 3.97% 0%      
8 50.0% 50.0% 41.7% 29.8% 17.9% 8.33% 2.38% 0%    
9 45.5% 45.5% 39.4% 30.3% 20.6% 11.9% 5.41% 1.52% 0%  
10 41.7% 41.7% 37.1% 30.1% 22.1% 14.5% 8.21% 3.66% 1.01% 0%

Table 4: 下位が3人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 83.3% 83.3% 33.3%              
4 71.4% 71.4% 42.9% 14.3%            
5 62.5% 62.5% 44.6% 23.2% 7.14%          
6 55.6% 55.6% 43.7% 27.8% 13.5% 3.97%        
7 50.0% 50.0% 41.7% 29.8% 17.9% 8.33% 2.38%      
8 45.5% 45.5% 39.4% 30.3% 20.6% 11.9% 5.41% 1.52%    
9 41.7% 41.7% 37.1% 30.1% 22.1% 14.5% 8.21% 3.66% 1.01%  
10 38.5% 38.5% 35.0% 29.4% 22.8% 16.3% 10.5% 5.83% 2.56% 0.699%

Table 5: 下位が4人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 81.0% 76.2% 42.9%              
4 67.9% 64.3% 44.6% 23.2%            
5 58.7% 56.3% 43.7% 27.8% 13.5%          
6 52.0% 50.4% 41.7% 29.8% 17.9% 8.33%        
7 46.8% 45.7% 39.4% 30.3% 20.6% 11.9% 5.41%      
8 42.6% 41.8% 37.1% 30.1% 22.1% 14.5% 8.21% 3.66%    
9 39.1% 38.5% 35.0% 29.4% 22.8% 16.3% 10.5% 5.83% 2.56%  
10 36.2% 35.8% 33.0% 28.5% 23.1% 17.5% 12.2% 7.74% 4.25% 1.85%

Table 6: 下位が5人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 82.1% 73.2% 44.6%              
4 68.3% 60.3% 43.7% 27.8%            
5 58.3% 52.4% 41.7% 29.8% 17.9%          
6 51.1% 46.8% 39.4% 30.3% 20.6% 11.9%        
7 45.6% 42.4% 37.1% 30.1% 22.1% 14.5% 8.21%      
8 41.3% 38.9% 35.0% 29.4% 22.8% 16.3% 10.5% 5.83%    
9 37.8% 36.0% 33.0% 28.5% 23.1% 17.5% 12.2% 7.74% 4.25%  
10 34.9% 33.5% 31.1% 27.5% 23.0% 18.2% 13.5% 9.32% 5.83% 3.16%

Table 7: 下位が6人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 84.1% 72.2% 43.7%              
4 70.2% 58.3% 41.7% 29.8%            
5 59.7% 50.0% 39.4% 30.3% 20.6%          
6 51.9% 44.3% 37.1% 30.1% 22.1% 14.5%        
7 45.9% 40.1% 35.0% 29.4% 22.8% 16.3% 10.5%      
8 41.3% 36.8% 33.0% 28.5% 23.1% 17.5% 12.2% 7.74%    
9 37.5% 34.0% 31.1% 27.5% 23.0% 18.2% 13.5% 9.32% 5.83%  
10 34.5% 31.7% 29.5% 26.4% 22.7% 18.5% 14.4% 10.6% 7.21% 4.46%

Table 8: 下位が7人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 86.1% 72.2% 41.7%              
4 72.7% 57.6% 39.4% 30.3%            
5 62.0% 48.7% 37.1% 30.1% 22.1%          
6 53.7% 42.8% 35.0% 29.4% 22.8% 16.3%        
7 47.3% 38.5% 33.0% 28.5% 23.1% 17.5% 12.2%      
8 42.2% 35.2% 31.1% 27.5% 23.0% 18.2% 13.5% 9.32%    
9 38.1% 32.5% 29.5% 26.4% 22.7% 18.5% 14.4% 10.6% 7.21%  
10 34.8% 30.3% 27.9% 25.4% 22.2% 18.7% 15.0% 11.5% 8.37% 5.66%

Table 9: 下位が8人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 87.9% 72.7% 39.4%              
4 75.3% 57.6% 37.1% 30.1%            
5 64.6% 48.3% 35.0% 29.4% 22.8%          
6 56.0% 42.0% 33.0% 28.5% 23.1% 17.5%        
7 49.2% 37.5% 31.1% 27.5% 23.0% 18.2% 13.5%      
8 43.8% 34.1% 29.5% 26.4% 22.7% 18.5% 14.4% 10.6%    
9 39.4% 31.4% 27.9% 25.4% 22.2% 18.7% 15.0% 11.5% 8.37%  
10 35.8% 29.2% 26.6% 24.4% 21.7% 18.6% 15.4% 12.3% 9.31% 6.70%

Table 10: 下位が9人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 89.4% 73.5% 37.1%              
4 77.6% 58.0% 35.0% 29.4%            
5 67.2% 48.3% 33.0% 28.5% 23.1%          
6 58.5% 41.7% 31.1% 27.5% 23.0% 18.2%        
7 51.4% 37.0% 29.5% 26.4% 22.7% 18.5% 14.4%      
8 45.7% 33.5% 27.9% 25.4% 22.2% 18.7% 15.0% 11.5%    
9 41.0% 30.7% 26.6% 24.4% 21.7% 18.6% 15.4% 12.3% 9.31%  
10 37.2% 28.5% 25.3% 23.5% 21.1% 18.4% 15.6% 12.8% 10.1% 7.59%

Table 11: 下位が10人の場合に攻撃力i番目が1位/2位になる確率
上位の人数 1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目
3 90.7% 74.4% 35.0%              
4 79.8% 58.8% 33.0% 28.5%            
5 69.7% 48.7% 31.1% 27.5% 23.0%          
6 61.1% 41.8% 29.5% 26.4% 22.7% 18.5%        
7 53.8% 36.9% 27.9% 25.4% 22.2% 18.7% 15.0%      
8 47.9% 33.2% 26.6% 24.4% 21.7% 18.6% 15.4% 12.3%    
9 42.9% 30.3% 25.3% 23.5% 21.1% 18.4% 15.6% 12.8% 10.1%  
10 38.8% 28.0% 24.1% 22.6% 20.5% 18.2% 15.7% 13.1% 10.6% 8.32%

1.1 コード2

import Text.Printf

-- 諸刃の剣によって順位が1位/2位になりうるm人と、2位にすらなりえないn人がいる

fac 0 = 1
fac n = n * fac (n - 1)

p `c` q
  | p < 0 = 0
  | q < 0 = 0
  | p < q = 0
  | p >= q = fac p / fac q / fac (p - q)

p0 0 = 1
p0 1 = 1
p0 i = 0

-- 上位m人下位n人の場合に攻撃力i番目が1位/2位になる確率
p m n i =
  let g = i
      s = m - 1 - i
  in (sum [ g `c` a * s `c` b * n `c` (4 - a - b) | a <- [0..1], b <- [0..4-a] ] + (if i == 0 then s `c` 1 * n `c` 4 else 0) + (if i <= 1 then n `c` 5 else 0) + (if i == 1 then g `c` 1 * n `c` 4 else 0)) / (m + n) `c` 5 -- i番目を選んだ上で、自分より攻撃力の高い上位をa個、自分より攻撃力の低い上位をb個、下位を4-a-b個選ぶ。

q m n i
  | m + n <= 4 = p0 i
  | otherwise = p m n i

上位m人下位n人の場合の確率 m n = [ q m n i | i <- [0..m-1]]

table rm n = [ 上位m人下位n人の場合の確率 m n | m <- rm ]

prin x 
  | x >= 100 = printf "%.0f" x
  | x >= 10 = printf "%.1f" x
  | x >= 1 = printf "%.2f" x
  | x >= 0.1 = printf "%.3f" x
  | otherwise = printf "%.0f" x

toCSV rm rn = mapM g rn
  where
    g n = mapM f (table rm n) >> putStrLn ""
    f xs = mapM (\x -> prin (100 * x) >> putStr "%, ") xs >> putStrLn ""

-- *Main> toCSV [3..10] [0..10]
-- ...

Footnotes:

1

なお、2位にはなれるが1位にはなれないようなケースは考察対象外。

2

Haskellで書かれてます。

Created: 2019-09-07 土 08:31

Emacs 25.2.1 (Org mode 8.2.10)

Validate

Comments