Seite 2 von 2

Re: Adventskalender 18. Dezember 2024 - R?ch??s??l?n?e

Verfasst: 19.12.2024 21:50:15
von chrbr
Zur Komplexität des Prolog Skripts stimme ich TRex zu. Ausser das man die Ziffern und die Gleichung angeben muss ist ja nichts enthalten. Ich finde es schon eindrucksvoll, dass Prolog daraus die Lösung ermittelt. Unschön ist mit Sicherheit nur die plumpe Art und Weise, in der ich die Ziffern angegeben habe. Das geht bestimmt eleganter. Ich habe nur noch keine Ahnung, wie man das schöner machen kann.

Von Ruby habe ich keine Ahnung. Ich habe mal von Ruby-on-Rails gehört. Das war es dann aber auch.

Re: Adventskalender 18. Dezember 2024 - R?ch??s??l?n?e

Verfasst: 20.12.2024 06:17:06
von Liffi
chrbr hat geschrieben: ↑ zum Beitrag ↑
19.12.2024 21:50:15
Zur Komplexität des Prolog Skripts stimme ich TRex zu. Ausser das man die Ziffern und die Gleichung angeben muss ist ja nichts enthalten. Ich finde es schon eindrucksvoll, dass Prolog daraus die Lösung ermittelt. Unschön ist mit Sicherheit nur die plumpe Art und Weise, in der ich die Ziffern angegeben habe. Das geht bestimmt eleganter. Ich habe nur noch keine Ahnung, wie man das schöner machen kann.
Vielleicht ist das hier minimal schöner?

Code: Alles auswählen

werte([1, 2, 3, 6, 10, 11, 13]).

formel(A, B, C, D, E, F, G) :- 
    25 is ((((A+5)*9+B-12)/C-D+8+7)/4+E-F)/G.

tst(A, B, C, D, E, F, G) :-  
    werte(Werte),
    member(A, Werte),
    member(B, Werte),
    member(C, Werte),
    member(D, Werte),
    member(E, Werte),
    member(F, Werte),
    member(G, Werte),
    is_set([A, B, C, D, E, F, G]),
    formel(A, B, C, D, E, F, G).

Re: Adventskalender 18. Dezember 2024 - R?ch??s??l?n?e

Verfasst: 20.12.2024 08:52:01
von chrbr
Liffi hat geschrieben: ↑ zum Beitrag ↑
20.12.2024 06:17:06
Vielleicht ist das hier minimal schöner?
Ja, das ist schon ein ganzes Stück kompakter. Danke!

Re: Adventskalender 18. Dezember 2024 - R?ch??s??l?n?e

Verfasst: 20.12.2024 09:45:13
von Meillo
Liffi hat geschrieben: ↑ zum Beitrag ↑
20.12.2024 06:17:06
chrbr hat geschrieben: ↑ zum Beitrag ↑
19.12.2024 21:50:15
Zur Komplexität des Prolog Skripts stimme ich TRex zu. Ausser das man die Ziffern und die Gleichung angeben muss ist ja nichts enthalten. Ich finde es schon eindrucksvoll, dass Prolog daraus die Lösung ermittelt. Unschön ist mit Sicherheit nur die plumpe Art und Weise, in der ich die Ziffern angegeben habe. Das geht bestimmt eleganter. Ich habe nur noch keine Ahnung, wie man das schöner machen kann.
Vielleicht ist das hier minimal schöner?

Code: Alles auswählen

werte([1, 2, 3, 6, 10, 11, 13]).

formel(A, B, C, D, E, F, G) :- 
    25 is ((((A+5)*9+B-12)/C-D+8+7)/4+E-F)/G.

tst(A, B, C, D, E, F, G) :-  
    werte(Werte),
    member(A, Werte),
    member(B, Werte),
    member(C, Werte),
    member(D, Werte),
    member(E, Werte),
    member(F, Werte),
    member(G, Werte),
    is_set([A, B, C, D, E, F, G]),
    formel(A, B, C, D, E, F, G).
Ja, nun ist der syntaktische Overhead geschrumpft und die Lesbarkeit gestiegen. Danke.

Re: Adventskalender 18. Dezember 2024 - R?ch??s??l?n?e

Verfasst: 20.12.2024 17:23:07
von Huo
Mein Ansatz, um die Aufgabe ohne Programmieren durch pures Knobeln zu lösen: Ich habe die Rechenschlange weitgehend ausmultipliziert, dabei einiges zusammengefasst, sowie einige Glieder auf die rechte Seite geschaufelt, dort dann wiederum a[2] ausgeklammert. So erhalte ich die zur Rechenschlange äquivalente Gleichung:

Code: Alles auswählen

9*a[0] + 33 + a[1] = a[2]*(100*a[6] + a[3] + 4*a[5] - 4*a[4] - 15)
Bei näherer Betrachtung dieser Gleichung merkt man, dass auf der rechten Seite die 100 voll durchschlägt. Die mit ihr multiplizierten Werte a[2] und a[6] müssen also möglichst klein sein, vermutlich kommen nur die Vorgabewerte 1 und 2 in Frage. Umgekehrt sollten auf der linken Seite die Werte a[0] und a[1] groß sein, um die wegen der 100 "explodierende" rechte Seite auszugleichen, die sich wiederum mit einem großen Wert für a[4] etwas abdämpfen lässt.

Mit diesen Überlegungen (große Werte für a[0], a[1] und a[4]; kleine Werte für a[2] und a[6]) und dann noch ein bisschen Herumprobieren kann man ohne Programmieren auf die Lösung kommen. :D