Todo mundo é Natal, e aqui está um desafio do código-golfe para comemorar. Você precisa criar um programa para imprimir um presente. Especificamente, as palavras "Feliz Natal". MAS, há um problema: este programa só deve funcionar se for 25 de dezembro. Se o código for executado em outro dia, o programa deverá falhar.
Este é o Code-Golf, então a resposta com a menor quantidade de bytes vence.
Feliz Natal!
Respostas:
Pyke, 21 bytes
Experimente aqui!
Ou 18 bytes não competitivos.
Exatamente o mesmo, exceto nesta seção:
Experimente aqui!
fonte
30 * (10+1)
= 330 não 325JavaScript,
555346 bytesNota: isso só foi testado no Google Chrome, o programa pode se comportar de maneira diferente de navegador para navegador (ou dispositivo para dispositivo)
2 bytes salvos graças a @ ConorO'Brien
7 bytes salvos graças a @ETHProductions
Sai com
Uncaught ReferenceError: a is not defined
se a data não forDec 25
. Eu não tenho certeza se isso conta como falharfonte
.slice(6,10)=="c 25"
?c
(Oct
chega perto, mas ainda não satisfaz a regex). Obrigado pela dica!Date()
é completamente dependente da implementação. Por exemplo, espero que varie com o idioma e a localização da máquina.Python 3,
6663 bytesGraças às idéias das respostas JavaScript / ES aqui, consegui espremer alguns bytes. Indexar um dicionário - chaves inexistentes aumentarão a
KeyError
. O código a seguir funciona no fuso horário localO formato de saída para
ctime
não depende da localidade - o formato é sempre ~'Sun Dec 25 19:23:05 2016'
. Como somente em dezembro termina a abreviação de três letrasc
, é seguro usá-lo'c 25'in time.ctime()
aqui.Versão anterior:
Isso funciona no fuso horário UTC. Para o fuso horário local, é necessário
s/gm/local
mais 3 bytes. No Python 2, pode-se remover parênteses deprint
65 bytes.A construção lança
KeyError
em outras datas:fonte
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
e o rotular como Python 2, ele ainda terá 66 bytes e trava com um KeyError em datas diferentes de 25 de dezembro.1:3
, eu copiei o meu código de teste por acidentegmtime()
idéia pela minha resposta. Espero que você não se importe :-)PHP,
3938 bytes, não competindo (não trava)ou
ou
fonte
date(Lz)%1001-358
? : D""
o primeiro código que economiza 2 bytes. Se não fosse por anos bissextos, você poderia economizar mais 2 bytes, substituindomd
porz
e1225
pelo número do dia do ano 25 de dezembro.eval((date(md)^TQZZ).'"Merry Christmas";');
(43 bytes)1
. Isso imprimiria o resultado do cálculo. e0104-1225
é 1121.Python 2 ,
686765 bytes-1 com agradecimentos a @muddyfish
Obrigado a @AnttiHaapala pela ideia que salvou outro casal.
Experimente online!
Lança um IndexError se não for 25 de dezembro
Versão não concorrente para 59 bytes, pois funciona apenas em anos não bissextos (usa o dia do ano que é 360 este ano, mas 361 em anos bissextos)
fonte
gmtime()
me depilar. Eu tenho que admitir, eu gostaria que houvesse mais que eu pudesse fazer com a idéia do dia do ano.R,
52 6158 bytesSe a data atual não for 25 de dezembro, um erro será retornado porque nenhum terceiro argumento é fornecido
if
.Edit: Corrigido um erro bobo
fonte
Minha primeira vez por aqui ... Começou com a melhor linguagem de sempre para este trabalho:
Java,
200188bytes (graças a @Daniel Gray), 186 bytes removendo "ln" da impressão.Experimente aqui!
fonte
Calendar
para*
e salvar alguns bytes. Você também pode encurtar o nome doargs
parâmetro no método principal, eu acho ...MATL ,
3433 bytesIsso funciona na versão atual (19.7.0) do idioma. Para causar o erro, o código a seguir explora o fato de que o logaritmo de uma seqüência de caracteres gera um erro (isso pode mudar em versões futuras).
Experimente online!
Explicação
fonte
QBIC , 48 bytes
Explicação:
Isso assume a
MM-DD
notação de data americana . Isso seria mais curto se eu finalmente fizesse uma função Substring no QBIC.fonte
05AB1E ,
32.21 bytesEconomizou 11 bytes graças à compressão de strings de Adnan :).
Explicação
Experimente online!
Eu fiz o que me veio à mente primeiro, para que possa haver melhores abordagens para este. Mas o PPCG também merece um Feliz Natal em 05AB1E;).
fonte
x
é a abreviação de duplicado e duplo :).Script em C # / CS
10610099 bytesSolução de 99 bytes
Experimente aqui!
Solução de 100 bytes (prefira esta ... um pouco diferente)
Explicado:
DateTime.Now.AddDays(7).DayOfYear==1
é um byte menor que,DateTime.Now.ToString("ddMM")=="2512"
mas 1 byte maior queDateTime.Now.ToString("dM")=="2512"
fonte
$"{DateTime.Now:dM}"=="2512"
.dM
é ambíguo, mas não para "2512".$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 bytes) =)int i
e não justo1/0
?$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 bytes)Script C # / CS, 96 bytes, plagiado principalmente de Erresen
Exclui a
int i
declaração em favor da codificação codificada da divisão. Eu deixaria isso como um comentário, mas não tenho reputação.fonte
utilitários bash + Unix,
514947 bytes* Agradecemos a @ KenY-N por apontar que as aspas no eco podem ser removidas e a @IporSircer por reduzir o tamanho da condição em 2 bytes.
fonte
bash: ${}: bad substitution
erro. Além disso, você pode soltar as aspas de Feliz Natal para economizar dois bytes. Além disso,[ `date +%m%d` = 1225 ]&&echo Merry Christmas
funciona para mim, igualando meus 45 bytes .${}
com!-
a bater-me por um byte. Eu vou te votar enquanto você ganha.Groovy, 57 bytes
Falhas em datas que não sejam 25.12. com
groovy.lang.MissingPropertyException
porqueb
não está definido.fonte
Empilhados , 42 bytes
Experimente aqui!
Isso cria uma matriz de elemento único que contém, nomeadamente
'Merry Christmas!'
. Depois, coloca a data em uma sequência com o mês seguido pelo dia. Ele verifica a igualdade com'1225'
(Christmas), inverte-a¬
e obtém esse membro da matriz anterior. Se não for Natal, isso causará um erro no índice. Caso contrário, ele imprimeMerry Christmas
. (Altere a data na string para ver como funciona em outros dias.)fonte
Lote, 66 bytes
A nova linha à direita é significativa, pois causa
if
falha na análise da instrução. Pode ser necessário ajustar a verificação da data para corresponder ao seu formato de data local.fonte
Python 2,
69 7775 ou7270 bytesSe não importa se sai com erro quando é Natal, então:
EDITAR:
Obrigado @ Flp.Tkc por apontar que eu precisava gerar um erro
-2 bytes do @Max para indicar como remover dois pontos da função strftime
fonte
CJam, 28
Experimente online
Explicação:
fonte
C # .NET,
180172171 bytesEconomizou 8 bytes graças a Kritixi Lithos
Guardado 1 byte graças a Kritixi Lithos, novamente;)
Variante alternativa não-gasta:
fonte
NotChristmasException
é apenas na variante não destruída.if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()
observe as declarações if combinadas e a remoção de chaves ao redor daConsole.Write
e substituareturn
porelse
. Mudar tambémvar d=DateTime.Now
você pode se livrar de lance exceção com talvezargs[-1];
depois de renomear args paraa
assima[-1];
(isso para não idêntico ao dividir por zeros usados em outros lugares)Mathematica, 46 bytes
fonte
Now
economiza 2 bytesToday
Quit[]
ou1/0
deveria ser suficiente.Lisp comum, 140
Falha com a função indefinida se a data não estiver correta.
fonte
awk, 29 bytes (+ comprimento ("Feliz Natal"))
Executando:
A saudação de temporada é canalizada para
awk
.strftime
retorna mês + dia (por exemplo1226
) e, se corresponder, o1225
$0
registro será gerado. O resultado da comparação1225==1226
é colocado emv
var, que é usado para dividir 1 se a comparação da data falhar.fonte
Haskell, 116
Falha com "Padrões não exaustivos na função f" se não for Natal.
Infelizmente, não há nenhuma função que permita que você obtenha imediatamente a hora em um formato útil; portanto, a maior parte disso é a conversão dos formatos de data.
fonte
C #,
122104 bytes18 bytes salvos, graças a @raznagul
Adiciona 7 dias ao dia atual e verifica se é o primeiro dia do ano; se sim, exibe "Feliz Natal"; caso contrário, divide por zero.
fonte
return
não é necessário. Use emi
vez de()
.Ruby, 69 bytes
Funciona em 2016. Não diferencia entre anos normais e bissextos, pode precisar ser ajustado para anos não bissextos.
fonte
ForceLang, 180 bytes
(Lembre-se de que
datetime.toDateString
depende da localidade, portanto, isso pode não funcionar dependendo da localidade)fonte
C #, 90 bytes
Lança IndexOutOfRangeException se não for natal.
Experimente aqui!
fonte
linha de comando do bash,
454849 48 bytesSemelhante ao de Mitchell Spector , mas usado
grep
no modo silencioso para verificar uma correspondência,&&
garantirá que ela seja impressa apenas com êxito e||
faça com que ela pesquise o histórico!-
, o que me dá o seguinte:E para a execução como
!- ; echo foo
demonstra. Abash
documentação diz que!-n
se refere ao comando atual menosn
, então talvez ele esteja sendo interpretado como!-0
, o que fornece uma mensagem de erro idêntica (e não localizada).fonte
;
vez de||
.