[PYTHON] Projekt Euler 34

Problem

145 ist eine interessante Zahl. 1! + 4! + 5! = 1 + 24 + 120 = 145.

Suchen Sie die Summe der Zahlen, sodass die Summe der Skalen jeder Ziffer mit sich selbst übereinstimmt.

Hinweis: 1! = 1 und 2! = 2 dürfen nicht in der Summe enthalten sein. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2034

Antworten

Ich habe eine Funktion erstellt, um zu beurteilen, ob eine bestimmte Zahl die Summe der Skalen ist.

def is_wa_of_kaijo(i,kaijos):
  s = 0
  for j in str(i):
    s+= kaijos[int(j)]
  if i == s:
    return True
  else:
    return False

Mit dieser Funktion haben wir eine 100% ige Suche innerhalb des Bereichs durchgeführt, der als Maximalwert angesehen wurde, der jedoch sehr langsam war. Da n> = 7 und 10 ** n -1> 9! * N ist, reicht es aus, den Bereich bis zu 9! * 7 zu durchsuchen.

def main():
  MAX = math.factorial(9)*7
  kaijos = [math.factorial(x) for x in range(0,10)]
  ans = 0
  for i in range(3,MAX):
    if is_wa_of_kaijo(i,kaijos):
      ans += i
  print ans

Als anderen Ansatz habe ich zuerst ein Objekt vom Typ Summensatz mit maximal 7 Faktoren erstellt und dann versucht, eine 100% ige Suche nach dem Objekt vom Typ Summensatz mit diesem Rang durchzuführen. Zumindest sollte der Entscheidungsteil schneller sein, da die Suchpopulation kleiner ist. Ich habe versucht, mich an die Faktoren zu erinnern, als ich die Summenliste der Skalen erstellt habe, aber ich habe die Implementierung aufgegeben, weil es ein sehr komplizierter Prozess wurde. Die Potenz von Null ist 1, aber zu Beginn wird sie auf 0 gesetzt, da der Wert der Liste ohne Addition beibehalten wird.

def main2():
  kaijos = [0] + [math.factorial(x) for x in range(1,10)]
  kaijos2 = set(x1+x2 for x1 in kaijos for x2 in kaijos)
  kaijos3 = set(x1+x2 for x1 in kaijos for x2 in kaijos2)
  kaijos4 = set(x1+x2 for x1 in kaijos2 for x2 in kaijos2)
  kaijos7 = set(x1+x2 for x1 in kaijos3 for x2 in kaijos4)
  kaijos[0] = 1
  ans = -3
  for i in kaijos7:
    if is_wa_of_kaijo(i,kaijos):
      ans += i
  print ans

Ich habe auch eine Version in Betracht gezogen, die die Einschlussnotation des Generators leicht erhöht.

def main3():
  kaijos = [0] + [math.factorial(x) for x in range(1,10)]
  kaijos7 = set(x1+x2+x3+x4+x5+x6+x7 for x1 in kaijos for x2 in kaijos for x3 in kaijos for x4 in kaijos for x5 in kaijos for x6 in kaijos for x7 in kaijos)
  kaijos[0] = 1
  print len(kaijos7)
  ans = -3
  for i in kaijos7:
    if is_wa_of_kaijo(i,kaijos):
      ans += i
  #print ans

Ausführungszeit main2() 0.484 main3() 18.011

Ich werde später untersuchen, was die Ursache für diesen Unterschied in der Ausführungszeit ist.

Recommended Posts

Projekt Euler 37
Projekt Euler 47
Projekt Euler 31
Projekt Euler 4
Projekt Euler 38
Projekt Euler 26
Projekt Euler 8
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 33
Projekt Euler 32
Projekt Euler 43
Projekt Euler 35
Projekt Euler 36
Projekt Euler 24
Projekt Euler 48
Projekt Euler 45
Projekt Euler 6
Projekt Euler 44
Projekt Euler 39
Projekt Euler 40
Projekt Euler 49
Projekt Euler 29
Projekt Euler 27
Projekt Euler 41
Projekt Euler 18
Projekt Euler 13
Projekt Euler 30
Projekt Euler 16
Projekt Euler 14
Projekt Euler 34
Projekt Euler 25
Projekt Euler15 "Gitterpfad"
Projekt Euler 2 Beschleunigung 2.21 Mikrosekunden speichern.
Projekt Euler Ursprüngliche Methodengruppe 1
Funktionsprogrammierung in Python Project Euler 1
Projekt Euler 10 "Summe der Primzahlen"
[Hinweis] Project Euler in Python (Problem 1-22)
Funktionale Programmierung in Python Project Euler 3
Projekt Euler # 5 "Minimum Multiple" in Python
Project Euler 4 Versuch zu beschleunigen
Funktionsprogrammierung in Python Project Euler 2
Projekt Euler # 4 "Maximale Kalligraphie" in Python
Projekt Euler 9 Aufbewahrung der Berechnungsergebnisse
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Projekt Euler # 11 "Maximales Produkt im Raster" in Python
Projekt Euler # 16 "Summe der Kräfte" in Python
Projekt Euler # 9 "Spezielle Pitagolas-Nummer" in Python
Projekt Euler # 14 "Längste Spalte mit Kollatennummern" in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Projekt Euler # 8 "Maximales Produkt in Anzahl Zeichenfolge" in Python
Projekt Euler # 10 "Summe der Primzahlen" in Python
Projekt Euler 28 Ineffizienter Antwortvorschlag Erstellen Sie "Spiral Lined Numbers"
Projekt Euler 4 Die Codierung mit einem neuen Ansatz schlägt fehl.
Projekt Euler # 12 "Hochangepasste Dreiecke" in Python