En se basant sur cette question SO .
Le défi est plutôt simple: une période de date dans le format est indiquée YYYYMM
dans le format MMMYY
.
Règles:
- L'entrée sera un nombre ou une chaîne d'une longueur exacte de 6 caractères, composée uniquement de chiffres.
- Les deux derniers chiffres seront entre
01
et12
. - Sortie doit être sous la forme
MMMYY
, oùMMM
représente majuscules code à trois lettres du mois (ci - dessous) etYY
représente deux derniers chiffres de laYYYY
partie de l'entrée.
Liste des mois avec le code correspondant:
MM MMM
01 JAN
02 FEB
03 MAR
04 APR
05 MAY
06 JUN
07 JUL
08 AUG
09 SEP
10 OCT
11 NOV
12 DEC
Exemples:
Input Output
201604 APR16
200001 JAN00
000112 DEC01
123405 MAY34
Réponses:
MATL,
181413 octetsL'entrée est fournie sous forme de chaîne (entre guillemets simples).
Cette version ne fonctionne que dans MATL sur MATLAB puisque MATLAB est capable d'analyser automatiquement
datestr('2016 04')
.Explication
Voici une version de 18 octets qui fonctionne sur Octave (et donc l'interprète en ligne)
Essayez-le en ligne
Version modifiée pour tous les cas de test
Explication
la source
Python 3, 70 octets
Celui - ci utilise le intégré
strftime
et lesstrptime
fonctions.Pour 1 octet de plus, voici une version qui analyse manuellement la chaîne:
Cela encode les noms de mois de manière intéressante (merci à Henry Gomersall pour avoir sauvegardé un octet).
la source
lambda n:"JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[n%100-1::12]+`n`[2:4]
.lambda s:" JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[int(s[4:])::12]+s[2:4]
Bash + coreutils, 18
Nécessite la version 64 bits de
date
pour les cas de test donnés, qui reconnaît les dates antérieures au 14 décembre 1901 .la source
PowerShell v2 +,
4946 octetsMerci à @Joey pour avoir économisé 3 octets!
Prend l'entrée
$args[0]
sous forme de chaîne explicite (par exemple,'201604'
) via une entrée de ligne de commande. Utilise lastring.Insert()
fonction pour insérer un-
dans l'espace approprié, et la chaîne résultante forme une entrée dans l'Get-Date
applet de commande avec le-U
paramètre format spécifiant le raccourci de trois mois et l'année à deux chiffres. Nous encapsulons cela entre parenthèses et nous ajoutons un point.ToUpper()
pour rendre la chaîne de sortie capitalisée. Cette chaîne est laissée sur le pipeline et l'impression est implicite.En outre, comme indiqué, cela dépend des paramètres régionaux. Voici les informations sur les paramètres régionaux que j'utilise lorsque cela fonctionne correctement.
la source
MMMyy
, car c'est un simple argument pour une applet de commande. Vous pouvez aussi simplement utiliser-UFormat %b%y
, c'est-à-dire à la-u %b%y
place, ce qui est encore plus court. Note latérale: Cette solution est sensible aux paramètres régionaux (ce que je n'aime pas personnellement), mais serait un peu plus longue à prendre en compte, cela est vrai.-UFormat
place. Merci! Je ne connaissais pas non plus les citationsMMMyy
, c'est bon à savoir pour l'avenir.Retina ,
7170 octetsMerci à Sp3000 d’avoir économisé 1 octet.
Le nombre d'octets suppose un codage ISO 8859-1. Le retour à la ligne est important.
Essayez-le en ligne!
Explication
Prenant
201604
comme exemple:Cela permute les deux derniers chiffres de l'année avec le mois tout en élargissant le mois de manière unaire en utilisant des sauts de ligne et en ajoutant la liste des mois à l'envers de manière à obtenir:
Où
¶
représentent les sauts de ligne (0x0A).Maintenant, nous supprimons à plusieurs reprises trois caractères autres que le saut de ligne suivi d'un saut de ligne. C'est-à-dire que nous mangeons la liste des mois à partir de la fin pour chaque saut de ligne représentant un mois:
C'est pourquoi nous avons inséré cela
XXX
: depuis que les mois commencent à compter1
, nous allons toujours supprimer au moins trois caractères, même pour janvier.Enfin, nous supprimons tout jusqu'au 6ème caractère à partir de la fin. En d'autres termes, nous ne conservons que les cinq derniers caractères.
la source
CJam,
5046 octetsEssayez-le en ligne. Merci à Martin Ender d’avoir compressé la chaîne pour économiser quelques octets.
Explication
la source
Bash,
39 à28 octetsMerci Digital Trauma !
la source
Java 7, 137 caractères (161 octets)
Considérons que chaque nom de mois (JAN, FEB, etc.) est un nombre en base 36 et le code dans le symbole Unicode correspondant. Ensuite, récupérez le symbole correspondant dans la chaîne et réencodez-le en base 36, puis quelques manipulations simples.
Légèrement non-golfé:
Vous pouvez le voir fonctionner ici: https://ideone.com/IKlnPY
la source
Python, 83 octets
la source
Kotlin, 100 octets
Utilisation assez simple de Java SimpleDateFormat
la source
SimpleDateFormat
(c.-à-d.import java.text.*;
)?MATLAB / Octave, 42 octets
Crée une fonction anonyme nommée
ans
qui est appelée avec une chaîne représentant la date:ans('201604')
.Démo en ligne
Cette solution permet
datenum
de convertir la date d'entrée en un numéro de date de série, puisdatestr
avec la spécification de sortie prédéfinie demmmyy
(12
) pour obtenir la représentation sous forme de chaîne au format requis. Enfin, nous utilisonsupper
pour le changer enMMMYY
puisque le mois en majuscule n'est pas une option de sortie.la source
05AB1E,
514241 octetsExplication
Essayez-le en ligne
9 octets enregistrés grâce à la compression de chaîne, gracieuseté de @Adnan
la source
•r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35B
au lieu de"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
sauver 9 octets.JavaScript,
87848079 octetsPour obtenir le mois, obtient la date (constituée de "AAAAMM" convertie en "AAAA-MM") et récupère les caractères 5 à 8, qui correspondent exactement aux trois premières lettres du mois. Mais cela coûte beaucoup de le convertir en majuscule.
Démo:
la source
APR16
MAR16
APR16
, mais le troisième cas de test ne montre queDEC
pour moi.Julia,
575653 octetsIl s'agit d'une fonction anonyme qui accepte une chaîne et retourne une chaîne. Pour l'appeler, assignez-le à une variable.
Tout d'abord, nous construisons un
DateTime
objet en utilisant le constructeur de type et une chaîne de format. Notez que le seulm
dans la chaîne de format obtiendra les mois à un et deux chiffres, bien que le premier cas ne soit pas pertinent ici. Comme aucun jour n'est spécifié, le premier du mois est supposé.Nous pouvons ensuite formater la valeur en tant que chaîne en utilisant la
Dates.format
fonction duBase.Dates
sous - module. La chaîneuyy
reçoit le nom du mois à trois lettres et l'année à deux chiffres, mais le résultat est dans la casse du titre, par exemple Avril16 au lieu de l'APR16 souhaité, nous en avons donc besoinuppercase
.Essayez-le en ligne! (inclut tous les cas de test)
la source
C,
147145112 octetsDémo en ligne
Merci Ugoren !
la source
#include
, définirm
comme paramètre -main(m)
,%.3s
format enregistre la fin nulle."%4s%2d"
pour"%4s%d"
.main(m){char a[9];scanf("%4s%d",a,&m);printf("%.3s%s","JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"+--m*3,a+2);}
beaucoup plus courtJavaScript ES6,
7766 octets11 octets sauvés grâce à @ Bálint!
Obtenez la date en extrayant la chaîne retournée par la
Date
classe. puis capitalise et ajoute l'année.Version ES5:
la source
(Date(0,a[4]- -a[5])+"").substr(4,3)
a[4]- -a[5]
. Quel était le problème aveca[4]+a[5]-1
?new Date(0,a[4]+a[5]-1)+""
=>new Date(0,a[4]+a[5]-1)+0
C #,
9487 octets7 octets enregistrés en utilisant la syntaxe C # 6.
Essayez en ligne
la source
C(string s)=>...
Japt,
3534 octetsLien.
Utilise la même technique que ma réponse JavaScript .
la source
Java 8,
154113 octetsExplication:
Essayez-le en ligne.
la source
java.text.SimpleDateFormat
.import java.text.*;
est en fait 19 octets, et deux foisjava.text.
devant les deuxSimpleDateFormat
est 20 octets. Donc, il augmenterait de 1 octet au lieu de le baisser..*;
pour le code non-joué, mais cette fois, il me semble l'avoir négligé. J'ai des options de sauvegarde qui le convertissent automatiquement en importations pures depuis que j'utilise Java dans mon travail, et j'ai tout simplement oublié de le changer enimport java.text.*;
..Oracle SQL, 49 octets
Les données doivent être insérées dans une table appelée
T
avec une colonneN
de typeVARCHAR2(6)
,CHAR(6)
ou, uniquement si toutes les années sont> 1000,NUMBER
Usage:
la source
begin:n:=to_char(to_date(:n,'yyyymm'),'monyy');end;print n
et vous avez besoin de 42 caractères supplémentaires pour une seule entrée (VARIABLE n varchar2;BEGIN:n:='201605';END;
) au lieu de 31 (insert into t values('000112');
) si vous avez des moyens plus courts, dites-le-moi.Microsoft SQL Server, 57 octets
La
Upper
fonction est requise car le format ne produit pas de mois majuscules, contrairement au modèle de format MMM .Usage:
la source
Pyth, 45 octets
Essayez-le en ligne!
Explication:
La chaîne emballée contient
"JANJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
. Les deuxJAN
s sont pour que je puisse l’indexer pseudo-un-indexé.EDIT: bug corrigé avec TIO
la source
R , 65 octets
Essayez-le en ligne!
Prend les entrées sous forme de chaîne, exploite la constante
month.abb
. Utilise le module etsubstr
extrait les valeurs pertinentes.la source
:
convertir eninteger
!el
- 1 octet de moins.J, 70 octets
Usage
Explication
la source
Pyth, 39 octets
Hexdump:
Suite de tests.
la source
jq, 35 caractères
(Option de ligne de commande code à 34 caractères + 1 caractère.)
(Je viens d'essayer de savoir si le
^
truc utilisé par Digital Trauma dans sa réponse Bash fonctionne également en jq. Fonctionne. Vous savez maintenant qui a inspiré le personnage le plus important de cette réponse. (L'alternative consiste à utiliser laascii_upcase
fonction.))Exemple d'
-R
analyse (option utilisée uniquement dans cet exemple pour réussir tous les cas de test.)Test en ligne: (L'URL transmis n'est pas pris en charge. Par conséquent, l'entrée est transmise sous forme de chaîne littérale JSON. L'
-r
URL transmise n'est pas prise en charge - cochez Raw Output vous-même.)la source
Facteur,
8278 octetsEshplained:
la source
PHP, 78 octets
Le "problème de l'année 2038" peut se produire sur certains ordinateurs, comme ici . Mais pas chez d'autres, comme ici .
la source
Swift 2.2, 149 octets
Essayer de faire cela plus court que Kotlin ... Dommage qu’il
NSDateFormatter
n’ait pas d’initialiseur qui le règledateFormat
.NSDateFormatter
également n'a pas dedateFormat
valeur par défaut , ce qui entraîne des pertes supplémentaires.Rapide 3, 136 octets
Grâce à la suppression du
NS
préfixe de certaines classes, j'ai pu faire répondre un peu plus rapidement le Swift 3. Toujours pas plus court que Kotlin cependant ...Fonction de test et cas:
la source
R,
154150114112 octetsPrend six chiffres dans "b", sépare les quatre premiers chiffres des deux derniers chiffres, abrége le mois à 2 chiffres et le met en majuscule et le concatène avec les 3ème et 4ème chiffres.
Golfé:
Ungolfed:
EDITS: remplacé les noms en double par des variables; m'a fixé d'être stupide. -2 octets en tournant la fonction anonyme (merci, chat).
la source
a=
pour une fonction anonymea=
? Quelque chose comme ça:(function(m) {a=3;m*a})(10)
function(b){h=substr;i=sprintf;o="%06d";cat(toupper(month.abb[as.numeric(h(i(o,b),5,6))]),h(i(o,b),3,4),sep="")}
est un objet fonction tout seul.RStudio with R 3.2.3 (2015-12-10)
je reçoisError in i(o, b) : invalid format '%06d'; use format %s for character objects
R version 3.1.1 (2014-07-10)
et cela fonctionne bien. Comment cela fonctionne ici, dois-je obtenir la nouvelle version et changer le code? Merci également pour le conseil de fonction anonyme!