Je voudrais pouvoir commencer avec une année et calculer les occurrences du vendredi 13. Une solution de force brute est facile et évidente. J'ai quelque chose de légèrement mieux, mais je n'ai aucun doute que quelqu'un d'autre peut trouver un algorithme élégant pour cela. Peut-être un peu plus compliqué, je serais intéressé à donner le programme un mois, et qu'il trouve l'année suivante dans laquelle ce mois a un vendredi 13. N'hésitez pas à utiliser le pseudo code, mais je m'attends à ce que les gens votent plus pour les échantillons de code de travail dans votre langue préférée.Calcul des occurrences futures du vendredi 13e
Répondre
Tout mois qui commence par un dimanche a un vendredi le treizième. Il n'y a que 14 combinaisons possibles sachant quel jour est le premier de l'année (avec ou sans année bissextile, et sun-sam). Vous devriez juste le calculer une fois et en finir avec. Vous ne vérifiez que 14 * 12 mois possibles pour commencer, bien avec avec raison.
élément de table résultant (à partir de 2009, 2010):
[Thursday,false] => Feb, March, Nov
[Friday,false] => Aug
pour remplir le tableau que vous avez un mois générique Jan (31), février (28) .. puis itérer avec une graine de chaque jour de la semaine, en notant les mois qui commencent avec dimanche, et aussi avec une année bissextile et sans. Assez simple, et une fois fait, vous pouvez le partager avec nous :)
C'est la méthode de table la plus rapide, afaict. Il y a quatorze types de jours de semaine - 7 pour les années non bissextiles, 7 pour les années bissextiles et 12 mois. Un tableau 2D ou 3D fournit une réponse très rapide une fois que vous savez quel jour de la semaine le 1er janvier tombe, et si c'est une année bissextile - les deux sont faciles à calculer. –
initialize startDate to 13th of the month given in the current year
while (true) {
if (startDate.dayOfWeek == Date.FRIDAY)
break;
else
startDate.year ++;
}
return startDate.year;
Depuis votre algorithme de force brute est apparemment intuitive option de jour par jour itération, peut-être vous n'avez pas considéré comme le Doomsday Algorithm. Cela vous permettrait de vérifier simplement si le 13 est un vendredi. Pour autant que je sache, c'est la solution la plus efficace au problème.
Une chose que j'ai remarquée est que le premier du mois tombe un dimanche pendant les mois avec un vendredi 13ème. Vous pouvez probablement tirer parti de cela pour le rendre plus facile à calculer.
Voilà comment je le ferais:
On suppose l'année est connue et est un entier.
boucle de 1 à 12
Créer jour avec l'index de la boucle, l'année et 13 pour la journée
Déterminer jour de la semaine comme par established algorithms
Si le jour de la semaine calculée ci-dessus est le vendredi, faites votre travail
Si vous voulez commencer par un mois et l'année (vous devez assumer une sorte de l'année), votre algorithme devient
On suppose l'année est connu et un entier
on suppose mois est connu et est un entier
boucle
Créer une date avec l'index de la boucle en année, variable mois connu, et 13 pour la journée
Déterminer jour de la semaine selon established algorithms
Si le jour de calculate la semaine ci-dessus est le vendredi, date de retour, sinon
Année incrément Else 1
Here's some example PHP code qui passe par une boucle assez directe des dates dans une plage. Je voudrais modifier cela pour vérifier le 13 de chaque mois pour le vendredi, plutôt que de vérifier tous les vendredis pour 13thness, comme ils le font dans l'exemple.
Vérification le 13 de chaque mois est certainement le meilleur moyen d'y aller. –
Ouais, semblait 4X plus efficace pour moi. :) –
- 1. Recevez le dernier vendredi du mois en Java
- 2. calcul du temps d'exécution
- 3. Calcul du temps écoulé
- 4. Calcul du mode statistique
- 5. Calcul des chemins SVG
- 6. Calcul du total dans gridview
- 7. longueur de calcul du tableau
- 8. Calcul des mois
- 9. Qu'est-ce que la MVC Futures Library?
- 10. Calcul du classement de l'impression d'annonces
- 11. Fonction Excel pour déterminer le dernier vendredi d'un mois
- 12. Calcul d'une date autour des jours ouvrables/heures?
- 13. Calcul des permutations en F #
- 14. Calcul du temps pour réaliser un projet
- 15. % opérateur pour le calcul du temps
- 16. Calcul de la longueur du contenu SOAP
- 17. calcul du temps la durée d'un fichier
- 18. Java: Cache les résultats du calcul?
- 19. Calcul du rang centile dans MySQL
- 20. Règles d'affaires pour le calcul des prix
- 21. Calcul des sommets d'un rectangle pivotée
- 22. plusieurs occurrences dans les tableaux imbriqués
- 23. MySQL: Compter les occurrences de valeurs distinctes
- 24. Est-ce que ASP.NET MVC 1.0 Futures bêta/aperçu du code?
- 25. Date de calcul pour un jour de la semaine
- 26. calcul des valeurs moyennes sur des sections de date/heure
- 27. Comment interroger filtre django sans plusieurs occurrences
- 28. Calcul des absences consécutives dans SQL
- 29. Calcul des offres uniques sur un produit
- 30. Calcul des trajectoires dans un graphe
Happy 1234567890 unix jour de l'heure! –
Peut-être que ça peut être un beau défi de golf ... – Eineki
Les films sortent assez régulièrement maintenant, une estimation d'environ 3 ans sonne à peu près juste :) – cjk