1

Тема: обробка двовимірних масивів

добрий день, допоможіть будь ласка покращити код до завдання. Чи можна зробити це легшим шляхом?
Заповнити матрицю випадковими числами. Розмістити на головній діагоналі
суми елементів, які розміщені на діагоналях, перпендикулярних до головної.

from random import randint
m = int(input('Кількість рядків: '))
M = [[ randint(0, 20) for j in range(m)] for i in range(m)]
for i in range(m):
    print(M[i])
h = 2 #для індексу стовпців
k = 1 #лічильник для чогось 
l = []
h = 2 #лічильник для елементів діагоналей
p = 0 #для сум
g = 1 #для діагоналей
f = 0 #лічильник для сум 
s = 1 #і це тоже
for i in range (m-1): # шукає потрібні елементи
    while h<=(m-1):
        if m<=4: 
            l.append(M[i][h]+M[h][i])
        else:
            l.append(M[i][h])
            l.append(M[h][i])
        h+=2
    h = 2+k
    k+=1
print(l)
if m > 4 and m%2==0:
    while g<=(m-2): #елементи діагоналі
        f = 0
        p = 0
        if g>((m-2)/2): 
            s-=2
            while f<=s:
                p += l[0]
                l.pop(0)
                f+=1
        else:    
            while f<=s:
                p += l[0]
                l.pop(0)
                f+=1
            s+=2
        M[g][g]=p
        g+=1
elif m>4 and m%2 !=0:
     while g<=(m-2): #елементи діагоналі
        f = 0
        p = 0
        if g>(m//2):
            s-=4
            while f<=s:
                p += l[0]
                l.pop(0)
                f+=1
        else:    
            while f<=s:
                p += l[0]
                l.pop(0)
                f+=1
            s+=2
        M[g][g]=p
        print(M[g])
        g+=1
else:
    while g<=(m-2):
        M[g][g]=l[0]
        l.pop(0)
        g+=1
for i in range(m):
    print(M[i])

2

Re: обробка двовимірних масивів

Тут я вже вимагатиму, щоб пан frz це завантажив до ChatGPT. Хочу подивитися, як він мучитиметься.

Скажіть, от як ви узагалі до такого життя дійшли? Вам же треба лише для кожного діагонального елемента (цикл по i) знайти суми елементів на тій самій діагоналі (цикл по j). Два вкладені цикли for, ну може ще трохи виразів. А ви спершу збираєте елементи, потім ще з купою різних випадків їх розбираєте...

for i in range(m):
    #ось тут єдина хитрість - нам треба, щоб j було спершу 0, потім 1 і т.д. до середини матриці, а потім знову зменшувалося
    #це, вочевидь, буде щось на кшталт m/2-|m/2-i|, але бажано намалювати графік і трохи погратися цифрами
    #якщо не хочете - можете відстежувати у while, щоб i+j та i-j не перетнули межі 0 та m-1
    diagonal_length = (m-1-abs(m-1-2*i))//2
    for j in range(1,1+diagonal_length):
        M[i][i] += M[i+j][i-j] + M[i-j][i+j]

За бажання, внутрішній цикл можна загорнути в списковий вираз, на кшталт

M[i][i] += sum(M[i+j][i-j] + M[i-j][i+j] for j in range(1,1+(m-1-abs(m-1-2*i))//2))

Але це мені вже видається надто заплутаним.

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

3

Re: обробка двовимірних масивів

Прихований текст

Повернуся з прогулянки лісом, тоді. Незручно з телефону вкрай.

4

Re: обробка двовимірних масивів

GPT-4 написав:

Код заповнює матрицю випадковими числами та розміщує на головній діагоналі суми елементів, які розміщені на діагоналях, перпендикулярних до головної.

from random import randint

def print_matrix(matrix):
    for row in matrix:
        print(row)

m = int(input('Кількість рядків: '))

M = [[randint(0, 20) for j in range(m)] for i in range(m)]

print("Початкова матриця:")
print_matrix(M)

for i in range(1, m - 1):
    diag_sum = 0
    for j in range(m - i):
        diag_sum += M[j][j + i] + M[j + i][j]
    M[i][i] = diag_sum

print("Матриця з сумами елементів на діагоналях:")
print_matrix(M)

5

Re: обробка двовимірних масивів

GPT-4 написав:
M[j][j + i] + M[j + i][j]

Щось не дуже на діагоналі схоже

6

Re: обробка двовимірних масивів

GPT-4 написав:

Давайте продемонструємо приклад виконання коду для матриці розміром 5х5 та пояснимо результат.

Кількість рядків: 5

Припустимо, що випадковим чином була згенерована така матриця:

Початкова матриця:
[ 3,  7, 12, 19,  6]
[ 8,  4, 18,  5, 20]
[11,  2, 13,  1, 14]
[10, 17,  9, 15,  0]
[16, 21, 22, 23, 24]

Тепер ми обчислюємо суми елементів на діагоналях, перпендикулярних до головної, і записуємо їх на головну діагональ:

Матриця з сумами елементів на діагоналях:
[ 3,  7, 12, 19,  6]
[ 8, 49, 18,  5, 20]
[11,  2, 50,  1, 14]
[10, 17,  9, 46,  0]
[16, 21, 22, 23, 24]

Пояснення результату:

Діагональ, що проходить через елементи (0, 1), (1, 0) має суму 7 + 8 = 15. Це число ми записуємо на позицію (1, 1), отримуючи значення 49.
Діагональ, що проходить через елементи (0, 2), (1, 1), (2, 0) має суму 12 + 4 + 11 = 27. Це число ми записуємо на позицію (2, 2), отримуючи значення 50.
Діагональ, що проходить через елементи (0, 3), (1, 2), (2, 1), (3, 0) має суму 19 + 18 + 2 + 10 = 49. Це число ми записуємо на позицію (3, 3), отримуючи значення 46.
Оскільки наша матриця має непарний розмір, ми не обчислюємо суму для останньої діагоналі, яка проходить через елементи (0, 4), (1, 3), (2, 2), (3, 1), (4, 0).

7

Re: обробка двовимірних масивів

GPT-4 написав:

Моя вибачення, в поясненні вище була допущена помилка. Давайте розглянемо, як ми отримали значення 49 на позиції (1, 1) покроково:

Ми розглядаємо дві діагоналі, перпендикулярні до головної діагоналі, які проходять через елементи (0, 1) та (1, 0).
Перша діагональ містить елементи M[0][1] та M[1][0] зі значеннями 7 та 8 відповідно.
Друга діагональ містить елементи M[1][0] та M[0][1] зі значеннями 8 та 7 відповідно. Зверніть увагу, що ці елементи ті ж самі, що й для першої діагоналі, але у зворотному порядку.
Знаходжу суму елементів першої діагоналі: 7 + 8 = 15.
Знаходжу суму елементів другої діагоналі: 8 + 7 = 15.
Записую суму обох діагоналей на позицію (1, 1) головної діагоналі: 15 + 15 = 30.
Таким чином, на позиції (1, 1) має бути значення 30, а не 49, як було зазначено раніше.

8

Re: обробка двовимірних масивів

Прихований текст

Що не тема, один сплошний gpt4

9

Re: обробка двовимірних масивів

ChatGPT уже наздогнав людей, він теж може розповісти, як його код працював би, якби він працював :)

10

Re: обробка двовимірних масивів

koala написав:

ChatGPT уже наздогнав людей

Ні, поки одного прекрасного дня не відповість "я махав рішати твою задачу, давай пізніше, я тут втичу в мемасики"

11

Re: обробка двовимірних масивів

Chemist-i написав:
Прихований текст

Що не тема, один сплошний gpt4

А хто мене випитував "ну шо там, ну шо там". Я лише намагаюся знайти йому застосування після оплати. Допоміг мені пройти два рівні співбесіди, а далі б був поки без потреби, а "гроші заплачені" ж.

12

Re: обробка двовимірних масивів

frz написав:
Chemist-i написав:
Прихований текст

Що не тема, один сплошний gpt4

А хто мене випитував "ну шо там, ну шо там". Я лише намагаюся знайти йому застосування після оплати. Допоміг мені пройти два рівні співбесіди, а далі б був поки без потреби, а "гроші заплачені" ж.

Прихований текст

Я випитував, але мені цікаво порівняння версій, 3.5 вс 4. Те що він здатний рішати тупорилі завдання для студіків це вже всі зрозуміли. Чи навчилось воно адекватно рахувати? Бачити підконтексти (як от тут) і т.д.

13 Востаннє редагувалося Firefox is dead (12.04.2023 12:10:40)

Re: обробка двовимірних масивів

Chemist-i написав:
frz написав:
Chemist-i написав:
Прихований текст

Що не тема, один сплошний gpt4

А хто мене випитував "ну шо там, ну шо там". Я лише намагаюся знайти йому застосування після оплати. Допоміг мені пройти два рівні співбесіди, а далі б був поки без потреби, а "гроші заплачені" ж.

Прихований текст

Я випитував, але мені цікаво порівняння версій, 3.5 вс 4. Те що він здатний рішати тупорилі завдання для студіків це вже всі зрозуміли. Чи навчилось воно адекватно рахувати? Бачити підконтексти (як от тут) і т.д.

костильний запит через API (GPT-3.5) з деякими промтами дав таку відповідь:

GPT написав:

Я не маю жодної інформації про те, скільки книг залишилося у кімнаті після того, як ти прочитав 2. Тому, не можу точно відповісти на запитання. Якщо в кімнаті було 10 книг, інформації про їхню подальшу долю в умові немає, тому можна припустити, що в кімнаті все ще 10 книг

Подякували: Chemist-i1

14

Re: обробка двовимірних масивів

Firefox is dead,

Прихований текст

Як ви ті промпти використовуєте, бо мені в стандартному чаті від опенЕйАй пише 8 і всьо, поправляю, воно вибачається і каже все одно 8.

15

Re: обробка двовимірних масивів

Chemist-i написав:

Firefox is dead,

Прихований текст

Як ви ті промпти використовуєте, бо мені в стандартному чаті від опенЕйАй пише 8 і всьо, поправляю, воно вибачається і каже все одно 8.

магії тут немає

щодо промтів можна просто вказати:

уяви що тобі 33 роки. ти досить підкований в українській мові та логічних задачках які потребують аналітичного та мовного аналізу завдань, задачки можуть містити переносний смисл

і вона відповість

у кімнаті 10 книг, 2 було прочитано, скільки книг у кімнаті?

У кімнаті 10 книг.

якщо без промта:

у кімнаті 10 книг, 2 було прочитано, скільки книг у кімнаті?

У кімнаті 10 книг, але прочитано тільки 2. Щоб знайти кількість книг, які залишилися, потрібно відняти кількість прочитаних книг від загальної кількості книг:

10 книг - 2 прочитані книги = 8 книг

Отже, у кімнаті залишилось 8 книг.


надіюсь відповідь була корисною
повноцінні промти до API скину коли дороблю (або надоїсть як це завжди відбувається)




доречі промт який я давав раніше уже не працює (т_т)
https://replace.org.ua/post/180504/#p180504
тепер це жоррстоко контролюють

Подякували: Chemist-i1