O dia em que este post foi publicado foi na véspera de Natal. Amanhã será Natal. Ontem foi véspera de Natal. Em dois dias será
Christmas Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve
.
Seu trabalho é pegar a data em que o programa é executado e codificá-lo no formato da véspera de Natal.
- Se o seu programa for executado no Natal, ele deverá gerar a string "Christmas".
- Se o seu programa não for executado no Natal, ele deverá gerar a string "Christmas", seguida pela string "Eve"
n
vezes repetidas , onden
é o número de dias até o Natal.- Observe que isso deve ser baseado no próximo Natal. Por exemplo, se o dia for 26 de abril de 2019, você deverá fazer seu cálculo com base em 25 de dezembro de 2019, e não em qualquer outro Natal.
- Lembre-se de contar dias bissextos.
- O Natal é 25 de dezembro de cada ano.
Isso é código-golfe , então o código mais curto vence! Observe, porém, que o objetivo não é encontrar o programa mais curto em qualquer idioma, mas encontrar o programa mais curto em cada idioma específico. Por exemplo, se você encontrar o programa C ++ mais curto, ele vence este concurso para C ++, mesmo que alguém encontre um programa mais curto no Python.
Respostas:
SmileBASIC,
737167 bytesO programa imprime "Natal", depois imprime "Eva" toda vez que um dia passa, até 25 de dezembro. (25/12 = 0,48)
Pode levar até um ano para ser executado.
fonte
Fórmula do Excel, 59 bytes
fonte
YEAR(TODAY()+6)
sempre retorna o ano correto, evitando assim a condição.YEAR(NOW()+6)
funciona bem com 2 bytes a menos.NOW()
inclui o horário, portanto não será um número inteiro e não tenho certeza seREPT
isso permitiria.="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Perl 6 ,
6147 bytesdiga 'Christmas' ~ 'Eve'x (Date.today ... ^ {. month == 12 &&. day == 25})Experimente online!
-14 bytes (!) Graças a Jo King
Date.today ...^ /12\-25/
é a sequência de datas que começa hoje e termina no dia anterior ao Natal. (A expressão regular/12\-25/
é comparada com a representação da sequência das datas.) A sequência" Eve"
é replicada um número de vezes igual ao comprimento dessa sequência e é gerada após a sequência"Christmas"
.fonte
/12.25/
?12025-12-24
R ,
112 10672 bytesVia @digEmAll e @ J.Doe
Experimente online!
Minha resposta original foi anterior ao esclarecimento de que o código deveria levar a data em que o código é executado como entrada. Pode ser modificado como acima para economizar muitos bytes, mas não vou me incomodar.
Experimente online!
Explicação: todo mundo está na igreja, então eu tenho tempo para fazer isso. Extraia o ano, coagir ao número inteiro. Faça um vetor do Xmas daquele ano e do Xmas do ano seguinte e subtraia a data de entrada para obter um vetor de duas diferenças entre a data de entrada e esses dois Xmas.
Escolha o não negativo e o
cat
"Natal" com tantos "Eves".fonte
y
uma vez para poder usá-lo diretamente por 108 bytes.z[z>=0][1]
funcionaria em vez demin
?Windows PowerShell ,
676463 bytesExperimente online!
Conseguiu cortar
3 bytes4 bytes (graças ao Cows charlatão ) usando o-f
operador ormat em vez de.ToString()
e subtraindo a sequência de datas do valor numérico 1225 em vez de fazer uma comparação com-ne
. O número inteiro resultante será interpretado como um booleano para a condição condicional em0
que (o que acontecerá no Natal) é interpretada comoFalse
(não insira o loop) e qualquer outro valor é interpretado comoTrue
(insira o loop).Como o número inteiro está à esquerda agora, a sequência de datas será convertida para o número inteiro e a matemática será feita, em oposição à versão anterior em que o
1225
número inteiro foi convertido em sequência para a comparação.Versão original
Windows PowerShell , 67 bytes
Experimente online!
Usando um
for
loop como umwhile
loop basicamente, porque é mais curto. Na condição de loop, verificamos a data atual (date
, uma forma abreviada deGet-Date
), canalizada paraForEach-Object
o alias de%
, usando o formulário que pode chamar um método pelo nome curinga; nesse caso, o método estáAddDays()
noDateTime
objeto e o valor que atribuímos é$i
.Isso é canalizado
ForEach-Object
novamente para invocar oToString()
método, com formato stringMd
(mês, depois dia, dígitos mínimos, pois não nos importamos com o que vem a seguir). Essa sequência é testada para verificar se não é igual-ne
ao número1225
, que será convertido em uma sequência para comparação, salvando-me as aspas.É por isso que não importa que os meses e os dias sejam de um dígito, nunca será ambíguo, porque não há outro dia do ano em que isso se restrinja
1225
.O loop continua até que a string seja
1225
. No início do programa,$i
será zero, comparando a data de hoje, e o loop nunca será executado, mas em qualquer outro dia$i
será incrementado no corpo do loop, para que possamos contar quantos dias até o próximo Natal, representando automaticamente os anos bissextos e se o Natal passou ou não este ano.Após o loop, apenas produzimos a string
Christmas
concatenada com o resultado da multiplicação da stringeve
pelo valor de$i
(que, no dia de Natal, será0
, resultando em nenhumeve
s).fonte
;
depois{$i++}
é redundante? (também wow você tomou a liderança sobre o bash novamente)C # (compilador interativo do Visual C #) , 89 bytes
Experimente online!
-3 bytes graças a @JeppeStigNielsen!
Minha estratégia é bem direta:
t
para a data atualEve
set
não for Natalt
e repitaTentei algumas coisas mais chiques, mas dessa maneira exigi o menor número de bytes.
fonte
t.Month<12|t.Day!=25
pelo menor$"{t:Md}"!="1225"
. Ele usa uma sequência interpolada e uma sequência de formatação personalizada DateTime.T-SQL,
9288 bytesEditar: salvou 4 bytes graças a @BradC.
fonte
PRINT'Christmas'+...
e mais 2 usando emDATEDIFF(D,
vez deDATEDIFF(DAY,
APL (Dyalog Unicode) ,
7663 bytes SBCSPrograma completo. Assume
⎕IO←0
(indexação zero).Experimente online!
⎕CY'dfns'
c o p y na biblioteca NDR⎕TS
atual t ime s tampo como [ano, mês, dia, hora, minuto, segundo, ms]days
[c] encontrar o número de dias [n] uma vez 1899/12/31 00: 00: 00.000(⍳366)
adicionar os primeiros 366 inteiros (0 … 365) para quedate
[c] encontre as datas [n] que correspondem a esses números (tabela 366 × 7; uma coluna por unidade)⍉
transposta (tabela 7 × 366; uma linha por unidade)1↓
descarte uma linha (os anos)2↑
demoram as duas primeiras linhas (meses e dias)12 25⍳⍨
localizam o índice do primeiro Natal4×
multiplicado por quatro' Eve'⍴⍨
que o usa para remodelar a lista de caracteres'Christmas ',
que o anexa a este[c] código dessa função
[n] notas para essa função
fonte
Python 2 ,
111103 bytesExperimente online!
Atualização inspirada na resposta de Richard Crossley .
Explicação:
fonte
Ruby , 80 bytes
Experimente online!
Obrigado a tsh por sua ideia
fonte
puts
porp
: Link Try It OnlinePHP, 61 bytes
Corra com
-n
ou experimente online .fonte
JavaScript,
1351311219288 bytesMinha primeira solução (ingênua) ( 135b ):
Ele define duas datas: agora e Natal deste ano. Se o último ainda não passou, apenas os diferencia, se já passou, difere do Natal do próximo ano. Usa diffs para o número de repetições.
(Tentando) Pensar fora da caixa ( 131b ):
O desafio especifica que saída é necessária ao executar o programa em um determinado dia, mas não especifica WHEN para devolvê-lo ...
Isso apenas 'dorme' por um dia, incrementa um contador em 1 e repita até o Natal, a fim de fornecer a saída.
Como o JavaScript não garante o tempo de 'suspensão', o resultado real pode estar desativado.
Também é feio para usar a
alert
função, o que significa que na verdade não estávamos lidando com JavaScript puro, mas também com APIs do navegador (podemos usarconsole.log
o custo de 6 bytes extras).Uma abordagem melhor ( 121b ):
A partir de hoje, aumente a data por um dia até que seja Natal, depois use o contador desse loop para o número de repetições necessárias.
Melhorando (incluindo passar por um minificador e usar o truque do 12Me21 para economizar 5b extras) ( 92b ):
Toques finais ( 88b ):
fonte
t.getMonth()/t.getDate-.48
para verificar se a data não é 25 de dezembroprint
é necessário uma vez que este é um programa não uma função, a menos 1. você transformá-lo em um lambda ou 2. você estado que você está usando um REPLt=new Date(+t+864e5)
é 1 byte mais curto.VBA (Excel), 108 bytes
Copie em um módulo em branco. Imprime na janela Imediata:
Nota: Usar em
:
vez de quebras de linha salva dois bytes por linha.Observe que o editor do VBA irá inserir espaços adicionais entre palavras-chave, operadores, etc ... e parênteses após a definição de Sub, mas se você copiar e colar esse código, ele funcionará (não consegui me livrar desse espaço antes do
&
).Nada mal para o VBA (pela primeira vez).
fonte
Christmas
: |&
lança um erronow
. Quando você faz isso, deve ser algo como?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Data do Bash + GNU,
7273 bytes!=
por-
d=0
, porquedate -dday
é a data + 1 e não funciona em 25/12Experimente online
fonte
=~
não funciona no condicional for-loop?Python 2, 128 bytes / Python 3, 130 bytes
é claro, menos dois bytes com o Python 2
fonte
as D
por si mesmoBash ,
686561 bytesGolpeou 4 bytes graças a Nahuel Fouilleul usando
``
substituição de comando eeval
no lugar de sede
exargs
Experimente online!
Dentro da
``
substituição de comando , temoseval
execute a seguinte cadeia como comandos shelldate\ -d{0..366}day\;
sob expansão cinta de{0..366}
, isto resulta na cadeiadate -d0day; date -d1day; date -d2day; ... date -d366day;
, cada comando nesta cadeia de computação a data, entre os 0 e os 366 dias do presente resultando na saída do formatoWed Dec 26 18:22:33 UTC 2018
, com cada um na sua própria linha de|sed
no qual, chame os seguintes comandos sed/c.25/Q
se o regex/c.25/
for correspondido,Q
use sem imprimir\;cEve
caso contrário, altere a linha paraEve
Todo o número necessário de
Eve
s é produzido cada um em sua própria linha. Essa saída é capturada``
e está sujeita à divisão de palavras, onde as palavras são divididas em novas linhas. Cada palavra é alimentada como argumento paraecho
.echo Christmas
...
Cada argumento para
echo
é impresso sendo separado por espaços, resultando na saída desejada.fonte
bash
específico nessa solução. Requer GNUdate
,sed
eseq
embora.C (gcc) , 157 bytes
Eu pensei que seria capaz de evitar a inclusão,
time.h
mas isso apenas causava falhas no segmento.Experimente online!
fonte
#include <stdlib.h>
, não é como ele faz alguma coisa aqui*t;f(u)
vez de*t,u;f()
e em#import<time.h>
vez de#include <time.h>
e em5[t=localtime(&u)]
vez de #t=localtime(&u);t[5]
Groovy , 66 bytes
Experimente online!
Cortesia de @ ASCII-only
fonte
Chistmas
: /Python 3, 106 bytes
fonte
Scala ,
116113 bytesExperimente online!
Onde
c 25
é curtoDec 25
.fonte
contains("c 25")
vez dematches(".*c 25.*")
JavaScript,
8677 bytesUsando o REPL, seria
Elogios a ASCII somente por -9 bytes
fonte
for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c
ou esta variante:for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s
ambos são 76 bytes.Lua ,
137118 bytes.118 bytes
137 bytes (anterior)
Vale ressaltar que ele não funciona no LuaJIT (erro de sintaxe)
fonte
MySQL, 102 bytes
praticamente o mesmo que a resposta T-SQL de Neil . Parece não haver uma maneira mais curta no SQL.
Experimente online .
fonte
MATLAB, 91 bytes
MATLAB Não-looper, 100 bytes
fonte
Scala , 123 bytes
Graças ao trabalho apenas do ASCII.
Experimente online!
Tempo de Scala + Joda , 140 bytes
Não é executado no TIO, pois requer a biblioteca Joda-Time.
fonte
java.util.Date
trabalhar aqui: /object Main extends App{}
caracteres na minha contagem (porque também não contei nas minhas outras respostas do Scala). Se tirarmos isso, você me venceu ^^withDate()
ligação é tão cara ...05AB1E ,
9389 bytesExperimente online ou Experimente online com uma data emulada e especificada automaticamente de 'hoje' .
Explicação:
05AB1E não possui nenhum built-in para datas, exceto para receber o ano / mês / dia / horas / minutos / segundos / microssegundos atual, portanto, a maioria dos bytes é usada para cálculos manuais.
Veja esta minha resposta para entender como vamos para o dia seguinte. (PS:
1¾ǝ
foi substituído porT`ǝ
, já que usamos ocounter_variable
outro lugar também.)Veja esta minha dica do 05AB1E (seções Como usar o dicionário? E Como comprimir números inteiros grandes? ) Para entender por que
'»ˆ
é"eve"
;'ŒÎ
é"christmas"
; eŽ9Ú
é1225
.fonte
C # (compilador interativo do Visual C #) , 141 bytes
Experimente online!
fonte
Vermelho ,
8986847876 bytes-10 bytes graças apenas ao ASCII!
Experimente online!
fonte
now
e nãonow/date
. Obrigado por suas melhorias!Perl 5 , 68 bytes
Experimente online!
Onde
c 25
é curtoDec 25
.fonte