1 Востаннє редагувалося Patron (14.09.2012 16:55:02)

Тема: Задачка на трієчку

Хочу поділитися невеличкою задачкою котру мені недавно запропонували вирішити. Отже є квадратна матриця (може бути і не квадратна):

<?php 
    $matrix = array(
    array(1,2,3),
    array(4,5,6),
    array(7,8,9)
    );
?>

Потрібно написати функцію яка конвертує матрицю так, щоб у вихідній матриці усі діагональні елементи (діагональ - top left to bottom right) були сумою усіх інших елементів поточного ряду матриці. Іншими словами, попередня матриця повинна стати такою:

<?php 
    $newMatrix = array(
    array(5,2,3),
    array(4,10,6),
    array(7,8,15)
    );
?>
Подякували: Replace1

2

Re: Задачка на трієчку

Нагадує задачі по СДА :)

3

Re: Задачка на трієчку

мало програмістів на форумі( активних десь 3-5 людей(

4

Re: Задачка на трієчку

Програмісти ліниві.. =)

5

Re: Задачка на трієчку

Python-програмісти супер-ліниві:

def sdiag(x):
    def cs(p, r):
        r[p] = sum(r)
    [cs(*a) for a in enumerate(x)]
Подякували: Replace1

6 Востаннє редагувалося Patron (14.09.2012 20:15:47)

Re: Задачка на трієчку

bunyk написав:

Python-програмісти супер-ліниві:

def sdiag(x):
    def cs(p, r):
        r[p] = sum(r)
    [cs(*a) for a in enumerate(x)]

Python якийсь надто високорівневий, так навіть не цікаво))) А в пітоні немає функції типу createSite або makeMoney?)
п.с. Я не наїжджаю на Python, просто він мені здається дивним через те що я його не знаю

Подякували: Replace1

7

Re: Задачка на трієчку

Patron написав:

А в пітоні немає функції типу createSite або makeMoney?)

В цих функцій забагато параметрів, що складно. А складно - це не Python-way, тому їх і не включили в стандартну бібліотеку. :)

А то що я там написав - нормальні люди не пишуть. Без збочень воно виглядатиме десь так:

def diagonal_sum(x):
    def compute_sum(pos, row):
        row[pos] = sum(row)

    for num, row in enumerate(x):
        compute_sum(num, row)

8

Re: Задачка на трієчку

Але я дибіл. От до чого доводить бажання ви*бнутись.

Найбільш прямолінійний варіант - найбільш простий:

def diagonal_sum(x):
    for num, row in enumerate(x):
        row[num] = sum(row)

9

Re: Задачка на трієчку

Якраз хотів написати, що compute_sum є заявою :)

10 Востаннє редагувалося Replace (14.09.2012 22:09:38)

Re: Задачка на трієчку

Новачкам не дивитись :)

Код на php

[code=php]function diagonal_sum(&$m) {
   for ($i = 0; $i < count($m); $i++)
      $m[$i][$i] = array_sum($m[$i]) - $m[$i][$i];
}[/code]


bunyk, більш правильно так:
[code=py]def diagonal_sum(x):
    for num, row in enumerate(x):
        row[num] = sum(row) - row[num]
[/code]

Подякували: Patron, Чайник, leofun013

11

Re: Задачка на трієчку

Я б так написав:

function diagonal_sum(&$m) {
   for ($i = 0; $i < count($m); $i++)
   {
       $m[$i][$i]=0;
       $m[$i][$i] = array_sum($m[$i]);
   }
}
Подякували: Patron, bodyanua2