Seite 1 von 1

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

Verfasst: Freitag 8. Januar 2010, 21:02
von Ronnie
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 :)

Verfasst: Freitag 8. Januar 2010, 21:49
von numerix
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 ...