JSFiddle - React, Tailwind, and code Playground
JavaScript
// [0][0], [1][0], [1][1], [2][0], [2][1], [2][2], …
for($i=0; $i<count($n_arr); $i++)
{
for($k=0; $k<$rowlimit; $k++)
{
if($laufer<count($n_arr))
{
$fieldvalue = $n_arr[$laufer];
// if not a number then empty
if(!preg_match('/\\d/', $fieldvalue))
{
$fieldvalue = null;
}
$multi[$i][$k] = $fieldvalue;
$laufer++;
}
}
$rowlimit++;
}
// remember the array fields holding the solutions
$solutionids = [];
// var_dump($multi);
$linecount = count($multi);
// all fields we need with values
$valuefields_needed = $linecount*($linecount + 1) / 2;
// non empty fields
$valuefields_count = 0;
while($valuefields_count < $valuefields_needed)
{
$valuefields_count = 0;
for($i=0; $i<$linecount; $i++)
{
$valuefields_count += count( array_filter($multi[$i]) );
}
// var_dump($valuefields_count.' / '.$valuefields_needed);
// now comes the tough part, go over multiarray and find the fields for possible additions
for($i=0; $i<$linecount-1; $i++)
{
// go along fields in line
for($k=0; $k<=$i; $k++)
{
// check tripel that there are two values set
if( count($multi[$i][$k]) + count($multi[$i+1][$k]) + count($multi[$i+1][$k+1]) == 2 )
{
// var_dump('calculatable: ' $i.' | '.$k);
if(count($multi[$i][$k]) + count($multi[$i+1][$k]) == 2)
{
// set value x = x + N
// $multi[$i+1][$k+1] = $multi[$i][$k].' - '.$multi[$i+1][$k];
$multi[$i+1][$k+1] = math_fractions_addsub($multi[$i][$k], $multi[$i+1][$k], '-');
// var_dump('A: '.$multi[$i+1][$k+1]);
// remember index of solution for single array from [$i+1][$k+1]
$fieldcount_prev = ($i+1) * ($i+1+1) / 2;
$solutionids[] = $fieldcount_prev + $k+1;
}
else if(count($multi[$i][$k]) + count($multi[$i+1][$k+1]) == 2)
{
// set value x = N + x
// $multi[$i+1][$k] = $multi[$i][$k].' - '.$multi[$i+1][$k+1];
$multi[$i+1][$k] = math_fractions_addsub($multi[$i][$k], $multi[$i+1][$k+1], '-');
// var_dump('B:...