72760


# 前提条件

サンプルコードでは$Aが[1,3,5,7]と定義されていますが、これはあくまで一例で、$Aの要素の数は動的に変化します。  
また$A[]の値は1~1000までのint型とします。

# やりたいこと

$Aの要素数が変化しても、配列の隣り合う数を要素数が一つになるまで足し算したいです。  
図で表すと下記みたいな感じです。

[![画像の説明をここに入力](https://i.stack.imgur.com/kko9M.png)](https://i.stack.imgur.com/kko9M.png)

仮に$A[]に8が追加されてしまう場合、下記のサンプルコードだと要素数が残り２つになり、テストケースが通らなくなってしまいます。

## サンプルコード1

[code]

    <?php
    $A = [1, 3, 5, 7];
    // echo count($A);
    $one = [];
    for ($i = 0; $i < count($A) - 1; $i++) {
     // echo $A[$i] + $A[$i+1] . PHP_EOL;
     $one[] = $A[$i] + $A[$i + 1];
    }
    // print_r($one);
    
    $two = [];
    for ($i = 0; $i < count($one) - 1; $i++) {
     // echo $one[$i] + $one[$i+1] . PHP_EOL;
     $two[] = $one[$i] + $one[$i + 1];
    }
    // print_r($two);
    
    $three = [];
    for ($i = 0; $i < count($two) - 1; $i++) {
     // echo $two[$i] + $two[$i+1] . PHP_EOL;
     $three[] = $two[$i] + $two[$i + 1];
    }
    
    print_r($three);
    
[/code]

サンプルの結果

[code]

    Array
    (
        [0] => 32
    )
    
[/code]

# サンプルコード2

$A[]に８を追加した場合、

[code]

    $A = [1, 3, 5, 7, 8];
    
    // 以下全て同じなので省略
    
[/code]

結果 => forの数が足りず結果の要素数が２つになってしまう。サンプル２の結果を、サンプル１の結果を変えないまま32+47で79になるようにしたいです。

[code]

    Array
    (
        [0] => 32
        [1] => 47
    )
    
[/code]

この問題を解決するにはどうすればいいでしょうか？よろしくお願いします。


CC BY-SA 4.0
2020-12-19T08:13:17.313
72759
2020-12-19T10:58:12.557
2020-12-19T10:58:12.557
36424
36424
question
php
PHP どんなケースでも正常に通る配列の隣合う２つの数字の足し算を実装したい。


以下は配列の pairwise(隣同士の要素をペアにする)を取る方法です。

[code]

    <?php
    $A = [1, 3, 5, 7, 8];
    
    for($arr=$A;count($arr)>1;) {
      $arr = array_map(
        function($a, $b) {
          return $a + $b;
        }, array_slice($arr, 0, -1), array_slice($arr, 1));
    }
    
    print_r($arr);
    
    =>
    
    Array
    (
        [0] => 79
    )
    
[/code]


CC BY-SA 4.0
2020-12-19T09:34:47.180
72760
2020-12-19T09:34:47.180
72759
answer