Es diciembre de 2014 y 2015 casi ha comenzado. Sin embargo, parece que no todos se han dado cuenta de esto.
¡Pero la gente de PPCG viene al rescate!
Entrada
Su programa recibe una cuadrícula como la del muro, donde los días que están en el mes de diciembre son diferentes de los de noviembre y enero. Cada semana comienza con el domingo y termina con el sábado.
Los días dentro del mes están representados por a #
. Los días que quedan fuera del mes están representados por un (espacio, código ASCII 32). Cada semana está en una línea separada. Las líneas están separadas por un carácter de nueva línea (
\n
). Su programa puede requerir la omisión o la inclusión de una nueva línea al final de la entrada.
Por ejemplo, esta es la entrada para diciembre de 2009:
#####
#######
#######
#######
#####
El calendario es siempre del mes de diciembre.
Tarea
Dada la entrada, debe encontrar el año asociado con el calendario. Dado que hay varios años para los que coincide un calendario, debe devolver el año (antes de 2015) que sea el más cercano a 2015. (Excluyendo 2015 en sí).
Su programa debe producir el resultado correcto para cualquier año <2015, excluyendo aquellos que tienen un diseño de calendario para diciembre que es igual al de otro año (antes de 2015) más cercano a 2015.
Si el año es <2014, también debe calcular la diferencia del año a 2014. Por ejemplo, para 2012 la diferencia es 2
.
Salida
La salida de su programa debe ser:
- El texto:
Your calendar is for <year>.
(Nota: dado que esto originalmente se deletreaba como "calendario", también aceptaré esa ortografía). - Seguido de una nueva línea (
\n
o\r\n
). - Seguido por el texto:
It's almost 2015.
- Si el año es <2014, esto debe ser seguido por el texto:
You're <difference> years behind.
Esto debe estar en una línea separada. - Seguido de una nueva línea (
\n
o\r\n
). - Seguido por el texto:
Go buy a new calendar!
- Opcionalmente seguido de una nueva línea (
\n
o\r\n
).
Reglas
- Puede elegir si desea recibir el calendario como un argumento de línea de comandos (p
yourprogram.exe <calendar>
. Ej. ) O solicitar la entrada del usuario. - Puede suponer que su programa no recibirá entradas no válidas. La entrada no válida incluye el diseño del calendario para el que no existe ningún año.
- El código más corto (en bytes, en cualquier idioma) gana.
Cualquier argumento de línea de comandos no estándar (argumentos que normalmente no se requieren para ejecutar un script) cuentan para el recuento total de caracteres.
Lo que su programa no debe hacer:
- Depende de cualquier recurso externo.
- Depende de tener un nombre de archivo específico.
- Salida de cualquier cosa que no sea la salida requerida.
- Tardar excepcionalmente en correr. Si su programa se ejecuta más de un minuto en la computadora de un usuario doméstico promedio, no es válido.
- Su programa no debe estar escrito en un lenguaje de programación para el que no existía un compilador / intérprete disponible públicamente antes de que se publicara este desafío.
Ejemplos
Entrada:
#####
#######
#######
#######
#####
Salida:
Your calendar is for 2009.
It's almost 2015.
You're 5 years behind.
Go buy a new calendar!
Entrada:
######
#######
#######
#######
####
Salida:
Your calendar is for 2014.
It's almost 2015.
Go buy a new calendar!
Entrada:
#
#######
#######
#######
#######
##
Salida:
Your calendar is for 2012.
It's almost 2015.
You're 2 years behind.
Go buy a new calendar!
fuente
Respuestas:
CJam, 126 bytes
fuente
Python 3, 178 bytes
Una tabla de búsqueda simple basada en la ubicación de la primera
#
.Expandido:
fuente
Perl - 187
fuente
Perl 5:
137143Enfoque previo:
Calendario en entrada estándar (solo la primera línea es significativa, por supuesto)
fuente
C # 235
minificado:
Sin golf
Bueno, el lenguaje es detallado :)
fuente
Program
aP
. Eso debería ahorrarte algunos caracteres :)y
se calcula, si indexa una cadena puede guardar la sintaxis requerida para describir la matriz (es decirvar y = "1054382"[index]-48
(0
es ASCII 48)).y
También se puede incluir en elz
cálculo para obtener más ahorros.C #,
384,363325 bytesC # Time, por favor dime si me perdí una de las reglas, etc.
Entrada
Salida
Entrada 2
Salida 2
Editar: actualizado, logró eliminar algunos bytes
fuente
Java, 243 bytes
Es un lenguaje detallado :-)
No minificado
fuente
JavaScript (ES6),
199170 bytesTodavía no estoy acostumbrado a escribir ES6, por lo que agradecería cualquier consejo:
Tabla de búsqueda, 170 bytes
Original, 199 bytes
No minificado
JavaScript (ES5),
212182 bytesTambién he incluido mi versión original a continuación
Matriz de búsqueda, 182 bytes
No minificado
Original, 212 bytes
No minificado
fuente
CoffeeScript,
211177 bytesSimilar a mi respuesta de PHP, pero CoffeeScript no tiene
do-while
bucles ni tiene un operador ternario corto:Sin minar
Acortado usando una tabla de búsqueda:
fuente
PHP,
215181 bytesTabla de búsqueda, 181 bytes
Debido a la sintaxis de matriz corta, solo funciona en PHP 5.4+:
No minificado
Original, 215 bytes
Funciona con la mayoría (si no todas) las versiones de PHP 5:
No minificado
fuente
Rubí, 174
fuente
PHP, 145 bytes
dos saltos de línea detrás de la etiqueta de cierre porque PHP ignorará el primero
toma datos del argumento de la línea de comando;
requiere PHP 5.6 (publicado el 18 de diciembre de 2014) o posterior para indexar el literal de cadena.
fuente
SmileBASIC, 159 bytes
fuente
C # (compilador interactivo de Visual C #) ,
178175172 bytesPruébalo en línea!
fuente