[PYTHON] Projekt Euler15 "Gitterpfad"

Problem

Wenn Sie oben links auf dem 2x2-Quadrat beginnen, gibt es 6 Routen, die rechts unten verlaufen, ohne umzukehren. image Wie viele Routen gibt es dann auf dem 20 × 20-Quadrat? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2015

Antwortrichtlinie 1

Die Anzahl der Kombinationen ist ebenfalls erforderlich, aber ich möchte einen anderen Algorithmus ausprobieren, da dies eine große Sache ist. Die Anzahl der Entfernungen von einem Quadrat zum Ziel entspricht der Summe der Anzahl der Entfernungen von jedem der beiden Quadrate in Fahrtrichtung neben dem Quadrat zum Ziel. → Es bleibt nichts anderes übrig, als zurückzukommen! pe15.png

Code 1

def f(L,a,b):
  if not L[a][b]:
    if a == len(L)-1 or b == len(L)-1:
      L[a][b] = 1
    else:
      L[a][b] = f(L,a+1,b) + f(L,a,b+1)
  return L[a][b]

def main():
  #(x,y) = (2,2)
  (x,y) = (20,20)
  L = [[0 for i in range(0,y+1)] for j in range(i,x+1)]
  ans = f(L,0,0)
  #print ans

Antwortrichtlinie 2

Beim Durchsuchen des Webs habe ich eine Möglichkeit gefunden, die Anzahl der Pfade vom Startpunkt und nicht die Anzahl der Pfade zum Ziel mit einer for-Anweisung zu ermitteln. Ich habe es tatsächlich versucht, aber die for-Anweisung war viel schneller. Nach ein wenig Überlegung scheint diese Methode als Algorithmus effizienter zu sein. pe15_2.png

Da es eine große Sache ist, habe ich versucht, unter Berücksichtigung der Symmetrie nur die Hälfte davon zu finden. image

Code 2

def g(L,a,b):
  if a == 0:
    return 1
  elif a == b:
    return L[a-1][b]*2
  else:
    return L[a-1][b]+L[a][b-1]
  
def main2():
  seq = range(21)
  L = [[0 for i in seq] for j in seq]
  
  for a in seq:
    for b in seq[a:]:
      L[a][b] = g(L,a,b)
  #print L[20][20]

Recommended Posts

Projekt Euler15 "Gitterpfad"
Projekt Euler # 15 "Gitterpfad" in Python
Projekt Euler 37
Projekt Euler 7
Projekt Euler 47
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 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 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
Projekt Euler 11 "Maximales Produkt im Raster"
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
Ich habe Project Euler 1 in einem Liner geschrieben.
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python