Oblicz iloczyny wszystkich wartości w tablicy Daily Coding Problem: Problem #2 [Hard]

Wpis z 20.02.2023, autor Andrzej Mazur  ·  Code in sandbox   ·  Subskrybuj LekcjePHP na Youtube


Dla danej tablicy liczb całkowitych, zwróć nową tablicę, aby każdy element o indeksie i nowej tablicy był iloczynem wszystkich liczb w oryginalnej tablicy oprócz tej o i.


Treść zadania:

Dla danej tablicy liczb całkowitych, zwróć nową tablicę, aby każdy element o indeksie i nowej tablicy był iloczynem wszystkich liczb w oryginalnej tablicy oprócz tej o i. Na przykład, jeśli naszym wejściem było [1, 2, 3, 4, 5], oczekiwanym wynikiem byłoby [120, 60, 40, 30, 24]. Jeśli naszym wejściem było [3, 2, 1], oczekiwanym wyjściem byłoby [2, 3, 6]. Dalsza część: co jeśli nie możesz użyć dzielenia?

(orginał ang.) Given an array of integers, return a new array such that each element at index i of the new array is the product of all the numbers in the original array except the one at i. For example, if our input was [1, 2, 3, 4, 5], the expected output would be [120, 60, 40, 30, 24]. If our input was [3, 2, 1], the expected output would be [2, 3, 6].

Follow-up: what if you can't use division?

Wstępne przemyślenia

Nieco zdziwiło mnie oznaczenie tego zadania jako [Hard], bo jego poziom jest co najwyżej jeden krok, od zadań podstawowych.

Jedyna trudność o zbadanie warunków brzegowych. I pojawienie są zera w danych wejściowych!

Kod źródłowy

$a = [12345];   // => [120, 60, 40, 30, 24]
$b = [321]; // => [2, 3, 6]

function productOfArrElements($a) {
    
$result = [];
    foreach (
$a as $v) {
        
$diff array_diff($a, [$v]);
        
$times array_product($diff);
        
$result[] = $times;
    }
    return 
$result;
}

$r productOfArrElements($a);
print_r($r);

$r productOfArrElements($b);
print_r($r);

Oczywiście całość można skrócić zapisując funkcję productOfArrElements() w postaci:

function productOfArrElements($a) {
    
$result = [];
    foreach (
$a as $v$result[] = array_product(array_diff($a, [$v]));
    return 
$result;
}

Materiał przygotował dla Was:
Andrzej EZNAWCA Mazur
Zapraszam na moje strony:
LekcjePHP.pl
Eznawca.pl