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

Smalltalk
chrbr
Beiträge: 637
Registriert: 29.10.2022 15:53:26

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

Beitrag von chrbr » 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.

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

Liffi
Beiträge: 2350
Registriert: 02.10.2004 01:33:05

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

Beitrag von Liffi » 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).

chrbr
Beiträge: 637
Registriert: 29.10.2022 15:53:26

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

Beitrag von chrbr » 20.12.2024 08:52:01

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!

Benutzeravatar
Meillo
Moderator
Beiträge: 9310
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

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

Beitrag von Meillo » 20.12.2024 09:45:13

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.
Use ed once in a while!

Benutzeravatar
Huo
Beiträge: 817
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

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

Beitrag von Huo » 20.12.2024 17:23:07

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 gewählt werden, 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

Benutzeravatar
Meillo
Moderator
Beiträge: 9310
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

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

Beitrag von Meillo » 23.12.2024 11:27:52

Huo hat geschrieben: ↑ zum Beitrag ↑
20.12.2024 17:23:07
Mein Ansatz, um die Aufgabe ohne Programmieren durch pures Knobeln zu lösen
Cool! Vielen Dank fuer diese, gut nachvollziehbare, Loesung mit reiner Gehirnzellenkraft. :THX:
Use ed once in a while!

TuxPeter
Beiträge: 2027
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

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

Beitrag von TuxPeter » 23.12.2024 14:17:32

Ich zitiere mal aus der damaligen Diskussion mit meinem Freund, dem "Lieferanten" der Rechenschlange:
Man ist ja dermaßen auf die Rechenregeln dressiert, dass man die kleine Bemerkung "Es gilt NICHT Punkt vor Strich" erst mal übersieht und locker nicht nur die 8+7 zusammenfasst, sondern auch gleich noch die 5*9. Also das Ganze erst mal korrekt geklammert. Schnell
war dann klar, dass das Ganze nur mit Ganzzahlen funktioniert, weil das Ergebnis eine solche ist und nach der einen Multiplikation nur noch Divisionen stattfinden. ... Diese sind dann wohl auch der Ansatzpunkt für eine "manuelle" Lösung, weil als Zwischenergebnisse nur bestimmte
Werte in Frage kommen. Ich bin bei meiner händischen Lösung vom Ergebnis ausgegangen. Ich wusste also, dass die beiden letzten Divisionen ganze Zahlen ergeben müssen. Und so hab ich mich von hinten nach vorne durchgehangelt.
Ich werde ihm diese feine Umwandlung von Huo mal zukommen lassen, er freut sich bestimmt!

Antworten