Magisches Quadrat ()
Schreiben Sie zunächst jeweils eine Funktion (schlussendlich insgesamt 3 Funktionen), an die man eine zweidimensionale Liste als Argument übergeben kann und die prüfen ob die Zahlen in der Zeile, Spalte oder Diagonalen des Quadrats jeweils die gleiche Summe liefern.
Schreiben Sie eine weitere Funkton und nutzen Sie die drei Funktionen um zu prüfen, ob Zeilen, Spalten und Diagonalen ebenfalls in der Summe übereinstimmen. Wenn die Summen gleich sind, soll der Rückgabewert dieser Funktion True
sein, sonst False
.
Schreiben Sie anschließend ein Programm, das für je ein 3x3 und ein 4x4 Beispiel prüft, ob es ein magisches Quadrat ist.
0 Kommentare
3 Lösung(en)
# frozen_string_literal: false
def quad?(quad)
dim = quad.size
quad.each do |i|
return false if i.size != dim
end
true
end
def check_row(quad)
sum = []
quad.each do |i|
sum.append(i.sum)
end
return [true, sum[0]] if sum.uniq.size <= 1
[false, nil]
end
def check_column(quad)
sum = []
(0...quad.size).each do |i|
a = 0
quad.each do |j|
a += j[i]
end
sum.append(a)
end
return [true, sum[0]] if sum.uniq.size <= 1
[false, nil]
end
def check_diagonal(quad)
a = 0
b = 0
(0...quad.size).each do |i|
a += quad[i][i]
b += quad[i][quad.size - i - 1]
end
return [true, a] if a == b
[false, nil]
end
def check_all(quad)
raise ArgumentError unless quad?(quad) # Abbrechen, wenn Array kein Quadrat
r = check_row(quad)
c = check_column(quad)
d = check_diagonal(quad)
return r if r == c && c == d # leider kein Dreiervergleich in Ruby :(
[false, nil]
end
# a = [[2, 2], [2, 2, 3]]
# a = [[2, 2], [2, 2]] # Loesung: trivial
a = [[5, 10, 3], [4, 6, 8], [9, 2, 7]] # Loesung: 18
b = [[16, 6, 9, 3], [1, 11, 8, 14], [7, 13, 2, 12], [10, 4, 15, 5]] # Loesung: 34
# puts quad?(a)
# puts check_row(a)
# puts check_column(a)
# puts check_diagonal(a)
puts check_all(a)
puts check_all(b)
Lösung von: Ich Bins (tubs)
// wie oft denn noch?
// ist das widerstandsberechnung nr. 2?
https://www.programmieraufgaben.ch/aufgabe/magisches-quadrat-2/hq6groot
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
#input
n = int(input()) #<= Welche Dimension ? 3 für 3x3 4 für 4x4
matrix = [] #<= Zahlen Pro Zeile nacheinander eintippen
for rows in range(n):
nums = input()
matrix.append([int(x) for x in nums.split()])
#Wir können jetzt 3 Schritte machen
# Zeilen müssen hinzugefügt werden
# Spalten müssen hinzugefügt werden
# Diagonalen müssen hinzugefügt werden
MagischesQuadrat = True
cMatrix = [[] for x in range (n)]
value = sum(matrix[0])
#Zeilen
for x, Zeilen in enumerate(matrix):
if sum(Zeilen) != value:
MagischesQuadrat = False
for y, element in enumerate(Zeilen):
cMatrix[y].append(element)
#Spalten
for x, Spalten in enumerate(cMatrix):
if sum(Spalten) != value:
MagischesQuadrat = False
#Diagonale
i = 0
j = 0
Diagonale = [[],[]]
for x in range(n):
Diagonale[0].append(matrix[i][j])
Diagonale[1].append(matrix[n-1-i][j])
i += 1
j += 1
if sum(Diagonale[0]) != value or sum(Diagonale[1]) != value:
MagischesQuadrat = False
if MagischesQuadrat == True:
print('Magisches Quadrat')
else:
print('Kein Magisches Quadrat')
Lösung von: Name nicht veröffentlicht
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: