[PYTHON] Projekt Euler 19

Problem

Die folgenden Informationen werden gegeben.

Der 1. Januar 1900 ist Montag. September, April, Juni und November haben bis zu 30 Tage, und andere Monate außer Februar haben bis zu 31 Tage. Der Februar hat 28 Tage, aber in einem heißen Jahr sind es 29 Tage. Das Jahr der Schwellung tritt in dem Jahr auf, in dem der Kalender durch 4 teilbar ist, aber das Jahr, in dem der Kalender nicht durch 400 teilbar und durch 100 teilbar ist, ist kein Jahr der Schwellung. Wie oft ist der Monatsanfang im 20. Jahrhundert Sonntag (1. Januar 1901 - 31. Dezember 2000)? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2019

Antworten

Sonntag: 0 Montag: 1 Dienstag: 2 Mittwoch: 3 Donnerstag: 4 Freitag: 5 Samstag: 6 Und. Aus dem Datum des ersten Tages des Vormonats und der Anzahl der Tage des Vormonats kann das nächste Datum des ersten Tages des nächsten Monats nach der folgenden Formel berechnet werden. (7 ist die Anzahl der Tage). Damit habe ich den folgenden Code geschrieben.

nextdate = (date+days) % 7
# -*- coding: utf-8 -*-
def getdays(month, year):
  if month in [1,3,5,7,8,10,12]:
    return 31
  elif month in [4,6,9,11]:
    return 30
  elif year%400 == 0:
    return 29
  elif year%100 == 0:
    return 28
  elif year%4 == 0:
    return 29
  else:
    return 28

def nextdate(date, month, year):
   return (date + getdays(month, year)) % 7

def nextmonth(month, year):
   if month == 12:
      #Wenn es Dezember ist, gehen Sie zum nächsten Jahr
      return (1, year+1)
   else:
      return (month+1, year)

def main():
  STARTYEAR = 1901
  LASTYEAR = 2000
  (date, month, year) = (1, 1, 1900)
  ans = 0

  while year <= LASTYEAR:

    #Datum des letzten Monats,month,Jahr bis zum nächsten Monat Datum(Tag)Erhalten
    date = nextdate(date, month, year)

    #month,Inkrementelles Jahr
    (month,year) = nextmonth(month, year)

    #Jahr ist in Reichweite und Datum ist 0(Sonntag)Dann addiere 1 zu ans.
    if STARTYEAR <= year <= LASTYEAR and date == 0:
      ans += 1

  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)
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.
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python