• + 0 comments

    PHP solution

    <?php
    function calcSum(array $lines) {
        $getLineSum = static function(array $values, bool $isAll=true) {
            $lineSum=0;
            foreach ($values as $key=>$value) {
                if ($isAll) $lineSum+=$value;
                elseif($key===1) $lineSum+=$value;
            }
            return $lineSum;
        };
        $sum=0;
        foreach($lines as $key=>$line) {
            $key==1 ? $sum+=$getLineSum($line,false) : $sum+=$getLineSum($line);
        }
        return $sum;
    }
    
    function getHourglass(int $offset, array $lines) {
        $res=[];
        foreach($lines as $key=>$line) {
            for($i=$offset;$i<$offset+4;$i++) {
                if (!isset($line[$i])) break;
                $result = array_slice($line,$offset,3);
                if (count($result)!==3) continue;
                $res[$key]=$result;
            }
        }
        return $res;
    }
    
    function hourglassSum($arr) {
        $max=null;
        for($i=0;$i<count($arr);$i++) {
            if (!isset($arr[$i+1])||!isset($arr[$i+2])) break;
            
            $line1=$arr[$i];
            $line2=$arr[$i+1];
            $line3=$arr[$i+2];
            
            for($j=0;$j<count($line1);$j++) {
                $hg=getHourglass($j,[$line1,$line2,$line3]);
                if (count($hg)!==3) continue;
                $sum=calcSum($hg);
                ////Uncomment for debug
                // print('HG:');
                // foreach($hg as $key=>$v) {
                //     print(sprintf("%s:(%s), ",$key,implode(',',$v)));
                // }
                // print("\n");
                // print(sprintf("sum=%s max=%s\n",$sum,$max));
                $max=max($sum,$max);
            }
        }
        return $max;
    }