introduction
Souvent, les gens appellent les dates le "deuxième vendredi d'août 2018" ou le "quatrième dimanche de mars 2012". Mais c'est difficile de dire à quelle date c'est! Votre tâche consiste à écrire un programme qui reçoit un an, un mois, un jour de la semaine et un entier et à sortir cette date.
Défi
Pour la saisie, vous obtiendrez une année, un mois, un jour de la semaine et un nombre.
Vous pouvez prendre des entrées dans n'importe quel format raisonnable, comme utiliser une chaîne pour le jour de la semaine ou utiliser un jour de semaine indexé zéro, ou même prendre l'année et le mois dans une seule chaîne. Expliquez cependant votre format de saisie dans votre réponse.
Le nombre entier qui vous indique quel jour de la semaine du mois cibler sera un nombre entier de 1 à 5. L'entier ne fera jamais référence à un jour de la semaine qui n'existe pas (par exemple le cinquième vendredi de février 2019, qui n'existe pas).
Les années seront toujours positives.
Votre sortie peut être dans n'importe quel format raisonnable, y compris l'impression de votre date finale. Cependant, veuillez expliquer votre format de sortie et votre réponse.
Fournir l'année et le mois dans la sortie est facultatif. Vous pouvez également supposer que la date est valide.
Exemple d'entrée et de sortie
Considérez cette entrée, avec le format prenant l'année comme un nombre à 4 chiffres, le mois comme un entier, le jour de la semaine comme une chaîne et le nombre ordinal comme un entier:
2019, 3, samedi, 2
2019, 12, dimanche, 1
2019, 9 samedi, 1
Production:
9 mars
1er décembre
7 septembre
C'est le code-golf , donc la réponse la plus courte l'emporte.
date
, mais de manière amusante, l'analyseur a une ... interprétation intéressante ici.Réponses:
Modèle MediaWiki, 19 octets
Il s'agit d'un port MediaWiki Template ParserFunctions de cette réponse PHP
Remarque:
#time
utilisez PHP enstrtotime
interne.Exemple d'entrée
Exemple de sortie
la source
Japt,
1915 octetsL'entrée est: année, indice 0 du mois, indice 0 du jour de la semaine (
0
dimanche) &n
.Essayez-le
la source
C # (Visual C # Interactive Compiler) , 59 octets
Essayez-le en ligne!
-27 octets grâce à @EmbodimentOfIgnorance!
Moins de code golfé ...
La valeur de retour est un entier pour le jour du mois de la date demandée.
la source
SmileBASIC,
5851484645 octetsL'entrée est sous la forme:
week,year/month/weekday
week
: numéro de semaine, indexé 0year
: année, 4 chiffresmonth
: mois (1 indexé), 2 chiffres -0
rembourréweekday
: jour de la semaine (1 indexé, 1 = dimanche), 2 chiffres -0
capitonnéLa sortie est le jour du mois, 0 indexé.
Le 2ème samedi de mars 2019 serait
1,2019/03/07
→8
(9 mars)Non golfé
Explication
Le formulaire de saisie a été spécifiquement choisi pour que l'année / mois / jour de semaine puisse être transmis directement à
DTREAD
, qui est une fonction qui analyse uneYYYY/MM/DD
chaîne et renvoie l'année / mois / jour sous forme de nombres, ainsi que le calcul du jour de la semaine.Cependant, notez que, où
DTREAD
attend le jour du mois, nous lui donnons plutôt le jour de la semaine. Cela complique les choses, mais signifie également qu'il y a moins de valeurs d'entrée et que nous n'avons pas besoin d'ajouter/01
à la fin de la chaîne de date.DTREAD
sortiesW
etD
.W
est le jour de la semaine etD
correspond au jour de la semaine duW
e jour du mois.(Donc, si vous saisissez
7
comme jour de la semaine, ceD
sera7
etW
sera quel que soit le jour de la semaine le 7e jour du mois)L'expression
(5-W+D*2)MOD 7
est utilisée pour obtenir la 1ère occurrence du jour de la semaine en entrée, en tant que jour du mois indexé sur 0. (J'ai compris celui-ci principalement par essais et erreurs)Après cela, le programme ajoute simplement
WEEK*7
.Je souhaite vraiment qu'il y ait des mots séparés pour "jour de la semaine" et "jour du mois".
la source
Perl 6 ,
5248 octetsEssayez-le en ligne!
Bloc de code anonyme qui accepte l'entrée comme l'année, le mois, le jour de la semaine (le dimanche vaut 0) et le numéro de la semaine (0 indexé). La sortie est un objet de date.
Ancienne explication:
la source
$^c+4-$!.daycount
.MATL ,
2827 octetsCela utilise trois entrées:
'March 2019'
Sat
'2
.La sortie est une chaîne avec le jour, l' année et le mois séparé par des tirets:
09-Mar-2019
.Essayez-le en ligne!
Explication
Tenez compte des entrées
'March 2019'
,'Sat'
,2
.la source
Python 3 ,
9282 octets82 octets grâce à @Jo King
Essayez-le en ligne!
Version originale, 92 octets
Essayez-le en ligne!
Prend l'année comme un entier, le mois comme un entier indexé à 1, le jour de la semaine comme un entier à 0 indice où lundi est
0
et dimanche est6
, et la semaine du mois comme un entier indexé à 1.Comment ça fonctionne:
la source
R ,
7269 octetsEssayez-le en ligne!
Prendre en compte:
la source
PHP ,
46,43, 31 octetsEssayez-le en ligne!
Le programme reçoit en entrée une chaîne comme
"second saturday of March 2019"
Le programme imprime le numéro du jour.
-12 octets grâce à Shaggy.
la source
of
de l'entrée.Groovy , 46 octets
Essayez-le en ligne!
Entrée en années depuis 1900, mois indexé 0, jour indexé 0 (dimanche étant 0) et numéro de semaine
la source
Scala , 86 octets
Essayez-le en ligne!
la source
Rouge ,
6460 octetsEssayez-le en ligne!
Prend l'année, le mois et le jour de la semaine sous forme de nombres, indexés 1, le lundi est le premier jour de la semaine.
la source
to-date
c'est une chose. peut-être que cela serait utile dans le défi du format christmase evenow
pour ce défi" Eve"
méthode <répétition date2-date1 fois> iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , 36 octets SBCS
Programme complet. Demande pour
[year,month]
(janvier est 1), puis pour jour (dimanche est 0), puis pour n (le premier est 1).Essayez-le en ligne!
⎕CY'dfns'
c o p y dans la bibliothèque dfns⊣
rejeter le résultat de cela en faveur de ...⎕
console d'invite pour les[year,month]
nombresdays
[c] jours [n] depuis 31/12/1899 du 0 e de ce mois(⍳31)+
ajoutez les i ntegers 1… 31 à celad←
Magasin àd
(pour d numéros de ay)7|
division restante lors de la division par 7 (jour de la semaine avec dimanche 0 en raison d'une bonne époque)⎕=
console d'invite pour le numéro du jour de la semaine et obtenir un masque où sont égaux les numéros du jour de la semained/⍨
filtrerd
avec ce masque⎕⊃
console d'invite pour n et l'utiliser pour choisir dans la liste des numéros de jourdate
[c] cachet datetime [n] (a des zéros de fin pour les heures, minutes, secondes, millisecondes)Cliquez sur [c] pour le code et [n] pour les notes.
la source
JavaScript (ES6),
4948 octetsPrend les paramètres comme
f([year, month], day, number)
. Le mois et le jour de la semaine (à partir du dimanche) sont indexés zéro. Edit: sauvé 1 octet grâce à @Shaggy.la source
0
en JS.TSQL, 106 octets
Production:
Essaye le
la source
Kotlin ,
13184 octets47 octets grâce au code et aux commentaires ASCII uniquement.
Entrée: année, moisNuméro, jour de semaineNuméro, semaineNuméro
Tous les entiers de 1 au maximum sur une seule ligne. Le numéro du jour de la semaine est le dimanche du 1 au samedi du 7. Le programme principal fait perdre l'année 1900 pour la classe Date et le mois et le jour de la semaine sont décalés pour commencer par zéro au lieu d'un avant d'appeler le lambda. Vous pouvez entrer vos arguments dans la zone de texte d'entrée pour essayer vos propres dates.
Sortie: une instance de classe Date. Le programme principal affiche le résultat comme: Sam Mar 09 00:00:00 UTC 2019.
Il existe une version étendue avec des commentaires expliquant le code pour ceux qui souhaitent en savoir plus.
Essayez-le en ligne!
la source