Nous sommes en décembre 2014 et 2015 a presque commencé. Cependant, il semble que tout le monde ne s'en soit pas rendu compte.
Mais les gens de PPCG viennent à la rescousse!
Contribution
Votre programme reçoit une grille comme celle du mur, où les jours du mois de décembre sont différents de ceux de novembre et janvier. Chaque semaine commence le dimanche et se termine le samedi.
Les jours du mois sont représentés par un #
. Les jours qui ne font pas partie du mois sont représentés par un (espace, code ASCII 32). Chaque semaine est sur une ligne distincte. Les lignes sont séparées par un caractère de nouvelle ligne (
\n
). Votre programme peut nécessiter la suppression ou l'inclusion d'une nouvelle ligne à la fin de l'entrée.
Par exemple, voici l'entrée pour décembre 2009:
#####
#######
#######
#######
#####
Le calendrier est toujours du mois de décembre.
Tâche
Compte tenu de l'entrée, vous devez trouver l'année associée au calendrier. Puisqu'il y a plusieurs années pour lesquelles un calendrier correspond, vous devez renvoyer l'année (avant 2015) qui est la plus proche de 2015. (Sauf 2015 elle-même.)
Votre programme doit produire la sortie correcte pour toute année <2015, à l'exclusion de celles dont le calendrier de décembre est égal à celui d'une autre année (avant 2015) plus proche de 2015.
Si l'année est <2014, vous devez également calculer la différence de l'année par rapport à 2014. Par exemple, pour 2012, la différence est 2
.
Production
La sortie de votre programme doit être:
- Le texte:
Your calendar is for <year>.
(Remarque: étant donné que cela était à l'origine orthographié comme «calendrier», j'accepte également cette orthographe.) - Suivi d'une nouvelle ligne (
\n
ou\r\n
). - Suivi du texte:
It's almost 2015.
- Si l'année est <2014, ceci doit être suivi du texte:
You're <difference> years behind.
Cela doit être sur une ligne séparée. - Suivi d'une nouvelle ligne (
\n
ou\r\n
). - Suivi du texte:
Go buy a new calendar!
- Facultativement suivi d'une nouvelle ligne (
\n
ou\r\n
).
Règles
- Vous pouvez choisir si vous souhaitez recevoir le calendrier en tant qu'argument de ligne de commande (par exemple
yourprogram.exe <calendar>
) ou inviter l'utilisateur à entrer. - Vous pouvez supposer que votre programme ne recevra aucune entrée invalide. L'entrée non valide inclut la disposition du calendrier pour laquelle il n'existe aucune année.
- Le code le plus court (en octets, dans n'importe quelle langue) gagne.
Tous les arguments de ligne de commande non standard (arguments qui ne sont normalement pas requis pour exécuter un script) comptent pour le nombre total de caractères.
Ce que votre programme ne doit pas faire:
- Dépendez de toutes les ressources externes.
- Dépendre d'avoir un nom de fichier spécifique.
- Sortie autre chose que la sortie requise.
- Prenez exceptionnellement longtemps à courir. Si votre programme s'exécute sur une minute sur l'ordinateur d'un utilisateur à domicile moyen, il n'est pas valide.
- Votre programme ne doit pas être écrit dans un langage de programmation pour lequel il n'existait pas de compilateur / interprète accessible au public avant la publication de ce défi.
Exemples
Contribution:
#####
#######
#######
#######
#####
Production:
Your calendar is for 2009.
It's almost 2015.
You're 5 years behind.
Go buy a new calendar!
Contribution:
######
#######
#######
#######
####
Production:
Your calendar is for 2014.
It's almost 2015.
Go buy a new calendar!
Contribution:
#
#######
#######
#######
#######
##
Production:
Your calendar is for 2012.
It's almost 2015.
You're 2 years behind.
Go buy a new calendar!
la source
Réponses:
CJam, 126 octets
la source
Python 3, 178 octets
Une table de recherche simple basée sur l'emplacement du premier
#
.Étendu:
la source
Perl - 187
la source
Perl 5: 137
143Approche précédente:
Calendrier sur entrée standard (seule la première ligne est bien sûr significative)
la source
C # 235
minifié:
Non golfé
Eh bien, la langue est verbeuse :)
la source
Program
àP
. Cela devrait vous faire économiser quelques personnages :)y
est calculé, si vous indexez une chaîne, vous pouvez enregistrer la syntaxe requise pour décrire le tableau (c'est-à-direvar y = "1054382"[index]-48
(0
est ASCII 48)).y
peut également être intégré dans lez
calcul pour réaliser des économies supplémentaires.C #,
384,363325 octetsC # Time, dites-moi si j'ai raté l'une des règles, etc.
Contribution
Production
Entrée 2
Sortie 2
Edit: mis à jour, réussi à supprimer certains octets
la source
Java, 243 octets
C'est une langue verbeuse :-)
Non minifié
la source
JavaScript (ES6),
199170 octetsJe ne suis pas encore habitué à écrire ES6, donc des conseils seraient appréciés:
Table de recherche, 170 octets
Original, 199 octets
Non minifié
JavaScript (ES5),
212182 octetsJ'ai également inclus ma version originale ci-dessous
Tableau de recherche, 182 octets
Non minifié
Original, 212 octets
Non minifié
la source
CoffeeScript,
211177 octetsSimilaire à ma réponse PHP, mais CoffeeScript n'a pas de
do-while
boucles ni d'opérateur ternaire court:Unminifed
Raccourci à l'aide d'une table de recherche:
la source
PHP,
215181 octetsTable de recherche, 181 octets
En raison de la courte syntaxe du tableau, ne fonctionne que sur PHP 5.4+:
Non minifié
Original, 215 octets
Fonctionne avec la plupart (sinon toutes) les versions de PHP 5:
Non minifié
la source
Rubis, 174
la source
PHP, 145 octets
deux sauts de ligne derrière la balise de fermeture, car PHP ignorera le premier
prend l'entrée de l'argument de la ligne de commande;
nécessite PHP 5.6 (publié le 18 décembre 2014) ou une version ultérieure pour l'indexation du littéral de chaîne.
la source
SmileBASIC, 159 octets
la source
C # (Visual C # Interactive Compiler) ,
178175172 octetsEssayez-le en ligne!
la source