Mathe Zahlenrätsel / Rechenmauer 1 bis 15?
Hellooo, ich stehe vor einer Art Knobelaufgabe und komme einfach nicht weiter, deswegen gebe ich die Frage mal an euch weiter:
Eine Rechenpyramide aus 15 Feldern soll ausgefüllt werden (unterste Reihe 5, dann 4, dann 3, dann 2, dann 1 Feld(er)).
Eine Zahl ergibt sich aus der Differenz der zwei Zahlen unter ihr (wenn also 7 und 3 nebeneinander stehen, dann wäre im Feld oben drüber die 4)
In die Pyramide sollen nun die Zahlen 1 bis 15 jeweils genau einmal eingesetzt werden.
Ich hab wirklich schon gefühlt alles probiert aber ich komm einfach auf kein richtiges Ergebnis... Vielleicht könnt ihr die Pyramide ja lösen :)
Vielen Dank schon im Vorraus! Yokuma <3
4 Antworten
5
9 4
2 11 7
10 12 1 8
13 3 15 14 6
Habs: 5
9, 4
1, 10, 6
11, 12, 2, 8
14, 3, 15, 13, 5
Du hast die 5 doppelt und dafür die 7 nicht 😅 aber ich hab's mit einer anderen Antwort abgeglichen und der Rest ist nicht so weit weg... Aber vieeeelen Dank für deine Bemühungen! <3
Welche Differenzen kannst du mit den wenigsten Zahlenpaaren bilden? Also welche sind am schwierigsten zu bilden?
Naja 14 lässt sich nur einmal bilden, und somit am wenigsten oder? Also allgemein die hohen zahlen am wenigsten, weshalb die schlecht oben in der Pyramide stehen können...zu dem Schluss war ich auch schon gekommen... :/
Genau. Zerteile in Aufgabe in mehrere Teilprobleme und versuche, die Teile passend zusammenzusetzen. Divide and Conquer. Du kannst also schon die Reihen angeben in denen die stehen. Versuche die absteigend einzusetzen.
Mh, ja ich denk ich schau mir das ganze nochmal an... Aber wenn du Zeit und Lust hast kannst du ja auch versuchen auf eine Lösung zu kommen und sie mir dann mitteilen! :)
Zweite Antwort von mir:
Möglichkeit 1:
05
09 04
02 11 07
10 12 01 08
13 03 15 14 06
Möglichkeit 2 (gespiegelte Möglichkeit 1):
05
04 09
07 11 02
08 01 12 10
06 14 15 03 13
from itertools import permutations as pm
def calcnext(row, used):
out=[]
for i in range(len(row)-1):
new=abs(row[i]-row[i+1])
if new in used: return False
used.append(new)
out.append(new)
return out, used
for elem in pm([i+1 for i in range(15)], r=5): #r=5, da unten die Breite 5 ist
elem=list(elem)
original=elem[:]
used=list(elem)
while len(used)!=15:
if (a:=calcnext(elem, used)):
elem, used=a
else: break
else:
print(original)
Ab Python 3.8 (vorher geht beim if nicht und muss in zwei Schritten erledigt werden). Für die "in" Abfragen sollte man Sets benutzen und den Kram nicht so hardcoden. Sollte schnell gehen.
Für welche mit 21 gibt es keine Lösung
Für 10 gibt es die (und ihre gespiegelten) als untere Reihe: [8, 1, 10, 6], [8, 3, 10, 9], [8, 10, 1, 6], [8, 10, 3, 9]
Für 6 gibt es [1, 6, 4], [2, 6, 5], [4, 1, 6], [5, 2, 6]
Für 3 gibt es [1, 3], [2, 3] (da braucht man kein Programm für...)
Für 1 gibt es [1]
Hoffe ich hab mich nicht verrechnet😅