[PYTHON] Projet Euler 19

problème

Les informations suivantes sont données.

Le 1er janvier 1900 est lundi. Septembre, avril, juin et novembre ont jusqu'à 30 jours, et tous les mois sauf février ont jusqu'à 31 jours. Février a 28 jours, mais dans une année étouffante, il est de 29 jours. L'année du gonflement survient dans l'année où le calendrier est divisible par 4. Cependant, l'année où le calendrier n'est pas divisible par 400 et divisible par 100 n'est pas une année de gonflement. Combien de fois le début du mois est-il dimanche au cours du 20e siècle (du 1er janvier 1901 au 31 décembre 2000)? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2019

Répondre

Dimanche: 0 Lundi: 1 Mardi: 2 Mercredi: 3 Jeudi: 4 Vendredi: 5 Samedi: 6 Et. À partir de la date du premier jour du mois précédent et du nombre de jours du mois précédent, la date suivante du premier jour du mois suivant peut être calculée par la formule suivante. (7 est le nombre de jours). J'ai écrit le code suivant en utilisant ceci.

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:
      #Si c'est décembre, passez à l'année suivante
      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:

    #Date du mois dernier,month,année à la date du mois suivant(journée)Avoir
    date = nextdate(date, month, year)

    #month,Année incrémentale
    (month,year) = nextmonth(month, year)

    #l'année est comprise dans la plage et la date est 0(dimanche)Puis ajoutez 1 à ans.
    if STARTYEAR <= year <= LASTYEAR and date == 0:
      ans += 1

  print ans

main()

Recommended Posts

Projet Euler 37
Projet Euler 7
Projet Euler 47
Projet Euler 31
Projet Euler 4
Projet Euler 38
Projet Euler 17
Projet Euler 26
Projet Euler 8
Projet Euler 23
Projet Euler 22
Projet Euler 19
Projet Euler 50
Projet Euler 42
Projet Euler 33
Projet Euler 32
Projet Euler 43
Projet Euler 35
Projet Euler 36
Projet Euler 24
Projet Euler 46
Projet Euler 48
Projet Euler 45
Projet Euler 6
Projet Euler 44
Projet Euler 39
Projet Euler 40
Projet Euler 49
Projet Euler 29
Projet Euler 27
Projet Euler 41
Projet Euler 18
Projet Euler 13
Projet Euler 30
Projet Euler 16
Projet Euler 14
Projet Euler 34
Projet Euler 25
[Projet Euler] problème1
Projet Euler15 "Chemin du treillis"
Project Euler 2 Acceleration 2.21 Économisez des microsecondes.
Projet Euler Original Method Group 1
Qu'est-ce que Project Euler 3 Acceleration?
Programmation fonctionnelle dans Python Project Euler 1
Projet Euler 10 "Somme des nombres premiers"
[Note] Projet Euler en Python (problème 1-22)
Projet Euler # 5 "Minimum Multiple" en Python
Projet Euler 4 Tentative d'accélération
Programmation fonctionnelle dans Python Project Euler 2
Projet Euler 11 "Produit maximum dans la grille"
Projet Euler # 15 "Lattice Path" en Python
Projet Euler # 4 "Calligraphie maximum" en Python
Projet Euler 9 Conservation des résultats des calculs
Projet Euler # 3 "Maximum Prime Factors" en Python
Projet Euler # 11 "Produit maximum dans la grille" en Python
Projet Euler # 7 "1000 1er nombre premier" en Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Projet Euler # 9 "Numéro spécial Pitagolas" en Python
Projet Euler # 14 "Colonne de nombre de collats la plus longue" en Python
J'ai écrit Project Euler 1 en une seule ligne.
Projet Euler # 2 "Even Fibonacci Number" en Python