Feliz aniversário para mim!
Escreva um programa que imprima Happy birthday to me!
no seu aniversário.
- O aniversário do programa é a criação, a última modificação ou o tempo de compilação do programa (você escolhe) e não deve ser codificado.
- A data que você usa como data de nascimento não deve ser afetada pela invocação ou execução do programa de forma alguma. Você não pode modificar seu aniversário.
- Para crédito extra (contagem de 15% de bytes), imprima
Happy birthday to you!
no seu aniversário (codificado), se não coincidir com o do programa. Ou use o aniversário de algumas celebridades e ganhe -14%. - Ele deve imprimir apenas isso e não imprimir nada em nenhum outro dia.
- Contar bytes, em UTF-8.
- Use o calendário gregoriano.
Boa sorte e feliz aniversário (para os programas para recém-nascidos).
PS
Após o comentário de Izkata, se você imprimir Happy birthday to Mel
no aniversário de Mel Kaye , terá 20% de desconto. Mas você precisa fornecer uma fonte confiável de que é nesta data.
Respostas:
PHP
7775746560Muito obrigado pelas excelentes sugestões de Tim Seguine :
Sneaky PHP:
46424140Usando a idéia de Phil H e novamente a sugestão de Tim Seguine :
fonte
''
contorno dasdm
strings. Ele gerou um aviso, mas acredito que ele será enviado para erro padrão se o relatório de erros estiver ativado.<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Bash (sorrateira): 36
De acordo com as regras: "tempo de criação, modificação ou compilação do programa". Eu escolho o tempo de modificação e uma auto-modificação perpétua. [HT @ace por 1 caractere]
Perl (também sorrateira): 29
Este é sem dúvida menos sorrateiro que o primeiro; Os programas Perl são sempre compilados antes de serem executados, o que nem todo mundo sabe - veja, há uma rotação educacional sobre a sorrateira. Então aqui está a data de compilação que estou usando.
- Editar para alteração de regra -
Isso foi escrito antes que houvesse alguma regra sobre como alterar seu aniversário. Eu acho que o Perl ainda está de pé; todos os programas Perl são compilados antes de serem executados. Deixarei a resposta aqui por motivos educacionais!
fonte
!
com\!
e remover as aspas para salvar 1 charbash - 65
Obrigado a ugoren , ace e nyuszika7h pela ajuda.
fonte
!
com\!
que você não precisa as aspas e salvar um caractere.!
em shells interativos, não em scripts.[
e em]
vez de[[
e]]
.C # 198,05 (233 - 15%)
Formatado:
191 (Sem bônus)
181,05 (213 - 15%)
Com algumas instruções adicionais (você precisa compilar isso
b.exe
e executá-lo no diretório em que o executável está), eu posso fazer o seguinte:171 (Sem bônus)
As mesmas instruções acima, desta vez apenas imprimindo uma mensagem em seu próprio aniversário (portanto, nenhum bônus de -15%).
fonte
,b="1202"==t
depois de obter a sequência de datas e usando-a.,b="1202"==t
mas a==t
parte não é possível, pois ela é avaliada como booleana e a outra var é uma string. Você não pode (AFAIK) usar dois tipos diferentes em uma declaração "var".CreationTime.Date == DateTime.Today
.Java - 275 - 15% = 233,75 com bônus / 237 sem bônus
Com bônus:
Sem o bônus:
Nasci em 23 de abril.
fonte
\n
) não é necessário AFAIK o que economiza mais 4 bytes ;-)Estou muito orgulhoso desse pequeno truque para salvar alguns bytes na mensagem. Espero que seja incluído em outras respostas. Eu fui o primeiro a pensar nisso!
Python
105 caracteres, sem crédito extra. Salve o arquivo como "feliz aniversário para mim" e execute. É executado apenas no GMT, e "aniversário" é definido como a data do seu nascimento, não o aniversário (também chamado de "aniversário").
Para que funcione, salve isso como "feliz aniversário para mim" e execute
python "happy birthday to me"
Nota: é claro, a quase totalidade da inicialização poderia estar no nome do arquivo, reduzindo qualquer código arbitrariamente grande até a inicialização. Normalmente eu consideraria essa "trapaça". No entanto, "parabéns para mim" não é um nome de arquivo irracional - descreve o que o programa faz, muito melhor do que alguns programas (por exemplo, "python"), portanto, neste caso, vou permitir :)
fonte
eval(sys.argv[0])
?However, "happy birthday to me" is not an unreasonable filename - it describes what the program does, much better than some programs (e.g. "python"), so in this case I'm going to allow it
Matlab: 66
O nome do arquivo deve ser 'fm'
fonte
strncmp(x, y, 5)
compara datas como28-12-2013
os 15 primeiros caracteres (28-12
por exemplo, 28 de dezembro). Isso também funciona quando as configurações de localidade do usuário são,yyyy/mm/dd
por exemplo? O Matlab usa como padrãodd-mm-yyyy
sempre? (Apenas curioso). Edit Nevermind: found it! . Parece que sim. Isso não importa de qualquer maneira paramm/dd/yyyy
oudd-mm-yyyy
desde que ambos à esquerda e operando à direita usaria o mesmo formato de qualquer maneira e ambos os 5 caracteres mais à esquerda iria corresponder de qualquer maneira; enquanto o ano nunca estiver levando.t
? Nãodir('f.m').date
funciona?t
é necessáriodir
retornar os atributos do arquivo (caso contrário, retornaria todos os arquivos no diretório que correspondem'f.m'
). Além disso,t
é necessário acessar odate
campo.GNU COBOL com -free, 204
Eu quebro as regras sobre a celebridade, então nenhum bônus aí ...
O texto produzido é de entrada do usuário (solicitado quando executado). Se isso não for bom, a definição da linha
C
precisa ser excluídaACCEPT C
eDISPLAY C
deve se tornarDISPLAY "HAPPY BIRTHDAY TO ME!"
, para um extra de sete caracteres.WHEN-COMPILED
é um registro especial que contém a data / hora da compilação que está disponível para o programa (sempre útil, você pode saber que possui a versão correta). Ele é truncadoMOVE
porque o restante não é necessário.DATE
é a data atual - esta é aaamdd.O
/
na definição de A é um símbolo de edição de inserção, uma vez que a data de compilação contém barras. Um caractere extra, mas facilita a comparação.Celebridade = Grace Hopper
fonte
Lote - 37 bytes
Roubando o método usado por uma das respostas do Bash.
Outro método - 145 bytes
fonte
Ruby, 69 caracteres / bytes
31536000
é o número de segundos em um ano e86400
é o número de segundos em um dia.fonte
Javascript
Node.js, 156 bytes
Usa o tempo de modificação do arquivo.
fonte
Powershell - 105 bytes
Ungolfed:
O bônus não vale a pena, só consigo 117,5.
fonte
Powershell - 127
Para o bônus de 15% - 151 bytes, menos 15% = 128,4
fonte
write
comando - Com apenas"happy birthday to me!"
ele será impresso.Ruby -
8010387 bytesRubi -
123115135121 - 15% =104,5597,75114,75102,85 pontosPode ser um pouco mais longo ou mais curto, dependendo de onde o seu aniversário cai no ano e a maneira mais curta de representá-lo. Para o meu, isso é
36e5
(segundos desde a época; depende do fuso horário).Mel Gibson conta? Aqui está um programa de 138 bytes - bônus de 35% = 89,7 pontos que celebra a si mesmo, eu e Mel!
fonte
PureBasic
Sem Bônus - 142
Com bônus - 218 - 15% = 185,3
fonte
TI-BASIC, 68 bytes
Lembre-se, esses tokens são um byte:
If , Ans, →, Disp
.getDate
é de dois bytes. Todos os outros símbolos de um caractere são de um byte.fonte
J 79
Versão bônus120 - 15% = 102
Recebo crédito extra por imprimir também quando ambos estão fazendo aniversário?
Explicação (da direita para a esquerda):
O verbo central do trem
O dente esquerdo do trem central:
fonte
Java - 196
Isso difere da outra submissão Java usando Strings, raspando 41 caracteres no processo. Ele usa String.format ("% tj") para formatar um java.util.Date ou um String do dia do ano e depois compara essas duas Strings.
Formatado:
fonte
C # 191 sem bônus
formatado:
fonte
var x="MMdd";
+ ToString (x
) + ToString (x
) = 15 enquanto ToString ("MMdd"
); + ToString ("MMdd"
); Custa apenas 12. #WriteLine()
pode ser reduzida paraWrite()
. Com acima e esta mudança no lugar que você tem exatamente a mesma solução como eu ;-)JavaScript (node.js) - 100 bytes
fonte
vb.net ~ 161c
Isso imprimirá a mensagem de comemoração para todos de quem é o aniversário.
Alan => Alan Kaye
Pontuação: 253c (-33c vb.net min) = 220 - 15% (meu bônus de aniversário) = 187c - 14% (aniversário da celebridade) = 160,82 ~ 161c ou 220c - 29% = 156,2 ~ 157c
fonte
Powershell, 82 bytes
Onde
são as combinações de atalhos e aliases para a expressão:
esse equivalente a uma forma canônica:
Powershell, 119 bytes - 14% = 102,34 pontos
Em 3 de janeiro , o script é exibido
Happy birthday to Prof!
. Se esse script for salvo em 3 de janeiro, duas saudações serão exibidas.fonte
C # - 63 bytes
Eu escolho o tempo de compilação . Como o código C # é compilado no MSIL, que em tempo de execução é compilado no código executável pelo JIT Compiler , esse programa atende às condições.
EDIT-- Resposta possivelmente inválida, como apontado nos comentários.
fonte