É dezembro de 2014 e 2015 já começou. No entanto, parece que nem todo mundo percebeu isso.
Mas o pessoal do PPCG vem em socorro!
Entrada
Seu programa recebe uma grade como a da parede, onde os dias do mês de dezembro parecem diferentes dos de novembro e janeiro. Cada semana começa no domingo e termina no sábado.
Os dias do mês são representados por a #
. Os dias que ficam fora do mês são representados por um (espaço, código ASCII 32). Cada semana é em uma linha separada. As linhas são separadas por um caractere de nova linha (
\n
). Seu programa pode exigir a omissão ou inclusão de uma nova linha no final da entrada.
Por exemplo, esta é a entrada para dezembro de 2009:
#####
#######
#######
#######
#####
O calendário é sempre do mês de dezembro.
Tarefa
Dada a entrada, você deve encontrar o ano associado ao calendário. Como há vários anos para os quais um calendário corresponde, você deve retornar o ano (antes de 2015) o mais próximo de 2015. (Excluindo o próprio 2015).
Seu programa deve produzir a saída correta para qualquer ano <2015, excluindo aqueles que possuem um layout de calendário para dezembro igual ao de outro ano (antes de 2015) mais próximo de 2015.
Se o ano for <2014, você também deve calcular a diferença do ano para 2014. Por exemplo, para 2012, a diferença é 2
.
Resultado
A saída do seu programa deve ser:
- O texto:
Your calendar is for <year>.
(Observação: como esse foi originalmente escrito como "calendário", também aceito a ortografia.) - Seguido por uma nova linha (
\n
ou\r\n
). - Seguido pelo texto:
It's almost 2015.
- Se o ano for <2014, isso deve ser seguido pelo texto:
You're <difference> years behind.
Isso deve estar em uma linha separada. - Seguido por uma nova linha (
\n
ou\r\n
). - Seguido pelo texto:
Go buy a new calendar!
- Opcionalmente seguido por uma nova linha (
\n
ou\r\n
).
Regras
- Você pode escolher se deseja receber o calendário como argumento da linha de comando (por exemplo
yourprogram.exe <calendar>
) ou solicitar a entrada do usuário. - Você pode assumir que seu programa não receberá entrada inválida. Entrada inválida inclui layout de calendário para o qual não existe ano.
- O código mais curto (em bytes, em qualquer idioma) vence.
Quaisquer argumentos de linha de comando não padrão (argumentos que normalmente não são necessários para executar um script) contam para a contagem total de caracteres.
O que seu programa não deve fazer:
- Depende de quaisquer recursos externos.
- Depende de ter um nome de arquivo específico.
- Saída qualquer coisa que não seja a saída necessária.
- Demore excepcionalmente para executar. Se o seu programa for executado mais de um minuto no computador de um usuário doméstico comum, é inválido.
- Seu programa não deve ser escrito em uma linguagem de programação para a qual não existia um compilador / intérprete publicamente disponível antes que esse desafio fosse lançado.
Exemplos
Entrada:
#####
#######
#######
#######
#####
Resultado:
Your calendar is for 2009.
It's almost 2015.
You're 5 years behind.
Go buy a new calendar!
Entrada:
######
#######
#######
#######
####
Resultado:
Your calendar is for 2014.
It's almost 2015.
Go buy a new calendar!
Entrada:
#
#######
#######
#######
#######
##
Resultado:
Your calendar is for 2012.
It's almost 2015.
You're 2 years behind.
Go buy a new calendar!
fonte
Respostas:
CJam, 126 bytes
fonte
Python 3, 178 bytes
Uma tabela de pesquisa simples com base na localização da primeira
#
.Expandido:
fonte
Perl - 187
fonte
Perl 5: 137
143Abordagem anterior:
Calendário na entrada padrão (apenas a primeira linha é significativa, é claro)
fonte
C # 235
minificado:
Ungolfed
Bem, a linguagem é detalhada :)
fonte
Program
paraP
. Isso deve poupar alguns personagens :)y
é calculado. Se você indexar uma string, poderá salvar a sintaxe necessária para descrever a matriz (ou sejavar y = "1054382"[index]-48
(0
é ASCII 48)).y
Também pode ser incorporado noz
cálculo para obter mais economias.C #,
384,363325 bytesC # Time, por favor me diga se eu perdi uma das regras, etc.
Entrada
Resultado
Entrada 2
Saída 2
Editar: atualizado, conseguiu remover alguns bytes
fonte
Java, 243 bytes
É uma linguagem detalhada :-)
Desminificado
fonte
JavaScript (ES6),
199170 bytesAinda não estou acostumado a escrever o ES6, portanto, qualquer dica seria apreciada:
Tabela de pesquisa, 170 bytes
Original, 199 bytes
Desminificado
JavaScript (ES5),
212182 bytesEu também incluí minha versão original abaixo
Matriz de pesquisa, 182 bytes
Desminificado
Original, 212 bytes
Desminificado
fonte
CoffeeScript,
211177 bytesSemelhante à minha resposta PHP, mas o CoffeeScript não possui
do-while
loops nem um operador ternário curto:Não minificado
Encurtado usando uma tabela de pesquisa:
fonte
PHP,
215181 bytesTabela de pesquisa, 181 bytes
Devido à sintaxe de matriz curta, funciona apenas no PHP 5.4+:
Desminificado
Original, 215 bytes
Funciona com a maioria das versões (se não todas) do PHP 5:
Desminificado
fonte
Ruby, 174
fonte
PHP, 145 bytes
duas quebras de linha atrás da tag de fechamento, porque o PHP ignorará a primeira
recebe entrada do argumento da linha de comando;
requer o PHP 5.6 (lançado em 18 de dezembro de 2014) ou posterior para indexar a string literal.
fonte
SmileBASIC, 159 bytes
fonte
C # (Compilador interativo do Visual C #) ,
178175172 bytesExperimente online!
fonte