Python :: Aufgabe #322 :: Lösung #3

3 Lösungen Lösungen öffentlich
#322

Magisches Quadrat (magic square)

Fortgeschrittener - Python von JKooP - 28.02.2021 um 10:54 Uhr
Von einem Magischen Quadrat spricht man, wenn
- alle Zahlen nur einmal vorkommen und die Summe der Zahlen
- aller Zeilen,
- aller Spalten sowie
- der Diagonalen immer gleich ist.

Beispiele für Magische Quadrate sind als Bilder angehängt.

Schreibe eine Methode/Funktion, mit der man überprüfen kann, ob es sich bei einer
beliebig großen quadratischen Matrix um ein solch magisches Quadrat handelt.
Zusätzlich kann, bei positiver Prüfung, auch die gesuchte Summe ausgegeben werden.

Zur Darstellung der Matrix können je nach Programmiersprache oder Vorliebe Arrays,
Vektoren oder auch generische Listen verwendet werden.

Viel Spaß
#3
vote_ok
von eisheiliger (3750 Punkte) - 13.03.2021 um 19:41 Uhr
Quellcode ausblenden Python-Code

"""
#322: Magisches Quadrat (magic square)
Von einem Magischen Quadrat spricht man, wenn alle Zahlen nur einmal vorkommen und die Summe der Zahlen aller Zeilen,
aller Spalten sowie der Diagonalen immer gleich ist.
"""
import numpy as np


def prf_maqua(arr):
    dia1, dia2 = 0, 0
    sol = (len(arr) * [sum(arr[0])])
    zei = (np.sum(arr, axis=1))
    spa = (np.sum(arr, axis=0))
    for n in range(0, len(arr)):
        dia1 += arr[n][n]
        dia2 += arr[n][len(arr) - n - 1]

    print("Magisches Quadrat Soll:", sum(arr[0]))
    print("Zeilenprüfung:         ", (np.array_equal(zei, sol)))
    print("Spaltenprüfung:        ", (np.array_equal(spa, sol)))
    if dia1 == sum(arr[0]) and dia2 == sum(arr[0]):
        print("Diagonalenpruefung:     True")
    else:
        print("Diagonalenpruefung:     False")


def prf_form(qua):
    print("Vorgabe:", qua)
    struct = np.shape(qua)
    if (struct[0] == struct[1]) and (len(np.unique(qua)) == struct[0] * struct[1]):
        print("Es besteht ein Zahlenquadrat mit eindeutigen Werten")
        prf_maqua(qua)
    else:
        print("Kein Quadrat oder nicht eindeutige Werte")


def main():
    prf_form([[-0.5, 2, 0], [1, 0.5, 0], [1, -1, 1.5]])
    prf_form([[-0.5, 2, 0], [1, 0.5, 0]])
    prf_form([[67, 1, 43], [13, 37, 61], [31, 73, 7]])
    prf_form([[67, 1, 43], [13, 37, 61], [31, 73, 8]])


if __name__ == '__main__':
    main()


Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben