Discussion:
Systematische Lösung eines Zahlenrätsels
(zu alt für eine Antwort)
Brigitta
2020-05-27 08:51:39 UTC
Permalink
Hallo,
ich habe eine (mathematische) Frage zu einem Zahlenrätsel, erschienen in der heutigen Zeitung.
Es geht mir nicht um die Lösung, die ist mit etwas Aufwand zu erraten.
Hier zunächst das Zahlenrätsel:
Die O`s stehen für freie Stellen, in welche die passenden Zahlen eingetragen werden sollen. Die [|]'s sind schwarze Quadrate, in denen nichts steht, sie sind einfach optische Platzhalter zur besseren Übersichtlichkeit.
Das kleine x soll das mathematische Multiplikationszeichen sein (*).


39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]


Als Spielanleitung wird angegeben:
Fügen Sie in die freien Felder (hier: die O's) die fehlenden Zahlen ein. Es wird immer von links nach rechts und von oben nach unten gerechnet.
Der mathematische Grundsatz "Punkt vor Strich" gilt hier nicht.
Ich hoffe, meine Angaben sind verständlich.

OK.
Als Lösung habe ich (durch Probieren) gefunden:

39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36

Meine Fragen, eigentlich zwei, sind:
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?

Danke und Grüße
Brigitta
Alfred Flaßhaar
2020-05-27 09:06:11 UTC
Permalink
Am 27.05.2020 um 10:51 schrieb Brigitta:
(...)
Post by Brigitta
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Dieses unterbestimmte Gleichungssystem ist genauer betrachtet ein
diophantisches Gleichungssystem, denn es sind nur ganzzahlige Lösungen
zulässig. Durch Ersetzen der Variablen nacheinnander erhält man eine
diophantische Gleichung mit mehreren Unbekannten. Leider ist das keine
lineare Gleichung, für die es Lösungsalgorithmen gibt.
Lösungsalgorithmen für nichtlineare Gleichungen gibt es vermutlich. Muß
dazu selber erst noch suchen in Literatur über Diskrete Mathematik und
Zahlentheorie.

Gruß, Alfred
Carlo XYZ
2020-05-27 12:13:35 UTC
Permalink
Post by Alfred Flaßhaar
(...)
Post by Brigitta
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
Das dürfte i.A. nicht trivial sein.
Post by Alfred Flaßhaar
Post by Brigitta
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Dieses unterbestimmte Gleichungssystem ist genauer betrachtet ein
diophantisches Gleichungssystem, denn es sind nur ganzzahlige Lösungen
zulässig. Durch Ersetzen der Variablen nacheinnander erhält man eine
diophantische Gleichung mit mehreren Unbekannten. Leider ist das keine
lineare Gleichung, für die es Lösungsalgorithmen gibt.
Lösungsalgorithmen für nichtlineare Gleichungen gibt es vermutlich.
Arithmetik (|N mit 0,1 und +,*) ist allerdings unentscheidbar.
Deshalb sollten weitere Einschränkungen dazu kommen,
zum Beispiel fixe Bereiche für Variablenwerte.

Was mich an dem Beispiel (mal wieder) fuchst:
Die Klammerung in der 3. Spalte ist unkanonisch;
man möchte (b-e)*h = 36 und nicht b-(e*h) = 36.
Qualitätsmedien!
;)
Helmut Richter
2020-05-27 18:29:08 UTC
Permalink
Post by Carlo XYZ
Arithmetik (|N mit 0,1 und +,*) ist allerdings unentscheidbar.
... was nun nicht heißt, dass jede Aufgabe unlösbar ist.
Post by Carlo XYZ
Deshalb sollten weitere Einschränkungen dazu kommen,
zum Beispiel fixe Bereiche für Variablenwerte.
Es gibt durchaus lösbare Aufgaben über unendlichen Variablenbereichen.
Post by Carlo XYZ
Die Klammerung in der 3. Spalte ist unkanonisch;
man möchte (b-e)*h = 36 und nicht b-(e*h) = 36.
Qualitätsmedien!
;)
Mich auch. Aber wenigstens haben sie’s dazugeschrieben statt es einfach
stillschweigend vorauszusetzen, weils der Billig-Taschenrechner auch so
macht.
--
Helmut Richter
Carlo XYZ
2020-05-27 18:44:13 UTC
Permalink
Post by Helmut Richter
Post by Carlo XYZ
Arithmetik (|N mit 0,1 und +,*) ist allerdings unentscheidbar.
... was nun nicht heißt, dass jede Aufgabe unlösbar ist.
Natürlich nicht. Es heißt nur, dass es keinen Algorithmus
gibt, der jede beliebige Aufgabe dieser Art lösen kann.
(Entscheidend dafür ist das Malzeichen; fällt dies weg,
gibt es einen stets terminierenden Algorithmus - sehr
ineffizient, aber immerhin.)
Post by Helmut Richter
Post by Carlo XYZ
Deshalb sollten weitere Einschränkungen dazu kommen,
zum Beispiel fixe Bereiche für Variablenwerte.
Es gibt durchaus lösbare Aufgaben über unendlichen Variablenbereichen.
Ja, und du hast eine nette für dieses Rätsel gefunden.

Mein Kommentar war eine Replik auf "Lösungsalgorithmen
für nichtlineare Gleichungen gibt es vermutlich". Ja;
aber nur wenn die Eingabe weiter eingeschränkt wird.
Helmut Richter
2020-05-27 17:54:22 UTC
Permalink
Post by Brigitta
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
Ich schreibs mal etwas lesbarer:

39 + a – b = 41
+ × –
c + d – e = 7
– × ×
f – g + h = 13
––––––––––––––––––
37 96 36

Ich nehme an, dass die Zahlen in der Lösung nicht nur ganzzahlig, sondern
auch nichtnegativ sein sollen. Das ist meistens bei grob unterbestimmten
Gleichungssystemen so gemeint.

Es ist offenbar b = a – 2, und mehr enthält die obere Zeile nicht.

Ebenso ist f = c + 2, und mehr enthält die linke Spalte nicht.

Und in der dritten Zeile können wir die 2 beiderseits abziehen.

39 + a – (a-2)
+ × –
c + d – e = 7
– × ×
c – g + h = 11
––––––––––––
96 36

Jetzt lockt es natürlich, die zwei c voneinander abzuziehen:

–c – d + e = –7
c – g + h = 11
–––––––––––––––––
e + h – d – g = 4

mit der Nebenbedingung, dass d und g Teiler von 96 sind mit d·g <= 96,
außerdem der dritte Teiler a>1. Da gibts nur endlich viele, nämlich 12
Teiler, die 51 Kombinationen ergeben (ab hier kleine Hilfe vom elekronischen
Freund, aber keine wirkliche Brute-Force-Suche).

Wegen der komischen Strich-vor-Punkt-Regel muss h Teiler von 36 sein, und
e = d + g - e + 4 muss > 0 sein. Das sind immer noch überschaubar
viele Möglichkeiten, nämlich 347.

Jetzt rechnen wir dort überall das b = 36/h + e (wegen Strich vor Punkt!)
aus und vergleichen es mit a-2.

So, das wäre schon übersichtlicher:
a=8 b=6 d=3 e=2 g=4 h=9
a=8 b=6 d=4 e=2 g=3 h=9
a=12 b=10 d=2 e=4 g=4 h=6
a=12 b=10 d=4 e=4 g=2 h=6
a=16 b=14 d=2 e=5 g=3 h=4
a=16 b=14 d=3 e=5 g=2 h=4

Es fehlen noch c und f, aber die gibts bei allen 6 Lösungen:

a=8 b=6 c=6 d=3 e=2 f=8 g=4 h=9
a=8 b=6 c=5 d=4 e=2 f=7 g=3 h=9
a=12 b=10 c=9 d=2 e=4 f=11 g=4 h=6
a=12 b=10 c=7 d=4 e=4 f=9 g=2 h=6
a=16 b=14 c=10 d=2 e=5 f=12 g=3 h=4
a=16 b=14 c=9 d=3 e=5 f=11 g=2 h=4

Die Aufgabe hat also 6 nichtnegative Lösungen, davon 2 Lösungen mit
einstelligen Zahlen und nur eine Lösung mit paarweise verschiedenen
einstelligen Zahlen. Die war wohl gemeint; das hätte aber in der
Aufgabe stehen müssen.
Post by Brigitta
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Ich glaube, systematisches Probieren ist die einzige Chance. Eine Herleitung
der Lösung und ihrer Eindeutigkeit halte ich für ebenso aussichtslos wie
„brute force“, das blinde Durchprobieren aller Möglichkeiten.

--
Helmut Richter
Helmut Richter
2020-05-28 08:38:40 UTC
Permalink
Post by Helmut Richter
Wegen der komischen Strich-vor-Punkt-Regel muss h Teiler von 36 sein, und
e = d + g - e + 4 muss > 0 sein. Das sind immer noch überschaubar
viele Möglichkeiten, nämlich 347.
Falsch. e muss nur >= 0 sein. Deswegen hat Stefan Ram eine Lösung mehr als
ich. Habe ich korrigiert. Richtig ist also:

a=4 b=2 c=5 d=2 e=0 f=7 g=12 h=18
a=8 b=6 c=6 d=3 e=2 f=8 g=4 h=9
a=8 b=6 c=5 d=4 e=2 f=7 g=3 h=9
a=12 b=10 c=9 d=2 e=4 f=11 g=4 h=6
a=12 b=10 c=7 d=4 e=4 f=9 g=2 h=6
a=16 b=14 c=10 d=2 e=5 f=12 g=3 h=4
a=16 b=14 c=9 d=3 e=5 f=11 g=2 h=4
Post by Helmut Richter
Die Aufgabe hat also 6 nichtnegative Lösungen, davon 2 Lösungen mit
einstelligen Zahlen und nur eine Lösung mit paarweise verschiedenen
einstelligen Zahlen. Die war wohl gemeint; das hätte aber in der
Aufgabe stehen müssen.
Richtig ist: 7 nichtnegative Lösungen
Post by Helmut Richter
Ich glaube, systematisches Probieren ist die einzige Chance. Eine Herleitung
der Lösung und ihrer Eindeutigkeit halte ich für ebenso aussichtslos wie
„brute force“, das blinde Durchprobieren aller Möglichkeiten.
Stefan Rams Ansatz ist „brute force“, was sich in der Laufzeit
niederschlägt. Er schreibt:

Ich habe dann, um die Rechenzeit zu verkürzen, doch noch
manuell eine Abkürzung eingebaut, die ich aber zur
Vereinfachung hier nicht zeige. Das hier gezeigte Programm
sollte die gezeigte Ausgabe erzeugen, aber dürfte ohne die
Abkürzung doch sehr viel Zeit (aber wahrscheinlich nicht
mehr als einen Monat) dafür brauchen! Es probiert für die
acht Variablen jeweils die Werte von 0 bis 19 durch.

Meine Rechenzeit ohne „brute force“ ist halt ein wenig schneller: 4 msec
statt Diskussion, ob ein Monat reicht, immerhin ein Faktor 6.6·10^8.

Ich probiere dabei nicht die Werte 0 bis 19 durch, sondern *alle*
nichtnegativen Zahlen. Vor allem die zwei Produkte führen Endlichkeit ein:
eine ganze Zahl hat nur endlich viele Teiler.
--
Helmut Richter
guenter
2020-06-18 16:49:35 UTC
Permalink
Post by Helmut Richter
Post by Brigitta
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
39 + a – b = 41
+ × –
c + d – e = 7
– × ×
f – g + h = 13
––––––––––––––––––
37 96 36
Ich nehme an, dass die Zahlen in der Lösung nicht nur ganzzahlig, sondern
auch nichtnegativ sein sollen. Das ist meistens bei grob unterbestimmten
Gleichungssystemen so gemeint.
Es ist offenbar b = a – 2, und mehr enthält die obere Zeile nicht.
Ebenso ist f = c + 2, und mehr enthält die linke Spalte nicht.
Und in der dritten Zeile können wir die 2 beiderseits abziehen.
39 + a – (a-2)
+ × –
c + d – e = 7
– × ×
c – g + h = 11
––––––––––––
96 36
–c – d + e = –7
c – g + h = 11
–––––––––––––––––
e + h – d – g = 4
mit der Nebenbedingung, dass d und g Teiler von 96 sind mit d·g <= 96,
außerdem der dritte Teiler a>1. Da gibts nur endlich viele, nämlich 12
Teiler, die 51 Kombinationen ergeben (ab hier kleine Hilfe vom elekronischen
Freund, aber keine wirkliche Brute-Force-Suche).
Wegen der komischen Strich-vor-Punkt-Regel muss h Teiler von 36 sein, und
e = d + g - e + 4 muss > 0 sein. Das sind immer noch überschaubar
viele Möglichkeiten, nämlich 347.
Jetzt rechnen wir dort überall das b = 36/h + e (wegen Strich vor Punkt!)
aus und vergleichen es mit a-2.
a=8 b=6 d=3 e=2 g=4 h=9
a=8 b=6 d=4 e=2 g=3 h=9
a=12 b=10 d=2 e=4 g=4 h=6
a=12 b=10 d=4 e=4 g=2 h=6
a=16 b=14 d=2 e=5 g=3 h=4
a=16 b=14 d=3 e=5 g=2 h=4
a=8 b=6 c=6 d=3 e=2 f=8 g=4 h=9
a=8 b=6 c=5 d=4 e=2 f=7 g=3 h=9
a=12 b=10 c=9 d=2 e=4 f=11 g=4 h=6
a=12 b=10 c=7 d=4 e=4 f=9 g=2 h=6
a=16 b=14 c=10 d=2 e=5 f=12 g=3 h=4
a=16 b=14 c=9 d=3 e=5 f=11 g=2 h=4
Die Aufgabe hat also 6 nichtnegative Lösungen, davon 2 Lösungen mit
einstelligen Zahlen und nur eine Lösung mit paarweise verschiedenen
einstelligen Zahlen. Die war wohl gemeint; das hätte aber in der
Aufgabe stehen müssen.
Post by Brigitta
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Ich glaube, systematisches Probieren ist die einzige Chance. Eine Herleitung
der Lösung und ihrer Eindeutigkeit halte ich für ebenso aussichtslos wie
„brute force“, das blinde Durchprobieren aller Möglichkeiten.
--
Helmut Richter
Mit der Kraft der Maschine konnte ich folgende Lösungen entdecken:

a= 4 b= 2 c= 5 d= 2 e= 0 f= 7 g=12 h=18
a= 8 b= 6 c= 6 d= 3 e= 2 f= 8 g= 4 h= 9
a= 8 b= 6 c= 5 d= 4 e= 2 f= 7 g= 3 h= 9
a=12 b=10 c= 9 d= 2 e= 4 f=11 g= 4 h= 6
a=12 b=10 c= 7 d= 4 e= 4 f= 9 g= 2 h= 6
a=16 b=14 c=10 d= 2 e= 5 f=12 g= 3 h= 4
a=16 b=14 c= 9 d= 3 e= 5 f=11 g= 2 h= 4

Die erste hast du offenbar übersehen.

mfg guenter
guenter
2020-06-18 16:54:31 UTC
Permalink
Post by guenter
Post by Helmut Richter
Post by Brigitta
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
39 + a – b = 41
+ × –
c + d – e = 7
– × ×
f – g + h = 13
––––––––––––––––––
37 96 36
Ich nehme an, dass die Zahlen in der Lösung nicht nur ganzzahlig, sondern
auch nichtnegativ sein sollen. Das ist meistens bei grob unterbestimmten
Gleichungssystemen so gemeint.
Es ist offenbar b = a – 2, und mehr enthält die obere Zeile nicht.
Ebenso ist f = c + 2, und mehr enthält die linke Spalte nicht.
Und in der dritten Zeile können wir die 2 beiderseits abziehen.
39 + a – (a-2)
+ × –
c + d – e = 7
– × ×
c – g + h = 11
––––––––––––
96 36
–c – d + e = –7
c – g + h = 11
–––––––––––––––––
e + h – d – g = 4
mit der Nebenbedingung, dass d und g Teiler von 96 sind mit d·g <= 96,
außerdem der dritte Teiler a>1. Da gibts nur endlich viele, nämlich 12
Teiler, die 51 Kombinationen ergeben (ab hier kleine Hilfe vom elekronischen
Freund, aber keine wirkliche Brute-Force-Suche).
Wegen der komischen Strich-vor-Punkt-Regel muss h Teiler von 36 sein, und
e = d + g - e + 4 muss > 0 sein. Das sind immer noch überschaubar
viele Möglichkeiten, nämlich 347.
Jetzt rechnen wir dort überall das b = 36/h + e (wegen Strich vor Punkt!)
aus und vergleichen es mit a-2.
a=8 b=6 d=3 e=2 g=4 h=9
a=8 b=6 d=4 e=2 g=3 h=9
a=12 b=10 d=2 e=4 g=4 h=6
a=12 b=10 d=4 e=4 g=2 h=6
a=16 b=14 d=2 e=5 g=3 h=4
a=16 b=14 d=3 e=5 g=2 h=4
a=8 b=6 c=6 d=3 e=2 f=8 g=4 h=9
a=8 b=6 c=5 d=4 e=2 f=7 g=3 h=9
a=12 b=10 c=9 d=2 e=4 f=11 g=4 h=6
a=12 b=10 c=7 d=4 e=4 f=9 g=2 h=6
a=16 b=14 c=10 d=2 e=5 f=12 g=3 h=4
a=16 b=14 c=9 d=3 e=5 f=11 g=2 h=4
Die Aufgabe hat also 6 nichtnegative Lösungen, davon 2 Lösungen mit
einstelligen Zahlen und nur eine Lösung mit paarweise verschiedenen
einstelligen Zahlen. Die war wohl gemeint; das hätte aber in der
Aufgabe stehen müssen.
Post by Brigitta
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Ich glaube, systematisches Probieren ist die einzige Chance. Eine Herleitung
der Lösung und ihrer Eindeutigkeit halte ich für ebenso aussichtslos wie
„brute force“, das blinde Durchprobieren aller Möglichkeiten.
--
Helmut Richter
a= 4 b= 2 c= 5 d= 2 e= 0 f= 7 g=12 h=18
a= 8 b= 6 c= 6 d= 3 e= 2 f= 8 g= 4 h= 9
a= 8 b= 6 c= 5 d= 4 e= 2 f= 7 g= 3 h= 9
a=12 b=10 c= 9 d= 2 e= 4 f=11 g= 4 h= 6
a=12 b=10 c= 7 d= 4 e= 4 f= 9 g= 2 h= 6
a=16 b=14 c=10 d= 2 e= 5 f=12 g= 3 h= 4
a=16 b=14 c= 9 d= 3 e= 5 f=11 g= 2 h= 4
Die erste hast du offenbar übersehen.
mfg guenter
Mit folgendem Python Code

N=96
M=36
for a in range(1,N+1):
if N%a!=0:
continue
A=N//a
for d in range(1,A+1):
if A%d!=0:
continue
g=A//d
assert(a*d*g==96)
b=a-2
if b<0:
continue
assert(39+a-b==41)
for h in range(1,M+1):
if M%h!=0:
continue
e=b-36/h
if e<0:
continue
assert((b-e)*h==36)
c=7+e-d
if c <0:
continue
assert(c+d-e==7)
f=c+2
if f-g+h!=13:
continue
assert(f-g+h==13)
assert(39+c-f==37)
print("a=%2d b=%2d c=%2d d=%2d e=%2d f=%2d g=%2d h=%2d "%(a,b,c,d,e,f,g,h))
guenter
2020-06-18 17:03:20 UTC
Permalink
Post by guenter
Post by guenter
Post by Helmut Richter
Post by Brigitta
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
39 + a – b = 41
+ × –
c + d – e = 7
– × ×
f – g + h = 13
––––––––––––––––––
37 96 36
Ich nehme an, dass die Zahlen in der Lösung nicht nur ganzzahlig, sondern
auch nichtnegativ sein sollen. Das ist meistens bei grob unterbestimmten
Gleichungssystemen so gemeint.
Es ist offenbar b = a – 2, und mehr enthält die obere Zeile nicht.
Ebenso ist f = c + 2, und mehr enthält die linke Spalte nicht.
Und in der dritten Zeile können wir die 2 beiderseits abziehen.
39 + a – (a-2)
+ × –
c + d – e = 7
– × ×
c – g + h = 11
––––––––––––
96 36
–c – d + e = –7
c – g + h = 11
–––––––––––––––––
e + h – d – g = 4
mit der Nebenbedingung, dass d und g Teiler von 96 sind mit d·g <= 96,
außerdem der dritte Teiler a>1. Da gibts nur endlich viele, nämlich 12
Teiler, die 51 Kombinationen ergeben (ab hier kleine Hilfe vom elekronischen
Freund, aber keine wirkliche Brute-Force-Suche).
Wegen der komischen Strich-vor-Punkt-Regel muss h Teiler von 36 sein, und
e = d + g - e + 4 muss > 0 sein. Das sind immer noch überschaubar
viele Möglichkeiten, nämlich 347.
Jetzt rechnen wir dort überall das b = 36/h + e (wegen Strich vor Punkt!)
aus und vergleichen es mit a-2.
a=8 b=6 d=3 e=2 g=4 h=9
a=8 b=6 d=4 e=2 g=3 h=9
a=12 b=10 d=2 e=4 g=4 h=6
a=12 b=10 d=4 e=4 g=2 h=6
a=16 b=14 d=2 e=5 g=3 h=4
a=16 b=14 d=3 e=5 g=2 h=4
a=8 b=6 c=6 d=3 e=2 f=8 g=4 h=9
a=8 b=6 c=5 d=4 e=2 f=7 g=3 h=9
a=12 b=10 c=9 d=2 e=4 f=11 g=4 h=6
a=12 b=10 c=7 d=4 e=4 f=9 g=2 h=6
a=16 b=14 c=10 d=2 e=5 f=12 g=3 h=4
a=16 b=14 c=9 d=3 e=5 f=11 g=2 h=4
Die Aufgabe hat also 6 nichtnegative Lösungen, davon 2 Lösungen mit
einstelligen Zahlen und nur eine Lösung mit paarweise verschiedenen
einstelligen Zahlen. Die war wohl gemeint; das hätte aber in der
Aufgabe stehen müssen.
Post by Brigitta
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Ich glaube, systematisches Probieren ist die einzige Chance. Eine Herleitung
der Lösung und ihrer Eindeutigkeit halte ich für ebenso aussichtslos wie
„brute force“, das blinde Durchprobieren aller Möglichkeiten.
--
Helmut Richter
a= 4 b= 2 c= 5 d= 2 e= 0 f= 7 g=12 h=18
a= 8 b= 6 c= 6 d= 3 e= 2 f= 8 g= 4 h= 9
a= 8 b= 6 c= 5 d= 4 e= 2 f= 7 g= 3 h= 9
a=12 b=10 c= 9 d= 2 e= 4 f=11 g= 4 h= 6
a=12 b=10 c= 7 d= 4 e= 4 f= 9 g= 2 h= 6
a=16 b=14 c=10 d= 2 e= 5 f=12 g= 3 h= 4
a=16 b=14 c= 9 d= 3 e= 5 f=11 g= 2 h= 4
Die erste hast du offenbar übersehen.
mfg guenter
Mit folgendem Python Code
N=96
M=36
continue
A=N//a
continue
g=A//d
assert(a*d*g==96)
b=a-2
continue
assert(39+a-b==41)
continue
e=b-36/h
continue
assert((b-e)*h==36)
c=7+e-d
continue
assert(c+d-e==7)
f=c+2
continue
assert(f-g+h==13)
assert(39+c-f==37)
print("a=%2d b=%2d c=%2d d=%2d e=%2d f=%2d g=%2d h=%2d "%(a,b,c,d,e,f,g,h))
Jetzt sehe ich, dass ich schon fast ein Monat zu spät bin. Das ist aber nicht der Laufzeit des Programmes geschuldet, ich habe einfach schon länger nicht mehr reingeschaut und auch das Datum des Posts übersehen.
guenter
2020-06-18 20:23:00 UTC
Permalink
Post by guenter
Post by guenter
Post by guenter
Post by Helmut Richter
Post by Brigitta
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
39 + a – b = 41
+ × –
c + d – e = 7
– × ×
f – g + h = 13
––––––––––––––––––
37 96 36
Ich nehme an, dass die Zahlen in der Lösung nicht nur ganzzahlig, sondern
auch nichtnegativ sein sollen. Das ist meistens bei grob unterbestimmten
Gleichungssystemen so gemeint.
Es ist offenbar b = a – 2, und mehr enthält die obere Zeile nicht.
Ebenso ist f = c + 2, und mehr enthält die linke Spalte nicht.
Und in der dritten Zeile können wir die 2 beiderseits abziehen.
39 + a – (a-2)
+ × –
c + d – e = 7
– × ×
c – g + h = 11
––––––––––––
96 36
–c – d + e = –7
c – g + h = 11
–––––––––––––––––
e + h – d – g = 4
mit der Nebenbedingung, dass d und g Teiler von 96 sind mit d·g <= 96,
außerdem der dritte Teiler a>1. Da gibts nur endlich viele, nämlich 12
Teiler, die 51 Kombinationen ergeben (ab hier kleine Hilfe vom elekronischen
Freund, aber keine wirkliche Brute-Force-Suche).
Wegen der komischen Strich-vor-Punkt-Regel muss h Teiler von 36 sein, und
e = d + g - e + 4 muss > 0 sein. Das sind immer noch überschaubar
viele Möglichkeiten, nämlich 347.
Jetzt rechnen wir dort überall das b = 36/h + e (wegen Strich vor Punkt!)
aus und vergleichen es mit a-2.
a=8 b=6 d=3 e=2 g=4 h=9
a=8 b=6 d=4 e=2 g=3 h=9
a=12 b=10 d=2 e=4 g=4 h=6
a=12 b=10 d=4 e=4 g=2 h=6
a=16 b=14 d=2 e=5 g=3 h=4
a=16 b=14 d=3 e=5 g=2 h=4
a=8 b=6 c=6 d=3 e=2 f=8 g=4 h=9
a=8 b=6 c=5 d=4 e=2 f=7 g=3 h=9
a=12 b=10 c=9 d=2 e=4 f=11 g=4 h=6
a=12 b=10 c=7 d=4 e=4 f=9 g=2 h=6
a=16 b=14 c=10 d=2 e=5 f=12 g=3 h=4
a=16 b=14 c=9 d=3 e=5 f=11 g=2 h=4
Die Aufgabe hat also 6 nichtnegative Lösungen, davon 2 Lösungen mit
einstelligen Zahlen und nur eine Lösung mit paarweise verschiedenen
einstelligen Zahlen. Die war wohl gemeint; das hätte aber in der
Aufgabe stehen müssen.
Post by Brigitta
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Ich glaube, systematisches Probieren ist die einzige Chance. Eine Herleitung
der Lösung und ihrer Eindeutigkeit halte ich für ebenso aussichtslos wie
„brute force“, das blinde Durchprobieren aller Möglichkeiten.
--
Helmut Richter
a= 4 b= 2 c= 5 d= 2 e= 0 f= 7 g=12 h=18
a= 8 b= 6 c= 6 d= 3 e= 2 f= 8 g= 4 h= 9
a= 8 b= 6 c= 5 d= 4 e= 2 f= 7 g= 3 h= 9
a=12 b=10 c= 9 d= 2 e= 4 f=11 g= 4 h= 6
a=12 b=10 c= 7 d= 4 e= 4 f= 9 g= 2 h= 6
a=16 b=14 c=10 d= 2 e= 5 f=12 g= 3 h= 4
a=16 b=14 c= 9 d= 3 e= 5 f=11 g= 2 h= 4
Die erste hast du offenbar übersehen.
mfg guenter
Mit folgendem Python Code
N=96
M=36
continue
A=N//a
continue
g=A//d
assert(a*d*g==96)
b=a-2
continue
assert(39+a-b==41)
continue
e=b-36/h
continue
assert((b-e)*h==36)
c=7+e-d
continue
assert(c+d-e==7)
f=c+2
continue
assert(f-g+h==13)
assert(39+c-f==37)
print("a=%2d b=%2d c=%2d d=%2d e=%2d f=%2d g=%2d h=%2d "%(a,b,c,d,e,f,g,h))
Jetzt sehe ich, dass ich schon fast ein Monat zu spät bin. Das ist aber nicht der Laufzeit des Programmes geschuldet, ich habe einfach schon länger nicht mehr reingeschaut und auch das Datum des Posts übersehen.
Wenn wir auch negative Zahlen zulassen, bleibt die Lösungsmenge noch immer endlich. Wir erhalten folgendes:
a= 4 b= 2 c= 5 d= 2 e= 0 f= 7 g=12 h=18
a= 8 b= 6 c= 6 d= 3 e= 2 f= 8 g= 4 h= 9
a= 8 b= 6 c= 5 d= 4 e= 2 f= 7 g= 3 h= 9
a=12 b=10 c= 9 d= 2 e= 4 f=11 g= 4 h= 6
a=12 b=10 c= 7 d= 4 e= 4 f= 9 g= 2 h= 6
a=16 b=14 c=10 d= 2 e= 5 f=12 g= 3 h= 4
a=16 b=14 c= 9 d= 3 e= 5 f=11 g= 2 h= 4
a= 4 b= 2 c=25 d= 2 e=20 f=27 g=12 h=-2
a= 4 b= 2 c=15 d=12 e=20 f=17 g= 2 h=-2
a= 8 b= 6 c=19 d= 3 e=15 f=21 g= 4 h=-4
a= 8 b= 6 c=18 d= 4 e=15 f=20 g= 3 h=-4
a=12 b=10 c=21 d= 2 e=16 f=23 g= 4 h=-6
a=12 b=10 c=19 d= 4 e=16 f=21 g= 2 h=-6
a=16 b=14 c=23 d= 2 e=18 f=25 g= 3 h=-9
a=16 b=14 c=22 d= 3 e=18 f=24 g= 2 h=-9
a= 3 b= 1 c=15 d=-4 e= 4 f=17 g=-8 h=-12
a= 3 b= 1 c=19 d=-8 e= 4 f=21 g=-4 h=-12
a= 4 b= 2 c=15 d=-3 e= 5 f=17 g=-8 h=-12
a= 4 b= 2 c=20 d=-8 e= 5 f=22 g=-3 h=-12
a= 8 b= 6 c=19 d=-3 e= 9 f=21 g=-4 h=-12
a= 8 b= 6 c=20 d=-4 e= 9 f=22 g=-3 h=-12
Jens Kallup
2020-06-19 00:39:18 UTC
Permalink
Post by Helmut Richter
39 + a – b = 41
+ × –
c + d – e = 7
– × ×
f – g + h = 13
––––––––––––––––––-
37 96 36 = 58
Ein einfaches Zahlen Sudoku, bei dem diagonal gerechnet
wird ...
Ohne Computer berechnet !!!

38 + 4 - 2 = 0.40 => 40 %
+ x - +
2 + 6 - 1 = 0.70 => 70 %
- x x -
4 - 2 + 10 = 0.10 => 10 %
-------------------------------------------
0.36 - 0.48 + 0.13 = 1.00 => 100 %

Vielleicht liefere ich auch noch einen Algo in einer
gewählten Programmiersprache ab ...

Gruß, Jens
Jens Kallup
2020-06-19 01:20:02 UTC
Permalink
Post by Jens Kallup
Ein einfaches Zahlen Sudoku, bei dem diagonal gerechnet
wird ...
Ohne Computer berechnet !!!
38    +   4    -     2  =  0.40   =>  40 %
 +        x          -      +
 2    +   6    -     1  =  0.70   =>  70 %
 -        x          x      -
 4    -   2    +    10  =  0.10   =>  10 %
-------------------------------------------
0.36  -  0.48  +  0.13  =  1.00   => 100 %
Vielleicht liefere ich auch noch einen Algo in einer
gewählten Programmiersprache ab ...
Gruß, Jens
Anmerkung;

Da es sich hierbei um eine 3x3 Matrix handelt, sei
angemerkt, dass 3% übrig bleiben.
Dies entspricht der Menge der unbekannten Variablen !!!

Jens

Stefan Ram
2020-05-27 17:59:37 UTC
Permalink
Post by Brigitta
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
Ich nehme einmal an, die Zahlen dürfen nicht
negativ sein.

Für dieses spezielle Rätsel kann man dann sagen:

Es gibt nur 63 Tripel, deren Produkt gleich
96 ist. Man kann für die anderen 5 Variablen
wahrscheinlich auf ähnliche Weise begründen,
warum sie kleiner als, sagen wir, 200 sein
müssen.

Dann verbleiben als nur noch zirka 320E9
Kombinationen für die anderen fünf Zahlen
für jedes der 63 Tripel, was man mit einer
automatischen Rechenanlage wahrscheinlich
durchprobieren kann.
Stefan Ram
2020-05-28 03:09:33 UTC
Permalink
Post by Stefan Ram
Dann verbleiben als nur noch zirka 320E9
Kombinationen für die anderen fünf Zahlen
für jedes der 63 Tripel, was man mit einer
automatischen Rechenanlage wahrscheinlich
durchprobieren kann.
Nun ein kleines Python-Programm geschrieben.

Dieses erschließt sich alles halbautomatisch aus der
2dimensionalen Aufgabenstellung. "halb-" bedeutet, daß man
zwar theoretisch die Aufgabe ein wenig editieren kann und
das Programm dann die neue Aufgabe bearbeitet, aber
praktisch ist es dabei nicht sehr flexibel. Es muß daher
für andere Aufgaben wahrscheinlich doch mehr oder weniger
aufwendig manuell angepaßt werden.

Ich habe dann, um die Rechenzeit zu verkürzen, doch noch
manuell eine Abkürzung eingebaut, die ich aber zur
Vereinfachung hier nicht zeige. Das hier gezeigte Programm
sollte die gezeigte Ausgabe erzeugen, aber dürfte ohne die
Abkürzung doch sehr viel Zeit (aber wahrscheinlich nicht
mehr als einen Monat) dafür brauchen! Es probiert für die
acht Variablen jeweils die Werte von 0 bis 19 durch.

import re

source='''
39 + O - O 41
+ * -
O + O - O 7
- * *
O - O + O 13
37 96 36
'''

def main():
global source
ch=64
def f( x ):
nonlocal ch
return chr( ch := ch + 1 )
source = re.sub( 'O', f, source )
lines=source.split('\n')[ 1: -1 ]
for i in range( 0, 6, 2 ): lines[ i ]=repair(lines[ i ])
equations = []
equations.append( lines[ 0 ])
equations.append( lines[ 2 ])
equations.append( lines[ 4 ])
def row( from_, top ):
str = ""
for i in range( 6 ): str += lines[ i ][ from_: top ]
return repair( str.strip() )
equations.append( row( 0, 4 ))
equations.append( row( 7, 11 ))
equations.append( row( 14, 16 ))
for i in range( len( equations )):
equations[ i ]= re.sub( r"^([A-Z0-9]+\s*[+*/-]\s*[A-Z0-9])", r"(\1)", equations[ i ])
M = 20
for A in range( M ):
for D in range( M ):
for G in range( M ):
for B in range( M ):
for C in range( M ):
for E in range( M ):
for F in range( M ):
for H in range( M ):
for equation in equations:
if not eval( equation ): break
else:
print( f"{A=}, {B=}, {C=}, {D=}, {E=}, {F=}, {G=}, {H=}" )

def repair(line):
pos=line.rfind( ' ' )
return line[0:pos]+'=='+line[pos:]

main()

Ausgabe:

A=4, B=2, C=5, D=2, E=0, F=7, G=12, H=18
A=8, B=6, C=6, D=3, E=2, F=8, G=4, H=9
A=8, B=6, C=5, D=4, E=2, F=7, G=3, H=9
A=12, B=10, C=9, D=2, E=4, F=11, G=4, H=6
A=12, B=10, C=7, D=4, E=4, F=9, G=2, H=6
A=16, B=14, C=10, D=2, E=5, F=12, G=3, H=4
A=16, B=14, C=9, D=3, E=5, F=11, G=2, H=4
Stefan Ram
2020-05-28 03:35:43 UTC
Permalink
Post by Stefan Ram
equations[ i ]= re.sub( r"^([A-Z0-9]+\s*[+*/-]\s*[A-Z0-9])", r"(\1)", equations[ i ])
Wenn man unter die zitierte Zeile noch einfügt:

equations[ i ] = compile( equations[ i ], "main.py", 'eval' )

, wird das Programm deutlich schneller. Es könnte sein,
daß es die Lösungen dann auch ohne Einbau weiterer manueller
Abkürzungen schon binnen eines Tages findet.
Stefan Ram
2020-05-29 02:15:01 UTC
Permalink
Post by Stefan Ram
Post by Stefan Ram
equations[ i ]= re.sub( r"^([A-Z0-9]+\s*[+*/-]\s*[A-Z0-9])", r"(\1)", equations[ i ])
equations[ i ] = compile( equations[ i ], "main.py", 'eval' )
Da der Editor IDLE beim Speichern abgestürzt ist, habe ich
meinen Quellcode für dieses Programm verloren, konnte ihn
mir aber wieder aus dieser Newsgroup kopieren.

Inwischen habe ich noch zwei Änderungen vorgenommen:

1.) Das Programm kann jetzt die graphische Aufgabenstellung
genau in dem Format entgegennehmen, wie sie im OP gepostet
wurde. Theoretisch (ungetestet) sollte man die Zahlenwerte
(1-2 Stellen) und die Operatoren (+-x/) ändern können.

2.) Das Programm nimmt jetzt die Optimierungen, die ich
zuvor manuell vornahm, automatisch vor. Das ist weniger
effizient, aber etwas sicherer (gegen Flüchtigkeitsfehler
bei manueller Optimierung) und eleganter. Dazu wird bereits
in äußeren Schleifen mit "check" geprüft, ob irgendeine
Gleichung an Hand der derzeit schon definierten Variablen
bereits verletzt ist. Falls ja, wird dieser Durchlauf der
äußeren Schleife abgebrochen.

Auf diese Weise können die Werte von 0 bis 50 für A bis H
nun in zirka ein bis zwei Minuten getestet werden.
Allerdings wurden dabei keine neuen Lösungen gefunden.

Hier der Quellcode. Zur Ausführung verwendet wurde die
Implementation CPython (Standardimplementation) von Python 3.9.

import re
import datetime
import inspect

print( f"# {datetime.datetime.now()}" )

source='''
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
'''

def main():
global source
source = source.replace( 'x', '*' ).replace( '[', ' ' ).replace( '|', ' ' ).replace( ']', ' ' )
ch=64
def f( x ):
nonlocal ch
return chr( ch := ch + 1 )
source = re.sub( 'O', f, source )
lines=source.split('\n')[ 1: -1 ]
for i in range( 0, 6, 2 ): lines[ i ]=repair(lines[ i ])
equations = []
equations.append( lines[ 0 ])
equations.append( lines[ 2 ])
equations.append( lines[ 4 ])
def row( from_, top ):
str = ""
for i in range( 6 ): str += lines[ i ][ from_: top ]
return repair( str.strip() )
equations.append( row( 0, 4 ))
equations.append( row( 7, 11 ))
equations.append( row( 14, 16 ))
letters=[]
compilation=[]
for i in range( len( equations )):
found=""
for ch in equations[ i ]:
if ch >= 'A' and ch <= 'Z': found += ch
letters.append( found )
equations[ i ]= re.sub( r"^([A-Z0-9]+\s*[+*/-]\s*[A-Z0-9])", r"(\1)", equations[ i ])
compilation.append( compile( equations[ i ], "main.py", 'eval' ))
g=globals()
def check():
result = 10
l = inspect.currentframe().f_back.f_locals
for i in range( len( equations )):
f = True
try:
for ch in letters[ i ]:
if ch not in l or l[ ch ]==None:
result = 12
f = False
if f and False == eval( compilation[ i ], g, l ): return 11
except NameError:
#print(equations[ i ])
pass
result = 12
except TypeError:
pass
result = 12
return result
M = 50
r = list( range( M ))+[ None ]
for A in r:
if 11 == check(): continue
if A != None:
for B in r:
if B != None:
if 11 == check(): continue
for C in r:
if C != None:
if 11 == check(): continue
#print( f"# {A=}, {B=}, {C=} {datetime.datetime.now()}" )
for D in r:
if D != None:
if 11 == check(): continue
for E in r:
if E != None:
if 11 == check(): continue
for F in r:
if F != None:
if 11 == check(): continue
for G in r:
if G != None:
if 11 == check(): continue
for H in r:
if 10 == check(): print( f"{A=}, {B=}, {C=}, {D=}, {E=}, {F=}, {G=}, {H=}" )


def repair(line):
pos=line.rfind( ' ' )
return line[0:pos]+'=='+line[pos:]

main()
print( f"# {datetime.datetime.now()}" )
Stefan Ram
2020-05-29 18:11:59 UTC
Permalink
Die neue Programmversion ist jetzt etwas besser lesbar,
sie ist nicht mehr auf ein bestimmte Anzahl von Variablen
festgelegt (zuvor: acht Variablen von A bis H) und sie
ist schneller, so daß die Werte von 0 bis 20 jetzt in
wenigen Sekunden durchprobiert werden, die Werte bis 50
in ein bis zwei Minuten.

Außerdem werden die gefundenen Formeln jetzt ausgegeben.

Ausgabe (Auszug):

( 39 + A )- B == 41
( C + D )- E == 7
( F - G )+ H == 13
( 39 + C )- F == 37
( A * D )* G == 96
( B - E )* H == 36
{'A': 4, 'B': 2, 'C': 5, 'D': 2, 'E': 0, 'F': 7, 'G': 12, 'H': 18}
{'A': 8, 'B': 6, 'C': 5, 'D': 4, 'E': 2, 'F': 7, 'G': 3, 'H': 9}
{'A': 8, 'B': 6, 'C': 6, 'D': 3, 'E': 2, 'F': 8, 'G': 4, 'H': 9}
{'A': 12, 'B': 10, 'C': 7, 'D': 4, 'E': 4, 'F': 9, 'G': 2, 'H': 6}
{'A': 12, 'B': 10, 'C': 9, 'D': 2, 'E': 4, 'F': 11, 'G': 4, 'H': 6}
{'A': 16, 'B': 14, 'C': 9, 'D': 3, 'E': 5, 'F': 11, 'G': 2, 'H': 4}
{'A': 16, 'B': 14, 'C': 10, 'D': 2, 'E': 5, 'F': 12, 'G': 3, 'H': 4}

Quelltext:

import re
import datetime
import inspect
import sys

print( f"# {datetime.datetime.now()}" )

source='''
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
'''

PASSED = 10
FAILED = 11
UNKNOWN = 12

def main():
'''try to solve the puzzle given as source.'''
global source
source = source.replace( 'x', '*' ).replace( '[', ' ' ).replace( '|', ' ' ).replace( ']', ' ' )
ch = 64
def f( x ):
nonlocal ch
return chr( ch := ch + 1 )
source = re.sub( 'O', f, source )
lines = source.split( '\n' )[ 1: -1 ]
for i in range( 0, 6, 2 ): lines[ i ]= repair( lines[ i ])
equations =[ lines[ 0 ], lines[ 2 ], lines[ 4 ]]
def columns( from_, top ):
str = ""
for i in range( 6 ): str += lines[ i ][ from_: top ]
return repair( str.strip() )
equations +=[ columns( 0, 4 ), columns( 7, 11 ), columns( 14, 16 )]
compilation=[]
for i in range( len( equations )):
equations[ i ]= beautification( re.sub( r"^([A-Z0-9]+\s*[+*/-]\s*[A-Z0-9])", r"(\1)", equations[ i ] ))
print( f'{equations[ i ]}' )
equations[ i ]= compile( equations[ i ], "main.py", 'eval' )
loop( equations, 65, ch, dict() )

def check( equations, map ):
'''Returns FAILED if an equation is false with the given map,
PASSED if all equations are true with the given map,
and UNKNOWN otherwise.'''
result = PASSED
for i in range( len( equations )):
try:
if False == eval( equations[ i ], dict( map )): result = FAILED; break
except( NameError, TypeError )as inst:
result = UNKNOWN
#print( map, result )
return result

def loop( equations, c, ch, map ):
'''Tries all possible configurations ("map"). For optimization,
it fails as soon as a formula is detected to be false for the
current configuration.
Go ahead and change the argument of the call of "range" below
to set the top value to be tried for each variable (beginning at 0).
'''
if c > ch:
if PASSED == check( equations, map ): print( map )
else:
for x in range( 20 ):
map[ chr( c )]= x
if FAILED == check( equations, map ): continue
loop( equations, c + 1, ch, map )
del map[ chr( c )]

def repair(line):
'''Insert the missing equality operator into the formular.'''
pos=line.rfind( ' ' )
return line[0:pos]+'=='+line[pos:]

def beautification( formula ):
'''Adjust whitespace for beauty.'''
formula = formula.replace( "(", "( " ).replace( ")", " )" )
formula = re.sub( r"([+*/-])", r" \1 ", formula )
formula = re.sub( r"==", r" == ", formula )
formula = re.sub( r"([+*/-]) +\( ", r"\1( ", formula )
formula = re.sub( r"\) +([+*/-])", r")\1 ", formula )
formula = re.sub( " +", " ", formula )
return formula

main()

print( f"# {datetime.datetime.now()}" )
Alfred Flaßhaar
2020-05-28 15:01:29 UTC
Permalink
Am 27.05.2020 um 10:51 schrieb Brigitta:

(...)

Zahlenrätsel dieser Art habe ich (mit Lösung) einen ganzen Berg auf
Lager. Sie entstanden im gegenseitigen Wettstreit mit einem Kollegen vor
vielen Jahren und sind als Eigenbau mit hinterhältiger Absicht
entstanden. Manche sind einfach, aber einige sind heftig schwer zu
lösen. Bei Bedarf bitte melden, gern per p. m.

Gruß, Alfred
Helmut Richter
2020-05-31 07:06:33 UTC
Permalink
(...)
Zahlenrätsel dieser Art habe ich (mit Lösung) einen ganzen Berg auf Lager. Sie
entstanden im gegenseitigen Wettstreit mit einem Kollegen vor vielen Jahren
und sind als Eigenbau mit hinterhältiger Absicht entstanden. Manche sind
einfach, aber einige sind heftig schwer zu lösen. Bei Bedarf bitte melden,
gern per p. m.
Wer weiß, ob Brigitta hier noch mitliest und sich auch noch für die von
ihr abgesonderte Aufgabe oder ähnliche interessiert?
--
Helmut Richter
l***@gmail.com
2020-05-31 07:49:14 UTC
Permalink
Zuerst meinen herzlichen Dank an alle für die interessanten Antworten. Natürlich lese ich noch mit und habe alles verfolgt.
Allerdings hat Corona auch mich in diesen irren Zeiten aus der Bahn geworfen.
Ich brauch noch ein bisschen Zeit, weil ich auf der Suche bin. Vor ein paar Jahren hat ein Gymnasiallehrer aus Schloss Torgelow eine Mathe-CD für die Oberstufe zum Kauf angeboten. Ich hab mir die besorgt und bin am Durcharbeiten.
Unter anderem steht dort für diophantische Gleichungen eine sehr systematische Vorgehensweise, die mich total beeindruckt hat. Ich Versuch das zu finden und will es dann posten.
Bis dahin erstmal vielen Dank für Eure Mühe und Hilfe
Grüße Brigitta
Brigitta
2020-05-31 09:51:03 UTC
Permalink
Wie versprochen - ich hab's gefunden.

Ihr kennt sicherlich solch ähnlich gestrickte Aufgaben.
Ich finde die systematische Herangehensweise und die Ergebnisdarstellung
in vektorieller Schreibweise richtig Klasse und erhellend.

Hier eine der Aufgaben
(Quelle: Friedrich Buckel, Mathe-CD, Schloss Torgelow):

Sabrina will im Zoogeschäft Tiere kaufen. Folgende Angebote
findet sie vor:

Junger Hund 15 €
Junge Katze 1 €
Maus 0,25 €

Wie viele Tiere kann sie von jeder Sorte kaufen, wenn sie genau 100 Tiere
benötigt und genau 100 € ausgeben will ?

Ansatz: Sabrina kauft x Hunde, y Katzen und z Mäuse.

(1) Preisbedingung : 15x + y + 1/4z = 100
(2) Mengenbedingung : x + y + z = 100

Elimination von y durch (1) – (2) ergibt:
(3) 14x− 3/4z = 0 d.h.
z = 56/3 x

Jetzt kommt der Wechsel ins Vektorielle, der mir besonders gut gefällt,
weil er eine so kompakte und übersichtliche Ergebnisdarstellung erlaubt:

Wähle x = r (mit r € |R) und z = 56/3r

Eingesetzt in (2) ergibt das:
y = 100 - x - z = 100 - r - 56/3r = 100 - 59/3r

Der "Lösungsvektor" besteht also aus dem Tripel
L = (x|y|z) = (r | 100-59/3r | 56/3r)

Diesen Vektor kann man noch linear zerlegen:
L = (0|100|0) + r(1 | -59/3 | 56/3)


Spätestens jetzt muss man sich Gedanken über die Grundmenge dieser Gleichung
machen. Hier gilt nicht G = R_3 , denn die Anzahlen der zu kaufenden Tiere
müssen ja erstens ganzzahlig und zweitens aus dem Bereich 0 bis 100 stammen.
Die Grundmenge ist daher G = {0, 1, 2 ... 100}_3

Brüche sind nicht möglich, also kann man für x bzw. r nur Vielfache von 3
wählen. Und dies muss man jetzt durchrechnen:

(Lösung1): r = 0 ergibt L =(0 |100 | 0)
d.h. nur 100 Katzen.

(Lösung2): r = 3 ergibt L = (3 | 100-59/3*3 | 56/3*3) (Hunde|Katzen|Mäuse)
d.h. (3|41|56) (Hunde|Katzen|Mäuse)

(Versuch3) r = 6 ergibt L = (6|-18|112)
und das geht nicht.

Somit gibt es genau zwei Möglichkeiten des Einkaufs.

Mich hat das fast umgehauen, als ich diese Herangehensweise das erste Mal
gesehen habe, weil ich hier die Schönheit der Mathematik wiederfinde.
Diese Systematik ist wie ein Magnet, der dich zur Lösung führt.
Aber vielleicht ist mein Gemüt ja auch etwas schlicht :-) und echte
Mathematiker lachen darüber.

Freundliche Grüße
und schöne Pfingsten
Brigitta
Helmut Richter
2020-06-02 09:19:58 UTC
Permalink
Post by Brigitta
Sabrina will im Zoogeschäft Tiere kaufen. Folgende Angebote
Junger Hund 15 €
Junge Katze 1 €
Maus 0,25 €
Wie viele Tiere kann sie von jeder Sorte kaufen, wenn sie genau 100 Tiere
benötigt und genau 100 € ausgeben will ?
Ansatz: Sabrina kauft x Hunde, y Katzen und z Mäuse.
(1) Preisbedingung : 15x + y + 1/4z = 100
(2) Mengenbedingung : x + y + z = 100
Also alles linear.

Man kann sich das von Anfang an räumlich vorstellen:

Der Raum der möglichen Punkte ist dreidimensional. Die beiden Gleichungen
legen je eine Ebene fest. Die beiden Ebenen haben als Schnittmenge eine
Gerade, und von der will man eine Parameterdarstellung haben: ein Punkt p auf
der Geraden (gegeben als Vektor vom Ursprung) und ein Vektor v, so dass die
Lösungen die Gestalt p + λ·v haben. Damit sind die beiden Gleichungen vom
Tisch und man hat nur noch die Bedingungen:

* alle drei Koordinaten der Lösung sind ganzzahlig (nur ganze Tiere werden
gekauft), d.h. man will nur Gitterpunkte auf der Geraden

* alle drei Koordinaten der Lösung sind nicht negativ (keine Tiere werden
ins Geschäft gebracht); d.h. man will nur Punkte im 1. Oktanten

Da die Ebene der Preisbedingung den 1. Oktanten nach außen abschließt,
liegen die Lösungen in einer dreieckigen Teilfläche dieser Ebene.
Realistischer ist vielleicht eine Preisbedingung 15x + y + 1/4z <= 100;
dann kann sich Sabrina von Rest vielleicht noch ein Eis kaufen. Dann
liegen die Lösungen in einem dreidimensionalen, abgeschlossenen, endlich
großen Gebiet, wo es auch nur endlich viele Gitterpunkte gibt. Also hilft
Probieren theoretisch immer; praktisch kanns anders sein.

Das geht so für alle solchen Aufgaben mit k linearen Gleichungen mit n
Unbekannten, und es dürfte da auch immer Lösungsverfahren geben, nicht nur im
eindimensionalen Fall wie hier, wo es eine Gerade gibt, auf der die Lösungen
liegen.

Wie man systematisch an *eine* diophantische lineare Gleichung rangeht,
wird in https://www.arndt-bruenner.de/mathe/scripts/diophant.htm recht
nett vorgeführt. (Ich kannte vorher weder das Verfahren in dieser Form
noch den Webauftritt von Arndt Brünner.)

Ich nehme an, dass die Lösungen mehrerer solcher Gleichungen sich mit dem
Chinesischen Restsatz kombinieren lassen. Vielleicht lässt sich der
Chinesische Restsatz selbst auch einfach als diophantische lineare
Gleichung formulieren und dasselbe Verfahren anwenden. Aber wenn ich damit
jetzt anfange, sind ein paar Stunden weg, bevor ich weiß, ob’s so geht,
dann ein paar Tage, bis ichs wasserdicht aufgeschrieben habe, und
mindestens eine Woche, bis ich eingesehen habe, dass es anders nicht
offensichtlich viel einfacher gegangen wäre. Und die Zeit will ich jetzt
nicht investieren.

+++

Deine vorhergehende Aufgabe war aber kubisch, d.h. es kamen in den
Gleichungen auch Produkte von bis zu drei Unbekannten vor. Das ist ganz
anders. (In deiner Beschreibung kam „LGS“ vor. wenn das „lineares
Gleichungssystem“ heißen soll, war das falsch.)
Post by Brigitta
Mich hat das fast umgehauen, als ich diese Herangehensweise das erste Mal
gesehen habe, weil ich hier die Schönheit der Mathematik wiederfinde.
Diese Systematik ist wie ein Magnet, der dich zur Lösung führt.
Aber vielleicht ist mein Gemüt ja auch etwas schlicht :-) und echte
Mathematiker lachen darüber.
Da gibts nichts zu lachen. Mathematik ist nun mal Kunst: Ergebnisse
erzielt man um ihrer Schönheit willen, und sie sind erst dann ganz richtig
dargestellt, wenn auch ihre Darstellung schön ist.
--
Helmut Richter
Siegfried Neubert
2020-06-05 12:46:51 UTC
Permalink
Post by Brigitta
Hallo,
ich habe eine (mathematische) Frage zu einem Zahlenrätsel, erschienen in der heutigen Zeitung.
Es geht mir nicht um die Lösung, die ist mit etwas Aufwand zu erraten.
Die O`s stehen für freie Stellen, in welche die passenden Zahlen eingetragen werden sollen. Die [|]'s sind schwarze Quadrate, in denen nichts steht, sie sind einfach optische Platzhalter zur besseren Übersichtlichkeit.
Das kleine x soll das mathematische Multiplikationszeichen sein (*).
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
Fügen Sie in die freien Felder (hier: die O's) die fehlenden Zahlen ein. Es wird immer von links nach rechts und von oben nach unten gerechnet.
Der mathematische Grundsatz "Punkt vor Strich" gilt hier nicht.
Ich hoffe, meine Angaben sind verständlich.
OK.
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Danke und Grüße
Brigitta
Hallo Britta,

spät, aber ich hoffe nicht zu spät, komme ich mit zwei Anmerkungen.

Ich komme auch nicht wegen Corona so spät, sondern hier ist eher wenig los
- wenn man von dem Streit mit und um WM mal absieht!

Aber nun, zum Einsetzrätsel:
Wenn ich mir die Lösung so ansehe und die originäre Aufgabenstellung irgendwie vermisse, kann es sein, das in der Aufgabenstellung noch stand, das die Lösungen aus der Menge {1,2,3,...,8,9} stammen sollten und zwar so, daß man eine Zahl nur genau einmal auswählen durfte?

Und zur lineraren Gleichung mit zwei Gleichungen aber 3 Unbekannten.
Ja, ich finde das sind schöne Aufgaben.
Aber ich finden auch den Ausdruck 1-exp(2*n*Pi*i)=0 sehr schön,
speziell wenn man ihn in der "mathematischen-Schreibweise"sieht.
Es ist eine Wahre Aussage über die Symbole 0,1,2,n,e,Pi und i, find ich toll!

Ich kenne sollch ähnliche Aufgabe für eine Party
man hat 100 Getränke für genau 100 Leute.
Eim Bier kostet 0,5€ ein Wein 3€ und ein Sekt 10€.
(Oder auch ein Sekt zu 5€ - man findet dann 3 Lösungen!)
Also 0,5B + 3W +10S= 100 und B +W +S= 100

Da wohl am meisten Bier gebraucht wird um 100 zu erreichen, versucht man das Bier zu eliminieren, da man dafür die meisten "Versuche" bräuchte. Also wg.
1B +6W +20S= 200 minus B +W +S= 100 ergibt
5W +19S= 100 oder W= 20 -19/5*S
Natürlich gibt es nur ganzzahlige Getränke!

Für S=0 ist W=20 und B=80 und 3*20 +0,5*80= 100. das ist also eine Lösung.

Aber 19*S muß ein vielfaches von 5 sein (weil 19 Primzahl) und 19*S/5 < 20.

Also, für S=5 und W=1 ist B=94 und 5*10 +1*3 +94*0,5 oder 50 +3 +47= 100
hat man eine weiter Lösung und mehr kann es nicht geben!

Durch geschicktes gezieltes Suchen findet man solche Lösungen!

Für Deine Aufgabe heißt das:

15H +1K +0,25M= 100 und
H +K +M= 100

Um das zu erfüllen braucht man sicher viele Mäuse, also Mäuse eliminieren:

59H +3K= 300 oder K= 100 -59/3 *H
und weil 59 Primzahl kann nur H= 0 od. H= 1 gelten!

Man muß nicht viel suchen (und die Aufgaben sind meistens auch so gestellt!).

Ich hoffe das hilft Dir noch.
Immer selbst mitdenken, (meistens) nichts automatisch mit Formeln machen!

Und ich hoffe das Du noch viel Spaß an der Mathematik findest!

LG Siggi N.
Siegfried Neubert
2020-06-05 17:35:40 UTC
Permalink
Post by Siegfried Neubert
Post by Brigitta
Hallo,
ich habe eine (mathematische) Frage zu einem Zahlenrätsel, erschienen in der heutigen Zeitung.
Es geht mir nicht um die Lösung, die ist mit etwas Aufwand zu erraten.
Die O`s stehen für freie Stellen, in welche die passenden Zahlen eingetragen werden sollen. Die [|]'s sind schwarze Quadrate, in denen nichts steht, sie sind einfach optische Platzhalter zur besseren Übersichtlichkeit.
Das kleine x soll das mathematische Multiplikationszeichen sein (*).
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
Fügen Sie in die freien Felder (hier: die O's) die fehlenden Zahlen ein. Es wird immer von links nach rechts und von oben nach unten gerechnet.
Der mathematische Grundsatz "Punkt vor Strich" gilt hier nicht.
Ich hoffe, meine Angaben sind verständlich.
OK.
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Danke und Grüße
Brigitta
Hallo Britta,
spät, aber ich hoffe nicht zu spät, komme ich mit zwei Anmerkungen.
Ich komme auch nicht wegen Corona so spät, sondern hier ist eher wenig los
- wenn man von dem Streit mit und um WM mal absieht!
Wenn ich mir die Lösung so ansehe und die originäre Aufgabenstellung irgendwie vermisse, kann es sein, das in der Aufgabenstellung noch stand, das die Lösungen aus der Menge {1,2,3,...,8,9} stammen sollten und zwar so, daß man eine Zahl nur genau einmal auswählen durfte?
Und zur lineraren Gleichung mit zwei Gleichungen aber 3 Unbekannten.
Ja, ich finde das sind schöne Aufgaben.
Aber ich finden auch den Ausdruck 1-exp(2*n*Pi*i)=0 sehr schön,
speziell wenn man ihn in der "mathematischen-Schreibweise"sieht.
Es ist eine Wahre Aussage über die Symbole 0,1,2,n,e,Pi und i, find ich toll!
Ich kenne sollch ähnliche Aufgabe für eine Party
man hat 100 Getränke für genau 100 Leute.
Eim Bier kostet 0,5€ ein Wein 3€ und ein Sekt 10€.
(Oder auch ein Sekt zu 5€ - man findet dann 3 Lösungen!)
Also 0,5B + 3W +10S= 100 und B +W +S= 100
Da wohl am meisten Bier gebraucht wird um 100 zu erreichen, versucht man das Bier zu eliminieren, da man dafür die meisten "Versuche" bräuchte. Also wg.
1B +6W +20S= 200 minus B +W +S= 100 ergibt
5W +19S= 100 oder W= 20 -19/5*S
Natürlich gibt es nur ganzzahlige Getränke!
Für S=0 ist W=20 und B=80 und 3*20 +0,5*80= 100. das ist also eine Lösung.
Aber 19*S muß ein vielfaches von 5 sein (weil 19 Primzahl) und 19*S/5 < 20.
Also, für S=5 und W=1 ist B=94 und 5*10 +1*3 +94*0,5 oder 50 +3 +47= 100
hat man eine weiter Lösung und mehr kann es nicht geben!
Durch geschicktes gezieltes Suchen findet man solche Lösungen!
15H +1K +0,25M= 100 und
H +K +M= 100
59H +3K= 300 oder K= 100 -59/3 *H
und weil 59 Primzahl kann nur H= 0 od. H= 1 gelten!
Man muß nicht viel suchen (und die Aufgaben sind meistens auch so gestellt!).
Ich hoffe das hilft Dir noch.
Immer selbst mitdenken, (meistens) nichts automatisch mit Formeln machen!
Und ich hoffe das Du noch viel Spaß an der Mathematik findest!
LG Siggi N.
Entschuldigung, typisch für mich,
es muß natürlich "H= 3" heißen und nicht H= 1.

Und 3H +41k +56M= 100 und 45 +41 +16= 100

Tschüß Siggi N.
Siegfried Neubert
2020-06-05 17:42:40 UTC
Permalink
Post by Siegfried Neubert
Post by Siegfried Neubert
Post by Brigitta
Hallo,
ich habe eine (mathematische) Frage zu einem Zahlenrätsel, erschienen in der heutigen Zeitung.
Es geht mir nicht um die Lösung, die ist mit etwas Aufwand zu erraten.
Die O`s stehen für freie Stellen, in welche die passenden Zahlen eingetragen werden sollen. Die [|]'s sind schwarze Quadrate, in denen nichts steht, sie sind einfach optische Platzhalter zur besseren Übersichtlichkeit.
Das kleine x soll das mathematische Multiplikationszeichen sein (*).
39 + O - O 41
+ [|] x [|] - [|]
O + O - O 7
- [|] x [|] x [|]
O - O + O 13
37 [|] 96 [|] 36 [|]
Fügen Sie in die freien Felder (hier: die O's) die fehlenden Zahlen ein. Es wird immer von links nach rechts und von oben nach unten gerechnet.
Der mathematische Grundsatz "Punkt vor Strich" gilt hier nicht.
Ich hoffe, meine Angaben sind verständlich.
OK.
39 + 8 - 6 41
+ x -
5 + 4 - 2 7
- x x
7 - 3 + 9 13
37 96 36
(1) Ist dies die einzige Lösung? Wie kann ich das gegebenenfalls zeigen?
(2) Wie gelange ich "systematisiert" zur Lösung. Wenn ich das in ein
Gleichungssystem übersetze, erhalte ich ein unterbestimmtes LGS.
Ich kann dazu die O's durch Variable von a bis h ersetzen und die
Gleichungen aufstellen. Aber um's Raten komme ich anscheinend nicht herum. Oder doch?
Danke und Grüße
Brigitta
Hallo Britta,
spät, aber ich hoffe nicht zu spät, komme ich mit zwei Anmerkungen.
Ich komme auch nicht wegen Corona so spät, sondern hier ist eher wenig los
- wenn man von dem Streit mit und um WM mal absieht!
Wenn ich mir die Lösung so ansehe und die originäre Aufgabenstellung irgendwie vermisse, kann es sein, das in der Aufgabenstellung noch stand, das die Lösungen aus der Menge {1,2,3,...,8,9} stammen sollten und zwar so, daß man eine Zahl nur genau einmal auswählen durfte?
Und zur lineraren Gleichung mit zwei Gleichungen aber 3 Unbekannten.
Ja, ich finde das sind schöne Aufgaben.
Aber ich finden auch den Ausdruck 1-exp(2*n*Pi*i)=0 sehr schön,
speziell wenn man ihn in der "mathematischen-Schreibweise"sieht.
Es ist eine Wahre Aussage über die Symbole 0,1,2,n,e,Pi und i, find ich toll!
Ich kenne sollch ähnliche Aufgabe für eine Party
man hat 100 Getränke für genau 100 Leute.
Eim Bier kostet 0,5€ ein Wein 3€ und ein Sekt 10€.
(Oder auch ein Sekt zu 5€ - man findet dann 3 Lösungen!)
Also 0,5B + 3W +10S= 100 und B +W +S= 100
Da wohl am meisten Bier gebraucht wird um 100 zu erreichen, versucht man das Bier zu eliminieren, da man dafür die meisten "Versuche" bräuchte. Also wg.
1B +6W +20S= 200 minus B +W +S= 100 ergibt
5W +19S= 100 oder W= 20 -19/5*S
Natürlich gibt es nur ganzzahlige Getränke!
Für S=0 ist W=20 und B=80 und 3*20 +0,5*80= 100. das ist also eine Lösung.
Aber 19*S muß ein vielfaches von 5 sein (weil 19 Primzahl) und 19*S/5 < 20.
Also, für S=5 und W=1 ist B=94 und 5*10 +1*3 +94*0,5 oder 50 +3 +47= 100
hat man eine weiter Lösung und mehr kann es nicht geben!
Durch geschicktes gezieltes Suchen findet man solche Lösungen!
15H +1K +0,25M= 100 und
H +K +M= 100
59H +3K= 300 oder K= 100 -59/3 *H
und weil 59 Primzahl kann nur H= 0 od. H= 1 gelten!
Man muß nicht viel suchen (und die Aufgaben sind meistens auch so gestellt!).
Ich hoffe das hilft Dir noch.
Immer selbst mitdenken, (meistens) nichts automatisch mit Formeln machen!
Und ich hoffe das Du noch viel Spaß an der Mathematik findest!
LG Siggi N.
Entschuldigung, typisch für mich,
es muß natürlich "H= 3" heißen und nicht H= 1.
Und 3H +41k +56M= 100 und 45 +41 +16= 100
Tschüß Siggi N.
Oh wie peinlich ... 45 +41 +14= 100

(ich habe eine Aufmerksamkeitsstörung, dadurch passiert mir sowas - Pardon!
Dadurch bin ich auch Legastheniker - Leider!).
Loading...