aboutsummaryrefslogtreecommitdiff
path: root/challenge-124/james-smith/php/ch-2.php
blob: 2a888e40ee53f9a2e53d8162d19712459003947c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

echo match_teams([1,2,3,4,5,6,7,8,9,10]);
echo match_teams([1,2,3,4,5,6,7,8,9]);
echo match_teams([1,1,1,1,1,1,3,1,10]);

function match_teams( $teams ) {
  $d = array_shift( $teams );
  $bt =[1e99];
  separate( 1 + floor( sizeof($teams)/2 ), [$d], [], $d, $bt, $teams );
  return sprintf( "T1: [%s]; T2: [%s]; Diff %d\n",
    implode( ' ', $bt[1] ), implode( ' ', $bt[2] ), $bt[0] );
}

function separate( $m, $t1, $t2, $d, &$b, $w ) { // & in front of $b as pass by reference!
  if(!sizeof($w)) return ( $b[0]>abs($d) ) && ( $b = [abs($d),$t1,$t2] );
  $n = array_shift( $w );
  if( sizeof($t1)<$m ) separate( $m, array_merge($t1,[$n]), $t2, $d+$n, $b, $w );
  if( sizeof($t2)<$m ) separate( $m, $t1, array_merge($t2,[$n]), $d-$n, $b, $w );
}