Мне было лень руками подбирать сочетания качества на 40, поэтому я написал скрипт, который перебирает все варианты и выдает те, что дают нужное число в итоге сложения.
Скрипт для path of exile
03.04.2018
poe-calc.php (Download)
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
class soMain
{
protected $_aIn = [];
protected $_aResult= [];
protected function _go($aPos, $iLevel)
{
/*echo '<pre>';
print_r(implode(',',$aPos));
echo '</pre>';*/
$iNextLevel = $iLevel+1;
$aTmp = [];
$iSumm1 = 0;
foreach($aPos as $iPos)
{
$iSumm1 += $this->_aIn[$iPos];
$aTmp[] = $this->_aIn[$iPos];
}
foreach($this->_aIn as $iPos => $iVal)
{
if(!in_array($iPos, $aPos))
{
$iSumm2 = $iSumm1 + $iVal;
if($iSumm2 > 40)
{
// do nothing
}
else if($iSumm2 == 40)
{
$this->_aResult[] = implode(',',array_merge($aTmp, [$iVal]));
}
else // $iSumm2 < 40
{
$aSubPos = $aPos;
$aSubPos[] = $iPos;
$this->_go($aSubPos, $iNextLevel);
}
}
}
}
public function go($aIn)
{
foreach($aIn as &$Val)
{
$Val = (int) $Val;
}
rsort($aIn);
$this->_aIn = $aIn;
echo 'IN:<pre>';
print_r($this->_aIn);
echo '</pre>';
foreach($this->_aIn as $iPos => $iVal)
{
$this->_go([$iPos], 0);
}
echo 'Result:<pre>';
print_r($this->_aResult);
echo '</pre>';
}
}
$sLine = isset($_REQUEST['line'])?$_REQUEST['line']:'';
?>
<form action="">
<input type="text" name="line" value="<?=$sLine?>" />
<br/>
<button>Go</button>
</form>
<?
if($sLine)
{
$oMain = new soMain();
//$oMain->go([7,9,9,6,17,8,10,18]);
$oMain->go(explode(',', $sLine));
}