Imprimer les dates de tous les dimanches en 2017 dans le format suivant: dd.mm.yyyy
.
Production attendue:
01.01.2017
08.01.2017
15.01.2017
22.01.2017
29.01.2017
05.02.2017
12.02.2017
19.02.2017
26.02.2017
05.03.2017
12.03.2017
19.03.2017
26.03.2017
02.04.2017
09.04.2017
16.04.2017
23.04.2017
30.04.2017
07.05.2017
14.05.2017
21.05.2017
28.05.2017
04.06.2017
11.06.2017
18.06.2017
25.06.2017
02.07.2017
09.07.2017
16.07.2017
23.07.2017
30.07.2017
06.08.2017
13.08.2017
20.08.2017
27.08.2017
03.09.2017
10.09.2017
17.09.2017
24.09.2017
01.10.2017
08.10.2017
15.10.2017
22.10.2017
29.10.2017
05.11.2017
12.11.2017
19.11.2017
26.11.2017
03.12.2017
10.12.2017
17.12.2017
24.12.2017
31.12.2017
code-golf
kolmogorov-complexity
date
ShinMigami13
la source
la source
Réponses:
Python 2 , 81 octets
Essayez-le en ligne!
Aucune bibliothèque de dates, calcule les dates directement. L'astuce principale consiste à traiter le
dd.mm
comme une valeur décimale. Par exemple,16.04.2017
(16 avril) correspond au nombre16.04
. Le numéro est imprimé au format commexx.xx
en.2017
annexe.Le jour et le mois sont calculés de façon arithmétique. Chaque semaine ajoute 7 jours terminés
x+=7
. Prendrex
modulo30.99
gère le roulement en soustrayant30.99
chaque fois que le nombre de jours devient trop grand. Cela se combine-31
pour réinitialiser les jours avec+0.01
pour incrémenter le mois.Le roulement suppose que chaque mois a 31 jours. Les mois avec moins de jours sont ajustés en poussant
x
vers le haut sur certains numéros de semaine avec+[8,8,8,17,25,38,47].count(x/7)
. Cette liste est des numéros de semaine se terminant ces courts mois, avec8
triplé car février est 3 jours de moins que 31.Cette liste pourrait être compressée en une chaîne en prenant des valeurs ASCII plus 40. Le décalage de
+40
pourrait être évité en utilisant des caractères non imprimables, et pourrait être accessible plus court en tant qu'objet d'octets en Python 3.la source
'888z!}+'.count(chr(x%146))
enregistre un octet.PHP, 48 octets
PHP, 46 octets (pour les décalages UTC non négatifs)
la source
gmdate
pour la sécurité du fuseau horaire? Il échoue sur onlinephpfunctions.com. Excellent travail dans tous les autres aspects!Python 2 ,
9079 octets-5 octets avec l'aide de xnor (évitez de compter les semaines elles-mêmes)
-1 octet grâce à xnor (ajoutez en e pour 605000 comme 605e3)
Essayez-le en ligne!
0
secondes depuis l'époque est 00:00:00 le 1er janvier 1970, qui, comme 2017 n'était pas une année bissextile.605000
secondes est de 1 semaine, 3 minutes, 20 secondes. Ajouter 52 de ces "semaines" ne nous prend pas au-delà de minuit.la source
605e3
. J'ai quelques idées cependant :)Bash + coreutils, 44 octets
peut économiser 2 octets
-u
si GMT est supposé-f
paramètre pourdate
lequel enregistre 10 octets;@0
est 1970-1-1605000
est d'une semaine (604800
) plus 200 sec@32000000
est juste un peu plus d'un anla source
seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Y
vous fait économiser 10 octets. Vous devriez probablement réclamer cela comme Bash + coreutils .PowerShell,
5147Assez simple. Le 01-01-2017 est un dimanche, tout comme les sept jours suivants. Nous pouvons économiser deux octets si nous avons seulement besoin que le script fonctionne de mon vivant:
la source
(date 2017-1-1)+7.*$_
. Voir cette réponseint
Jusqu'à présent, je ne connaissais que l'ajout de tiques et de chaînes. Bon à savoir.Excel VBA
1069179 octetséconomisé 15 octets grâce à @Radhato
En supposant que le 1/1/2017 est dimanche, il économisera 12 octets supplémentaires.
Merci @Toothbrush 66 octets
Modifier: (Sub et End Sub ne sont pas nécessaires) 52 octets
la source
Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub
est un code VBA parfaitement valide et ne fait que 66 octets. Le fait que l'éditeur VBA ajoute des espaces supplémentaires n'est pas pertinent.PHP, 67 octets
En utilisant le fait que PHP attribue automatiquement la valeur 1 aux variables de boucle non déclarées, et en utilisant les époques Linux,
la source
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);
devrait être okphp -r
donc vous n'avez pas besoin<?php
et?>
pouvez donc compter cela comme l'a dit59 bytes
@JonathanAllan correctement. Vous n'avez pas besoin des parenthèses autour$t
. Quelques autres golfs et vous vous retrouvez avecfor(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);
pour51 bytes
(dans mon fuseau horaire). Vous pouvez remplacer "\ n" par un vrai saut de ligne qui n'est que de 1 octet donc c'est 51 octets.gmdate
au lieu dedate
pour la sécurité du fuseau horaire.k6, 32 octets
Brève explication:
Hélas, cela ne semble fonctionner que dans l'interprète à code source fermé, sur demande uniquement.
la source
Pyke ,
2624 octetsEssayez-le en ligne!
Ou 11 octets
Si autorisé à ignorer le format de sortie
Essayez-le en ligne!
la source
R,
796758 octetsLe premier janvier étant un dimanche, cet extrait crée une séquence de jours, tous les 7 jours à partir du 01-01-2017 au 31-12-2017, les formate au format souhaité et les imprime.
la source
print(as.Date("2017-01-01")+seq(7,365,7))
Befunge-98 (PyFunge) ,
99959385 octets, Feuilles en fin de ligneToutes les optimisations ont été faites par @JoKing merci beaucoup à eux
Essayez-le en ligne!
J'avais l'impression que nous manquions une certaine esostéricité ici, alors j'ai fait une solution dans ma langue esostérique préférée.
Explication :
>8><><>><><>
Encode la durée des 12 moiss
Stockez l'ancien jour dans l'espace vide:1g2/
Obtenez une valeur ASCII dans la ligne du bas et divisez-la par deux, cela nous donne la longueur d'un mois donné Ex: 8 = 56 en ASCII => 56 / 2 = 28 => Le mois (février) a 28 jours10g\%
Obtenez le jour précédemment enregistré et modulez-le en fonction de la longueur du mois, ce qui nous permet de passer de la date au mois suivant:d1p
Enregistrer une copie du nouveau jour mis à jour10g\`+
Tester si l'ancienne date > nouvelle date => nous:b`
sommes passés au mois suivant => ajouter 1 au compteur de mois Test si le compteur de mois> 11 cela signifie que nous avons atteint la fin de l'année (en utilisant l'indexation 0)#@_
Basé sur le précédent si terminer le programme:1\0d1g
Réorganiser la pile ça ressemble à ça:Month, 1, Month, 0, Day
#
ignorer la prochaine instruction (duh)1+:a/'0+,a%'0+,'.,
Convertir le nombre en indexation 1, imprimer, ajouter un.
à la finj;
Utilisez le 0 de la pile pour ne pas sauter et utilisez le;
pour revenir à la planification d'impression puis utilisez le 1 pour sauter par-dessus le;
suivant tempsa"7102"4k,
Imprimer2017\n
d1g
Obtenir à nouveau la valeur du jour7+
Ajouter une semaine avant de répéterla source
JavaScript,
111106 octetsRemarque: la console de Stack Exchange n'est pas assez longue pour afficher la liste complète, alors voici la première moitié sous forme d'extrait distinct:
Le format personnalisé me coûte 40 octets ...
la source
Perl 5 , 64 octets
Essayez-le en ligne!
La tâche donnée était 2017, pas n'importe quelle année, j'ai donc codé en dur:
POSIX est un module de base et est toujours installé avec Perl5. Faire de même sans utiliser de modules sur 101 octets, en supprimant les espaces:
la source
Rubis, 75 octets
Solution simple pour comprendre les dates avec
Time
.la source
t=Time.new 1
puis fairet.strftime"%d.%m.2017"
pour -1 octet.SAS,
5250 octetsEnregistré 2 octets grâce à @ user3490.
la source
data;
place dedata c;
et cela économise 2 octets. Je pense que vous en avez besoinrun;
.data _null_
? En outre, l'run
instruction est implicite si elle est manquante.datan
convention de dénomination.Mathematica
9084 octetsAssez verbeux. numbermaniac et Scott Milner ont économisé respectivement 5 et 1 octets.
la source
Most@
? La sortie semble être identique sans elle.Most
était là pour éviter le premier dimanche de 2018. J'avais à l'origine testé le code, sansMost
, depuis des années, 2011, 2012, auquel cas le premier dimanche de 2012 est inclus dans la sortie. (C'est pourquoi je l'ai inclus dans le code.) Étrangement, ceMost
n'est pas nécessaire pour 2017-18. Cela n'a pas nonMost
plus d'effet apparent sur le résultat. Mystérieux!VBA, 81 octets (peut-être 64)
Mon premier post. S'appuyant sur la solution de newguy en supprimant le chèque pour les jours de la semaine et en spécifiant simplement tous les 7 jours. La suppression des dates permet d'économiser 12 octets par pièce. 42736 est le 1/1/2017. Le format de date de sortie dépend du paramètre système. Est-ce permis? Si c'est le cas, c'est 64 octets car vous n'avez pas besoin de la méthode de formatage .
la source
For i=0To 52
etFormat(42736+i*7,"dd.mm.yyyy")
. En outre, vous pouvez simplement utiliserNext
au lieu deNext i
.AHK , 67 octets
Rien de magique ne se passe ici. J'ai essayé de trouver un moyen plus court que
FormatTime
mais j'ai échoué.la source
Java 8+,
10410099 octetsJava 5+,
109105104 octetsUtilise les capacités de date du
printf
format.Testez-le vous-même!
Des économies
la source
T-SQL, 94 octets
si vous n'aimez pas SQL GOTO ou WHILE, voici une solution CTE de 122 octets
la source
08.01.2017
not01.01.2017
Ruby, 60 + 7 = 67 octets
Utilise le
-rdate
drapeau.la source
Groovy,
8177636056 octetsCe qui précède peut être exécuté en tant que script groovy.
Ma première entrée de golf de code. Heureusement, l'année 1970 n'a pas été une année bissextile et peut donc être utilisée comme base.
Merci à Dennis, voici une: Essayez-le en ligne!
la source
53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}
, 52 octets. Défendre l'honneur de groovy ici ...C #,
138111102 octetsSauvegardé 9 octets de plus grâce à Johan du Toit !
Enregistré 27 octets grâce aux suggestions de Kevin Cruijssen !
Fonction anonyme qui imprime tous les dimanches en 2017.
Programme complet avec méthode non golfée:
la source
.AddDays(7*i++)
? Ensuite, il n'est pas nécessaire de.DayOfWeek<1
vérifier. Nous savons que le 01-01-2017 est un dimanche, et à partir de là, nous pouvons continuer à ajouter 7 jours.System
s là-dedans -System.DateTime
etSystem.Console.Write
?()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
using
instructions doivent être incluses dans le nombre d'octets.using
instructions nécessaires pour exécuter le code doivent être comptées. Voir cette méta-question: dois-je utiliser les importations ou puis-je appeler une classe explicite?C #,
110109 octetsVous pouvez profiter de ce programme en ligne ici
Dans cette soluion, nous:
Utilisez OLE Automation Date (OADate) pour éviter "AddDay ()" de datetime.
FromOADate()
semble grand, mais il est égal ànew DateTime(2017,1,1)
Commencez la boucle le dernier dimanche de 2016. pour nous permettre d'incrémenter avec l'opérateur
+=
uniquement. Cet opérateur renvoie la valeur une fois l'incrémentation effectuée.Incrément de 7 jours pour passer de dimanche à dimanche avant d'imprimer la date.
Nous nous arrêtons une fois le dernier dimanche de 2017 touché.
UtilisezDebug
au lieu deConsole
pour enregistrer deux caractèresÉvitez d'avoir une déclaration et une affectation explicites de variables
la source
using System;
et de passer àConsole
partir deDebug
(qui est un peu douteux lui-même, mais je peux ne trouve aucun commentaire sur les méta à ce sujet).Debug
pourConsole
depuisDebug
nécessaire une inclure spécifique. Cependant, je n'ai pas respecté le «système d'utilisation» car mon concurrent dans cette langue ne le fait pas. De plus, vous ne pouvez pas coder en dehors d'une classe qui elle-même doit être définie dans un espace de noms. Je suis presque sûr que la plupart des réponses c # sur ce site ne comprennent pas cela. Alors maintenant, jetons-nous toutes ces réponses à la poubelle? Devons-nous tous les voter pour les forcer à se conformer? Si c'est le cas, la communauté pourrait tout aussi bien interdire c # de codegolf.using
directive ou qualifier entièrement les méthodes et les types, veuillez ne pas prendre cela personnellement. Je suis un golfeur de longue date en C #, et j'apprécie à quel point les règles semblent arbitraires, donc j'aime pousser les gens dans la bonne direction quand je le peux. Je cible spécifiquement les réponses C # parce que je suis relativement bien informé sur la question.using System;
(je suppose que ce n'était pas intentionnel), donc c'est 109 octets.TSQL,
112105 octetsDémo
Syntaxe de conversion T-SQL
la source
DAY
pard
. C'est la même chose.'20170101'
par42734
. Les dates sont des nombres. Le temps est la partie décimale du nombre.JavaScript (ES6), 123 octets
C'est mon premier post ici, bonjour!
Cette solution utilise des données codées en dur et est conçue pour fonctionner spécifiquement pour l'année 2017. Elle ne repose sur aucune API de date / heure.
En ce qui concerne les chiffres de la chaîne
155274263153
, chaque chiffre est un nombre propre et désigne le premier dimanche de chaque mois consécutif. La production pour l'année entière peut être générée en ajoutant successivement 7 à ceux-ci.Et le nombre magique
2633
, utilisé dans la boucle?Eh bien ...
2633
(décimal) est101001001001
en binaire. Maintenant, qu'est-ce que cela pourrait1
signifier? En partant de la droite, les 1er, 4e, 7e, 10e et 12e bits sont définis. Cela correspond aux mois qui se trouvent avoir cinq dimanches, par opposition à ceux qui n'en ont que quatre. Golfed jusqu'à cette expression propre, initialement ressemblait à ceci:for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++)
.Je suppose que les autres parties sont assez explicites.
la source
ECMAScript 2015
àJavascript (ES6)
, mais ... vous avez cassé mon code et j'ai dû le rétablir.a=
code, le code est réellement cassé .T-SQL,
7977 octetsAprès avoir aidé Salman A à améliorer sa réponse . J'ai décidé d'écrire le mien en utilisant une boucle et
PRINT
.J'ai terminé avec cette solution de 90 octets.
Ensuite, j'ai regardé le leader actuel de T-SQL, qui était de 94 octets de WORNG ALL avec cette réponse . Ce gars avait trouvé de très bonnes astuces.
@
GOTO
au lieu d'une boucle réelleFORMAT
au lieu deCONVERT
. (SSMS2012 + uniquement)À l'aide de ces astuces, cette solution a été réduite à la solution ci-dessous, qui est de 79 octets.
la source
Octave , 37 octets
Beaucoup plus court que toutes les autres langues non golfiques, et c'est même à égalité avec Jelly! Bravo Octave! :)
Essayez-le en ligne!
Heureusement, l'année
2 AD
ressemble exactement à l'année2017 AD
. Les deux commencent et se terminent un dimanche, et ni l'une ni l'autre n'est une année bissextile. Cela économise beaucoup d'octets, car il367:7:737
est beaucoup plus court que736696:7:737060
.Cela convertit le nombre de jours depuis
01.01.0001
, en une chaîne sur le formatDD.mm
, avec un suivi.2017
.la source
Haskell ,
133130 octetsEssayez-le en ligne!
Sans bibliothèque de calendrier,
148144140 octetsC'est drôle car l'utilisation d'un opérateur pour la fonction de remplissage économise deux octets même si le deuxième argument n'est pas utilisé, car moins de parenthèses sont nécessaires -
p(last l)
est plus long quelast l!l
. Fonctionne en calculant lesday/month
paires en soustrayant les dates cumulées de début de mois du jour de l'année. Les dates de début du mois sont compressées en tant que (scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]
). Le numéro du mois est le nombre d'éléments positifs et le numéro du jour est le dernier élément positif.Essayez-le en ligne!
la source
C #,
116114113 octetsfor(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Peut être exécuté dans les fenêtres interactives de Visual Studio (ou tout autre REPL C # basé sur Roslyn)
Jusqu'à 113 octets: merci à Kevin Cruijssen.
la source
for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
using System;
et d'utiliserConsole.WriteLine(string)