[PYTHON] Projekt Euler 38

Problem

Multiplizieren wir 192 mit 1, 2, 3.

   192 × 1 = 192
   192 × 2 = 384
   192 × 3 = 576

Die Verkettung der Produkte ergibt eine pan-digitale Zahl von 1 bis 9 192384576. Wir nennen 192384576 das verkettete Produkt von 192 und (1,2,3).

Auf die gleiche Weise ergibt das Multiplizieren von 9 mit 1,2,3,4,5 und das Verketten die pan-digitale Nummer 918273645. Dies ist das verkettete Produkt von 9 und (1,2,3,4,5). Gibt es.

Was ist die größte 9-stellige pan-digitale Zahl, die als verkettetes Produkt einer ganzen Zahl und (1,2, ..., n) (n> 1) erhalten wird? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2038

Antworten

Zuerst habe ich einen Generator erstellt, der aus einer bestimmten Anzahl von Zahlen eine bestimmte Anzahl von pan-digitalen Zahlen (Zeichenketten) generiert.

import copy
def pandigital(digit,seq1,seq2=[]):
  iter1 = map(str,seq1)
  if seq2:
    iter2 = map(str,seq2)
  else:
    iter2 = copy.deepcopy(iter1)
  for d in range(digit-1):
    iter1 = (x+y for x in iter1 for y in iter2 if not (y in x))
  return iter1

Geben Sie Folgendes an, um einen Generator mit einer 10-stelligen Pan-Digital-Nummer zu generieren, die am Anfang keine 0 enthält. Wenn seq2 weggelassen wird, wird seq1 nach seq2 kopiert.

 pandigital(digit=10,seq1=range(1,10),seq2=range(0,10))

Ich denke, dass dieser Generator Werte in aufsteigender Reihenfolge zurückgibt, wenn Sie den Bereich (1,10) überschreiten, und Werte in absteigender Reihenfolge zurückgibt, wenn Sie den Bereich (10,1, -1) übergeben.

Um diese Frage zu beantworten, erstellen Sie zunächst mit der obigen Funktion einen Satz 9-stelliger pan-digitaler Zahlen, PAND_SET. Um später zu ermitteln, ob andere Zahlen in diesem Satz von Pan-Digital-Zahlen enthalten sind, wird set () hier verwendet, um es unter Berücksichtigung der Referenzgeschwindigkeit zu einem Objekt vom Typ Set zu machen.

Führen Sie als nächstes eine Schleife i von 2 bis 10.000 durch und führen Sie die folgende Berechnung durch, bis s eine 9-stellige Zahl (Zeichenfolge) ist. s = str (i) + str (i * 2) + str (i * 3) ・ ・ ・

Überprüfen Sie, ob das auf diese Weise berechnete s größer als der Antwortkandidat ans ist und ob s in PAND_SET enthalten ist. Wenn beide zutreffen, ersetzen Sie ans durch s.

import pandigital
def main():
  SEARCH_MAX = 10**4
  PAND_SET = set(pandigital.pandigital(9,range(1,10)))
  ans = 0

  for i in range(2,SEARCH_MAX):
    s = str(i)
    j = 2
    while len(s)<9:
      s += str(i*j)
      j+=1
    if len(s)>=10:
      continue
    if int(s) > ans and s in PAND_SET:
      ans = int(s)
  print ans
main()

Recommended Posts

Projekt Euler 37
Projekt Euler 7
Projekt Euler 47
Projekt Euler 31
Projekt Euler 4
Projekt Euler 38
Projekt Euler 17
Projekt Euler 26
Projekt Euler 8
Projekt Euler 23
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 42
Projekt Euler 33
Projekt Euler 32
Projekt Euler 43
Projekt Euler 35
Projekt Euler 36
Projekt Euler 24
Projekt Euler 46
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
[Project Euler] Problem1
Projekt Euler15 "Gitterpfad"
Projekt Euler 2 Beschleunigung 2.21 Mikrosekunden speichern.
Projekt Euler Ursprüngliche Methodengruppe 1
Was ist Project Euler 3-Beschleunigung?
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 11 "Maximales Produkt im Raster"
Projekt Euler # 15 "Gitterpfad" in Python
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 # 7 "1000 1. Primzahl" 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
Ich habe Project Euler 1 in einem Liner geschrieben.