Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

11.08.2010, 11:42

Sollte auch keine Probleme geben, denn die maximalen Möglichkeiten sind hier mit 10! beschränkt (oder seh ich das falsch), das sind knapp 3,6 Mio, das Beispiel hier mit 8 Buchstaben kommt nur auf 1,8 Mio. (beides nicht ganz richtig, da der erste eines Wortes Länge >1 nicht gleich 0 sein darf, aber wie berechnet man das ;-) )

Na, die erste Ziffer hat 9 Möglichkeiten, weil die 0 nicht geht, die zweite hat auch 9 weil zwar die erste Ziffer nicht mehr sein kann, dafür aber wieder die 0. Danach gehts ganz normal runter, bei 8 Ziffern also ~1,63 Millionen.
Womit das ganze beschränkt ist, hängt aber letztendlich von der Implementierung ab, wenn du also für die erste Ziffer die 0 aus Bequemlichkeit oder so trotzdem testest, ist es natürlich wieder 10!/2!.
Lieber dumm fragen, als dumm bleiben!

Mastermind

unregistriert

22

11.08.2010, 12:39

Das Rätsel ist so designt dass man es ohne Maschine lösen kann.

Das Problem sind die Überträge. In diesem konkreten Fall kann man sich folgendes überlegen:

Es kann nie ein Übertrag von mehr als 1 entstehen, da 9+9=18 + eventueller übertrag = 19<20 (per induktion für alle Stellen)

Da MONEY länger ist als send&more ist M auf jeden fall ein Übertrag, also M=1

M ist auch der erste Buchstabe von MORE, also muss S 9 oder 8 sein, damit überhaupt ein übertrag entstehen kann (ggf mit übertrag von vorher). MO kann ensprechend nur 10 oder 11 sein, 11 geht aber nicht (wäre MM) also O = 0

O ist aber auchder zweite Buchstabe von MORE also wäre entweder E = N was nicht geht, oder es muss an der Stelle schon einen Übertrag gegeben haben also N=E+1. Einen Übertrag von da nach noch weiter vorne kann es aber nur geben, wenn N schon 9 war, dann wäre E 0, das ist aber schon O. Folglich gab es keinen Übertrag und S ist = 9.

Wie schon gesagt an der nächste Stelle ist zwingend ein Übertrag erforderlich. Es gilt also N=E+1 und N+R-10 = E oder N+R-9=E also ist R entweder 9 oder 8, aber 9 ist schon weg also R=8 und es gab einen Übertrag von der ersten Stelle.

Y muss mindestens 2 sein, da 0 und 1 schon weg sind. D+E muss also mindestens 12 sein. 6 und 6 geht nicht da D!=E, und da die Zahlen über 8 auch schon weg sind müssen D und E 7 und 5 oder 7 und 6 sein. E kann nicht 7 sein, da N=E+1 und 8 schon weg, also ist D=7. Nach der selben Logik kann E jetzt auch nicht mehr 6 sein, also gilt E=5 und N = 6 und Y = 2 (hätte noch bislang auch noch 3 sein können)

9567+1085=10652

fin

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

23

11.08.2010, 13:38

Und jetzt als Programm :D Und wenn möglich ohne Bruteforce ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Mastermind

unregistriert

24

11.08.2010, 14:37

Aufgrund der Nebenbedingungen gibt es im allgemeinen keine geschlossene Form des Problems.

Entweder lässt es sich auf ein bekanntes kombinatorisches Optimierungsproblem zurückführen oder es ist schlimmstenfalls NP-hart.

Wenn du nicht verstehen willst dass es ein Spielzeugrätsel ist, das nur in genau diesem Design eine leicht erschließbare Lösung hat kann man dir nicht helfen.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

25

11.08.2010, 15:16


Wenn du nicht verstehen willst dass es ein Spielzeugrätsel ist, das nur in genau diesem Design eine leicht erschließbare Lösung hat kann man dir nicht helfen.

Ich denke mal, du verstehst nicht. Ich wollte lediglich sehen, wie andere dieses Problem in einem Programm lösen ;) Der mathematische weg ist mir schon klar, nur scheitere ich bislang immer an einer Umsetzung in Form eines Programms.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Mastermind

unregistriert

26

11.08.2010, 15:49

Allgemeines Problem => Kombinatorische Optimierung / Brute Force

Dieser Spezialfall => Logisches Denken, Prolog oder wenn es umbedingt C++ sein soll wohl am besten ein degenerierter Prolog Interpreter in C++.

EDIT: Im wesentlichen bruteforced Prolog auch nur. Man könnte jedoch durch geschickte formulierung eventuell den Raum verkleinern über den die vollständige Suche läuft. Also contest geeignet wäre z.B. die Aufgabenstellung ein Prolog programm mit kürzerer Laufzeit als dieses zu schreiben:

http://clip.dia.fi.upm.es/~vocal/public_…tes/node13.html

Die Auswertung müsste natürlich unabhängig der Regelreihenfolge sein und die Regeln dürften nicht die Lösung enthalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mastermind« (11.08.2010, 16:02)


Werbeanzeige