Dr. Layton Rätsel und Python als Lösungshilfe

Code-Stücke können hier veröffentlicht werden.
Antworten
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

Ich habe dieses schöne Rätselspiel "Dr. Layton und das geheimnissvolle Dorf" für den Nintendo DS. Einige der Rätsel haben mich animiert die Lösung mit Python zu suchen.

1. Gesucht sind eine fünf- und eine vierstellige Zahl, die voneinander subtrahiert die Zahl 33333 ergeben, wobei jede der Ziffern 1-9 nur einmal vorkommen darf:

Code: Alles auswählen

from itertools import permutations
for p in permutations('12356789'):
	a = 40000+ int(''.join(p[0:4]))
	b = int(''.join(p[4:]))
	if a-b == 33333:
                print((a, b))
2. Sieben der Ziffern von 1-9 sollen in folgendes Muster eingetragen werden, sodass das Produkt in jeder Richtung gleich ist:

Code: Alles auswählen

n   n
n n n
n   n

Code: Alles auswählen

from itertools import permutations
from operator import mul
from functools import reduce
for p in permutations(list(range(1,10))):
	a = p[0:3]
	b = p[3:6]
	c = (a[1], p[7], b[1])
	if reduce(mul, a) == reduce(mul, b) == reduce(mul, c):
		print((a, b, c))
		break
Beides wahrscheinlich nicht die optimalsten Lösungen, aber auf die Schnelle hat es geholfen :)
Achtung: User ist ein Python-Lehrling!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Eine alternative Lösung für den 1. Teil könnte so aussehen:

Code: Alles auswählen

def find_ab():
    for n in range(1234,9877):
        if len(set(str(n)+str(n+33333))-set("0")) == 9:
            return "%i - %i = 33333" %(n+33333,n)
Den 2. Teil würde ich mit Papier und Bleistift lösen:
Die Primfaktorzerlegung der Zahlen von 1 bis 9 macht deutlich, dass 5 und 7 die beiden Ziffern sein müssen, die man hier nicht gebrauchen kann, die Primfaktoren der übrigen ergeben 4x die 3 und 7x die 2 (und noch die 1). Eine gleichmäßige Verteilung auf das "'H"-Muster funktioniert nur, wenn jedes Produkt aus 2x 3 und 3x 2 besteht, also hat das Produkt den Wert 2*2*2*3*3 = 72. Die Möglichkeiten, dieses Produkt aus den verbleibenden 7 Zahlen zu bilden, sind dann begrenzt ...
Antworten