Contribution:
A Date (contenant dd
, MM
et yyyy
). Un objet date ou trois entiers distincts sont également valides en entrée.
Production:
Chaque partie ( dd
, MM
et yyyy
) est retournée individuellement et arrondie à la date valide la plus proche.
Par exemple (au format dd-MM-yyyy
):
21-10-2016
devient12-01-6102
Règles du défi:
- Seulement
dd
,MM
,yyyy
est valide, mais l'ordre et qui-symboles distincts que vous utilisez est votre choix.
Ce sont quelques exemples de format valides:dd-MM-yyyy
;MM/dd/yyyy
;yyyy MM dd
;ddMMyyyy
, Etc.
Et ce sont quelques exemples de format non valides:dd MMM yyyy
;dd-MM-'yy
; etc. - Vous pouvez également choisir de simplement saisir un objet Date si votre langue le prend en charge ou trois paramètres entiers distincts, au lieu de la chaîne représentant une date.
- Veuillez indiquer le format de date que vous avez utilisé! (Et l'entrée et la sortie doivent être dans le même format.) Il est également autorisé de sortir un objet Date, tant qu'il peut gérer tous les cas de test et la règle de défi ci-dessous.
- La transition du calendrier julien au calendrier grégorien est ignorée pour ce défi. Il ne
1582
s'agit donc que d'une année inversée valide pour2851
.
Voir les infos / conseils du défi pour toutes les années, mois et jours valides. - Puisque vous ne pouvez pas avoir février comme inversé d'un autre mois, vous n'avez pas à vous soucier des années bissextiles.
Toutes les années, mois et jours inversés:
- L'année peut toujours être inversée sans problème, allant de 0001 (inversé de
1000
) à 9999 (restant9999
). (Ce0000
n'est donc pas une entrée valide, et il n'y a pas non plus de cas de test pour cela.) - Les seuls mois que vous aurez inversés sont: janvier (inversé à partir d'octobre /
10
); Octobre (inversé à partir de janvier /01
); Novembre (reste novembre /11
); et décembre (inversé par rapport à tous les deux mois /02
-09
,12
). - Les seuls jours que vous aurez inversés sont: 01 (inversé de
10
), 02 (inversé de20
), 03 (inversé de30
), 10 (inversé de01
), 11 (reste11
), 12 (inversé de21
), 13 (inversé de31
) , 20 (inversé de02
), 21 (inversé de12
), 22 (reste22
), 30 (inversé de03
ou identique au 31 de novembre!), 31 (inversé de04
-09
/13
-19
/23
-29
).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et à renvoyer des instructions / sorties, des programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test ( dd-MM-yyyy
au format):
21-07-2016 -> 12-12-6102
12-11-1991 -> 21-11-1991
01-01-2000 -> 10-10-0002
27-08-1875 -> 31-12-5781
18-12-2010 -> 31-12-0102
13-01-1981 -> 31-10-1891
04-11-1671 -> 30-11-1761 // Semi-tricky case, since November has 30 days
28-11-2036 -> 30-11-6302 // Semi-tricky case, since November has 30 days
14-06-1855 -> 31-12-5581
30-10-9999 -> 03-01-9999
01-01-2851 -> 10-10-1582
21-07-2016
est inversé12-70-6102
et arrondi à12-12-6102
. Je ne sais pas comment vous obtenez le résultat##-10-6107
..70
l'année augmentant.10-10-2
sortie est-elle valide dans le troisième cas?Réponses:
Convexe , 23 octets
Le nombre d'octets suppose le codage CP-1252.
Le format d'E / S est
dd mm yyyy
.Essayez-le en ligne!
Ceci est un port direct de ma réponse CJam . Convex est fortement basé sur CJam, et donc la seule différence est l'utilisation de l'
¶
opérateur de Convex qui encapsule les deux premiers éléments de la pile dans une liste, économisant ainsi un octet[...]
.la source
CJam, 24 octets
Le format d'E / S est
dd mm yyyy
.Essayez-le en ligne!
Même nombre d'octets, format d'E / S
mm dd yyyy
:Essayez-le en ligne!
Explication
L'autre version fonctionne de manière similaire, sauf que nous partons de l'entier
1230
ou1231
avant de le convertir en["12" "30"]
ou["12" "31"]
.la source
1=
obtient le mois inversé,:=
vérifie si ses chiffres sont égaux et^
xors le résultat en 31, donnant 30 pour le mois11
et 31 pour tout le reste.Pyth,
5553464341 octetsoù se
❤❤
trouvaient deux non imprimables, respectivement U + 001C et U + 001F.Suite de tests.
la source
Python 3, 82 octets
Une fonction anonyme qui prend l'entrée, via un argument, de la date sous forme de liste de chaînes du formulaire
['dd', 'mm', 'yyyy']
et renvoie la date inversée validée dans le même format.Comment ça fonctionne
Python compare les caractères et les chaînes par leurs points de code Unicode. Cela signifie que toute comparaison sur deux ou plusieurs entiers renvoie la même chose que cette comparaison sur ces entiers sous forme de chaînes. Par conséquent, l'appel
min
à deux entiers sous forme de chaînes renvoie le plus petit entier sous forme de chaîne; en prenant la partie date inversée comme un argument et la valeur maximale comme un autre, le jour et le mois sont limités à la plage souhaitée. Les parties de date sont inversées par indexation avec les étapes de-1
([::-1]
), et la valeur maximale pour le mois passe de'31'
à'30'
si le mois est novembre en indexant dans une liste avec le résultat booléen d'un conditionnel.Essayez-le sur Ideone
la source
Dyalog APL ,
3233 octetsI / O est une liste de trois chaînes (
'dd' 'mm' 'yyyy'
).TryAPL , mais notez que
⎕
(invite pour la saisie) a été remplacé par⍵
et la ligne entière incluse dans{
...}
pour permettre les tests en ligne, et⍎
(exécuter l'expression) a été remplacé par2⊃⎕VFI
(vérifier et corriger la saisie) car l'exécution de code arbitraire est bloquée .la source
C #
314305299249232223 octetsMerci à @KevinCruijssen d'avoir souligné que je pouvais raccourcir ma déclaration de variable, ce qui a également permis à la chaîne d'alias de sauver quelques octets.
50 octets enregistrés stockant la fonction d'inversion pour réutilisation et 13 autres en faisant de même pour l'arrondi et la suppression des déclarations de variable.
La dernière mise à jour fait que l'alias de chaîne n'est plus un économiseur d'octets.
Version non golfée:
Testez-le ici
la source
using System.Linq;
et la fonction, c'est donc -1 octet. En outre,var n=...;var e=...;
peut être joué par 1 octet en utilisant ceci à la place:string n=...,e=...;
ce n'est pas beaucoup, mais toujours -2 octets. ;)Javascript,
10610594 octetsSuite de tests (rév. 3)
Explication
Merci @KevinCruijssen pour sauver 1 octet pour
b==1
àb<2
. Merci à @Neil d'avoir économisé 11 octets en suggérant le modèle et le,
séparateur ES6 .la source
b==1
jouer au golfb<2
pour enregistrer un octet? Il ne peut plus être 0, puisque vous l'avez déjà vérifié dans la!b?
partie du code. Il semble fonctionner dans votre suite de tests lorsque je le change.join``
au lieu dejoin('')
par exemple - mais vous pouvez économiser un peu plus en utilisant,
votre séparateur, ce qui vous permet d'utiliser+''
pour joindre les trois valeurs ensemble.,
comme le séparateur dans l'entrée?Rubis,
9284 + 1 (-p
indicateur) =9385 octetsUtilise
-
comme séparateur.la source
Pyke, 29 octets
Essayez-le ici!
Je peux certainement voir que c'est jouable au golf
la source
Python 2, 154 octets
Prend l'entrée comme une chaîne, donc les guillemets doivent être spécifiés dans l'entrée, par exemple "11-04-2016".
la source
z=[x[::-1]for x in z];z[1]=min(z[1],'12');z[0]=min(z[0],['31','30'][z[1]=='11']);print"-".join(z)
. Fondamentalement, vous n'avez pas besoin d'utiliserr
du tout, etmin
accomplissez beaucoup de choses que vous voulez faire.05AB1E , 24 octets
Port de @MartinEnder réponse CJAM de , donc aussi les entrées et sorties sous forme de chaîne dans le format
dd MM yyyy
.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source