¦WΘ1š-1šVтFY`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVY})DJIJk18+£35.£¬.•4ιõ÷‡o‹ƶ¸•2ôs`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%._s€нT‰J«7ô»
Entrez dans le format [day, month, year]
. Sortie avec les principaux 0
s pour les jours à un seul chiffre, et minuscule mo
par su
(1 octet peut être ajouté si titlecase est obligatoire).
Essayez-le en ligne ou vérifiez tous les cas de test .
Putain de merde… C'est peut-être mon nouveau record pour la réponse la plus longue 05AB1E, puis j'inclus quelques défis très complexes que j'ai rencontrés dans l' art ascii …>.> EDIT: Hum ok, presque…; p
Remarque importante: 05AB1E ne contient aucune propriété intégrée pour les objets Date ou les calculs. Les seules dates intégrées sont les suivantes: année / mois / jour / heures / minutes / secondes / microsecondes.
Donc, à cause de cela, presque tout le code que vous voyez est un calcul manuel permettant de calculer les jours précédents et suivants (y compris la transition d’une année à l’autre et en gardant à l’esprit les années bissextiles), et de calculer le jour de la semaine en utilisant la congruence de Zeller .
Des parties énormes du code sont copiées à partir de ma précédente réponse 05AB1E , ce qui sera également pertinent pour l'explication ci-dessous.
Explication:
Nous commençons par aller au premier jour du mois précédent:
¦ # Remove the first item (the days) from the (implicit) input
W # Get the minimum (without popping the list itself)
# (since the year is guaranteed to be above 1599, this is the month)
Θ # Check if its exactly 1 (1 if 1, 0 if in the range [2,31])
1š # Prepend a 1 as list (so we now have either [1,1] or [1,0]
- # Subtract this from the month and year
1š # And prepend a 1 for the day
V # Pop and store this first day of the previous month in variable `Y`
Ensuite, j'utilise cette date comme date de début et calcule les 100 prochains jours:
тF # Loop 100 times:
Y`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝV
# Calculate the next day in line
# (see the linked challenge above for a detailed explanation of this)
Y # And leave it on the stack
}) # After the loop: wrap the entire stack into a list, which contains our 100 days
Ensuite, avec la date d'entrée au milieu, je ne laisse que les 17 avant et 17 après cette date d'entrée de la liste:
DJ # Duplicate the 100 dates, and join the day/month/year together to strings
IJ # Push the input, also joined together
k # Get the 0-based index of the input in this list
# (the joins are necessary, because indexing doesn't work for 2D lists)
18+ # Add 18 to this index (18 instead of 17, because the index is 0-based)
£ # Only leave the first index+18 items from the 100 dates
35.£ # Then only leave the last 35 items
Maintenant nous avons nos 35 jours. La prochaine étape consiste à calculer le jour de la semaine et à créer l'en-tête de la table de sortie:
¬ # Get the first date of the list (without popping the list itself)
.•4ιõ÷‡o‹ƶ¸• # Push compressed string "sasumotuwethfr"
2ô # Split it into chunks of size 2
s # Swap to get the first date again
`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%
# Calculate the day of the week (sa=0; su=1; ...; fr=6)
# (see the linked challenge above for a detailed explanation of this)
._ # Rotate the list of strings that many times
Voir cette astuce de mes 05AB1E (section Comment chaînes Compresser ne font pas partie du dictionnaire? ) Pour comprendre pourquoi .•4ιõ÷‡o‹ƶ¸•
est "sasumotuwethfr"
.
Ensuite, nous créons les jours pour remplir la table elle-même en fonction de notre liste de dates précédemment créée. Que nous allons fusionner avec l'en-tête. Après quoi, nous pouvons imprimer le résultat final:
s # Swap to get the list of dates again
€н # Only leave the first item of each date (the days)
T‰ # Take the divmod 10 of each
J # Join those divmod results together
# (we now have leading 0s for single-digit days)
« # Merge this list together with the header list
7ô # Split it into chunks of size 7
» # Join each inner list by spaces, and then each string by newlines
# (and output the result implicitly)
JavaScript (ES6),
141126 octetsA sauvé 15 octets en empruntant
.toUTCString().slice(0,2)
à la réponse de NeilPrend l'entrée en tant qu'objet Date.
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
205152145 octetsEssayez-le en ligne! Prend la saisie en tant qu'objet Date ou horodatage JavaScript. Edit: 1 octet sauvegardé grâce à @EmbodimentofIgnorance, qui m’a ensuite permis de sauvegarder 7 octets supplémentaires en ajoutant une nouvelle ligne à la sortie. J'ai enregistré 52 octets lorsque j'ai découvert que je travaillais sur un comportement qui n'était pas vraiment un buggy au départ ...
la source
padStart(2)
->padStart(3)
, supprime l'espace dans la chaîne de jointure pour -1 octetPerl 6 , 87 octets
Essayez-le en ligne!
Prend un
Date
objet, retourne une liste de lignes.la source
C # (compilateur interactif Visual C #) ,
124120 octetsEssayez-le en ligne!
la source
Wolfram Language (Mathematica) , 123 octets
Essayez-le en ligne!
Je ne sais pas pourquoi
Grid
ne fonctionne pas sur TIO mais ce code affiche cette@DavidC enregistré 1 octet
la source
Grid
- être que ça ne fonctionne pas parce que TIO ne peut pas centrer les éléments comme dans votre image?MATL ,
343331 octetsEssayez-le en ligne!
Explication
la source
Java (JDK) , 149 octets
Essayez-le en ligne!
Crédits
la source
i
et enj
quelque sorte? Ou quelque chose de plus courtj++%7<1?10:32
avec de la magie au niveau des bits? Mais je vous laisse ça. Je retourne au travail, lol. ;)w
sigle? Pourquoi pash
pour en-tête?w
pour "jour de w eek". En outre, le peu de tournoiement ne peut que conduire à(i%7+6)/7*22+10
ce qui est beaucoup plus long.PHP ,
197189187 octetsEssayez-le en ligne!
L'entrée est
STDIN
comme une chaîne de date. Courez avecphp -nF
.Vérifier tous les cas de test
Ou 174 octets avec des chiffres simples et sans remplissage.
la source
Excel VBA,
190159 octetsMerci @TaylorScott
Prend une entrée sous la forme d'une chaîne de date valide pour VBA Excel (par exemple, 19 février 2020; 19/02/2020; 19 février 2019) et renvoie un tableau avec le calendrier donné centré sur celui-ci.
la source
Function z(i)
Dim d(5,6)
v=DateValue(i)-17
For x=1To 5
For y=0To 6
d(0,y)=Left(WeekdayName(Weekday(v+y)),2)
d(x,y)=Day(v+y+(x-1)*7)
Next y,x
z=d()
End Function
Rouge ,
153131 octetsEssayez-le en ligne!
la source
T-SQL, 203 octets
La version en ligne est légèrement différente, cette version publiée fonctionne dans MS-SQL Studio Management. Il enregistre 1 octet par rapport à la version en ligne, mais ne donne pas le résultat correct en ligne
Essayez-le en ligne
la source
Python 2 , 115 octets
Essayez-le en ligne!
Vous ne savez pas si cela est autorisé ... prend les données de STDIN dans le formulaire
date(year, month, day)
. Cela peut aussi être représenté comme__import__('datetime').date(year, month, day)
. Ce sont vraiment des__import__('datetime').date
objets.la source