Мне было лень руками подбирать сочетания качества на 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)); }