Feliz aniversário para mim!

21

Feliz aniversário para mim!

Escreva um programa que imprima Happy birthday to me!no seu aniversário.

  1. 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.
  2. 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.
  3. 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%.
  4. Ele deve imprimir apenas isso e não imprimir nada em nenhum outro dia.
  5. Contar bytes, em UTF-8.
  6. 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 Melno aniversário de Mel Kaye , terá 20% de desconto. Mas você precisa fornecer uma fonte confiável de que é nesta data.

Ugoren
fonte
11
@TeunPronk, você não pode fazer as duas coisas. Use seu próprio aniversário ou a de uma celebridade (ou nenhuma e renuncie ao crédito extra).
ugoren
4
@TeunPronk: Apenas Jon Skeet pode: P
MSalters
11
Eu vi isso nos Perguntas Hot barra lateral e ler "Happy Birthday to Mel " ...
Izkata
11
@PeterTaylor: Hein? Conceder vários tipos de bônus de pontuação por recursos extras é bastante comum para perguntas sobre código de golfe , e nunca vi alguém afirmar que desqualificaria uma pergunta ao usar essa tag, desde que o critério de pontuação principal seja o tamanho do código.
Ilmari Karonen
11
@ Izkata, atualizou a pergunta em homenagem a Mel.
19414

Respostas:

10

PHP 77 75 74 65 60

Muito obrigado pelas excelentes sugestões de Tim Seguine :

<?date(dm,getlastmod())-date(dm)&&die?>Happy birthday to me!

Sneaky PHP: 46 42 41 40

Usando a idéia de Phil H e novamente a sugestão de Tim Seguine :

<?touch(__FILE__)?>Happy birthday to me!
ComFreek
fonte
Não inclui o ano na comparação? Nesse caso, ele funciona apenas no 0º aniversário.
ugoren
@ugoren Você está certo! Obrigado pela correção. 2 bytes salvos.
ComFreek 18/02
Se "não imprime nada" nas regras é interpretado como saída padrão, você pode ganhar 4 bytes removendo o ''contorno das dmstrings. Ele gerou um aviso, mas acredito que ele será enviado para erro padrão se o relatório de erros estiver ativado.
Tim Seguine
4
<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Tim Seguine
11
@TimSeguine Obrigado por suas sugestões! Eu os incorporei na minha resposta, espero que você não se importe.
ComFreek 19/02
48

Bash (sorrateira): 36

touch $0;echo Happy Birthday to me\!

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

print "Happy birthday to me!"

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!

Phil H
fonte
6
Ok, trapaceiro, receba o meu +1 pela esperteza.
Victor Stafusa
11
Você pode escapar do !com \!e remover as aspas para salvar 1 char
user12205
11
Bom truque, mas as regras proíbem explicitamente (agora).
ugoren
11
@ugoren Ainda não proíbe a solução perl, que é compilado antes que o programa é iniciado .
triturador de
3
@ Cruncher, eu tenho medo que você esteja certo. Vou consultar meu advogado e enviar a conta.
ugoren
13

bash - 65

[ `date +%d%m -r $0` = `date +%d%m` ]&&echo Happy birthday to me!

Obrigado a ugoren , ace e nyuszika7h pela ajuda.

shiona
fonte
Eu acho que você pode escapar do !com \!que você não precisa as aspas e salvar um caractere.
user12205
Na verdade, eu tinha as aspas, pois achei que o eco exigiria delas para os espaços. Tirei-os e não escapei do ponto de exclamação e ainda funcionava. Obrigado pela dica!
shiona
2
Você só precisa escapar !em shells interativos, não em scripts.
nyuszika7h
Você pode salvar dois caracteres usando [e em ]vez de [[e ]].
nyuszika7h
11
Funciona quando o ano não é o mesmo da data de criação?
ugoren
6

C # 198,05 (233 - 15%)

using s=System;class P{static void Main(){string t=s.DateTime.Now.ToString("Mdd"),b="1202";if(s.IO.File.GetCreationTime(typeof(P).Assembly.Location).ToString("Mdd")==t|b==t)s.Console.Write("Happy birthday to "+(b==t?"you!":"me!"));}}

Formatado:

using s = System;
class P
{
    static void Main()
    {
        string t = s.DateTime.Now.ToString("Mdd"), b = "1202";
        if (s.IO.File.GetCreationTime(typeof(P).Assembly.Location).ToString("Mdd") == t | b == t)
            s.Console.Write("Happy birthday to " + (b == t ? "you!" : "me!"));
    }
}

191 (Sem bônus)

using s=System;class P{static void Main(){if(s.IO.File.GetCreationTime(typeof(P).Assembly.Location).ToString("Mdd")==s.DateTime.Now.ToString("Mdd"))s.Console.Write("Happy birthday to me!");}}

181,05 (213 - 15%)

Com algumas instruções adicionais (você precisa compilar isso b.exee executá-lo no diretório em que o executável está), eu posso fazer o seguinte:

using s=System;class P{static void Main(){string t=s.DateTime.Now.ToString("Mdd"),b="1202";if(s.IO.File.GetCreationTime("b.exe").ToString("Mdd")==t|b==t)s.Console.Write("Happy birthday to "+(b==t?"you!":"me!"));}}

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%).

using s=System;class P{static void Main(){if(s.IO.File.GetCreationTime("b.exe").ToString("Mdd")==s.DateTime.Now.ToString("Mdd"))s.Console.Write("Happy birthday to me!");}}
RobIII
fonte
Você pode salvar alguns bytes nos bônus adicionando ,b="1202"==tdepois de obter a sequência de datas e usando-a.
ahruss
11
Obrigado! Embora "alguns bytes" acabe sendo um ... ou estou faltando alguma coisa? Editar Ah, entendo; você disse, ,b="1202"==tmas a ==tparte 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".
RobIII
Ah ok. Já faz um tempo desde que eu usei C #. Minha culpa.
ahruss
Você pode encurtar a versão mais simples comparando datas, não seqüências de caracteres. Este mens usando algo parecido CreationTime.Date == DateTime.Today.
svick
Isso funcionaria apenas para hoje / este ano / aniversário 0. Como isso funcionaria por outros anos?
18118 RobIII
5

Java - 275 - 15% = 233,75 com bônus / 237 sem bônus

Com bônus:

import java.util.*;class L{public static void main(String[]y){int s=f(new Date());String j="Happy birthday to ";System.out.print(s==f(new Date(new java.io.File("L.class").lastModified()))?j+"me!":s==183?j+"you!":"");}static int f(Date d){return d.getMonth()*40+d.getDate();}}

Sem o bônus:

import java.util.*;class L{public static void main(String[]y){if(f(new Date())==f(new Date(new java.io.File("L.class").lastModified())))System.out.print("Happy birthday to me!");}static int f(Date d){return d.getMonth()*40+d.getDate();}}

Nasci em 23 de abril.

Victor Stafusa
fonte
11
Feliz aniversário para , não para ;-) acabou de salvar-lhe um outro byte :-)
RobIII
@RobIII Obrigado, corrigido.
Victor Stafusa
Além disso, a nova linha ( \n) não é necessário AFAIK o que economiza mais 4 bytes ;-)
RobIII
@RobIII Obrigado novamente.
Victor Stafusa
Sim ... eu deveria parar de atirar no meu próprio pé: P De nada;)
RobIII
3

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").

import sys,os,time
if (int(os.stat(*sys.argv).st_atime/86400)==int(time.time()/86400)):print sys.argv[0]

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 :)

AMADANON Inc.
fonte
Eu acho que confiar no nome do arquivo é trapaça (embora eu não o tenha proibido explicitamente). Se for permitido, por que não escrever eval(sys.argv[0])?
ugoren
E não me preocupei em definir um aniversário, mas é um dia que acontece uma vez por ano em que uma pessoa comemora o aniversário de seu nascimento , não o dia exato em que você nasceu.
19414 ugoren
ugoren: Eu mencionei isso na minha nota na parte inferior (que antecede o seu comentário). 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
AMADANON Inc.
2

Matlab: 66

t=dir('f.m');if strncmp(t.date,date,5),'Happy birthday to me!',end

O nome do arquivo deve ser 'fm'

H.Muster
fonte
11
No seu aniversário, deve dizer "Parabéns a você !" :-)
RobIII
@RobIII: Opa, você está certo, eu não li com atenção suficiente. Irá remover a segunda versão. Obrigado!
H.Muster
Suponho que strncmp(x, y, 5)compara datas como 28-12-2013os 15 primeiros caracteres ( 28-12por exemplo, 28 de dezembro). Isso também funciona quando as configurações de localidade do usuário são, yyyy/mm/ddpor exemplo? O Matlab usa como padrão dd-mm-yyyysempre? (Apenas curioso). Edit Nevermind: found it! . Parece que sim. Isso não importa de qualquer maneira para mm/dd/yyyyou dd-mm-yyyydesde 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.
RobIII
Por que você precisa da variável t? Não dir('f.m').datefunciona?
19414
@ugoren: té necessário dirretornar 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 o datecampo.
H.Muster
2

GNU COBOL com -free, 204

PROGRAM-ID.B.DATA DIVISION.WORKING-STORAGE SECTION.
1 A PIC XXXX/XX.
1 B PIC X(5).
1 C PIC X(21).
PROCEDURE DIVISION.ACCEPT A FROM DATE
ACCEPT C
MOVE WHEN-COMPILED TO B
IF A(3:5) = B OR "12/09" DISPLAY C.

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 Cprecisa ser excluída ACCEPT Ce DISPLAY Cdeve se tornar DISPLAY "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 é truncado MOVEporque 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

Bill Woodger
fonte
2

Lote - 37 bytes

Roubando o método usado por uma das respostas do Bash.

@echo.>>%0&echo Happy birthday to me!

Outro método - 145 bytes

@for /f "tokens=2,3 delims=/ " %%a in ("%date%")do @for /f "tokens=1,2 delims=/" %%c in ("%~t0")do @if %%a%%b==%%c%%d @echo Happy Birthday to me!
desgrudar
fonte
1

Ruby, 69 caracteres / bytes

puts'Happy birthday to me!'if(Time.new-File.atime($0))%31536000<86400

31536000é o número de segundos em um ano e 86400é o número de segundos em um dia.

Maçaneta da porta
fonte
4
Infelizmente, só funciona corretamente por um período máximo de sete anos ou mais, até você executar o primeiro ano bissexto depois da hora.
Amadan
Também diz "feliz aniversário" na manhã seguinte ao seu aniversário e não diz feliz aniversário na manhã do seu aniversário antes da hora do seu nascimento.
AMADANON Inc.
1

Javascript

Node.js, 156 bytes

b=new Date(require("fs").statSync(__filename).mtime);d=new Date();b.getDate()==d.getDate()&&b.getMonth()==d.getMonth()&&console.log("Happy birthday to me!")

Usa o tempo de modificação do arquivo.

Chris W.
fonte
batendo em você por 56 bytes até agora = P
stroncium
Recebo um erro de tempo de execução quando executo o seu, mas a abordagem de correspondência é definitivamente muito mais inteligente. Corrija o erro e você receberá meu voto positivo. ;)
Chris W.
Você pode citar o erro e seu sistema operacional? Eu acho que não é apenas uma plataforma cruzada.
Stroncium
1

Powershell - 105 bytes

if('{0:M}'-f(gi $MyInvocation.MyCommand.Definition).creationtime-eq(date -f M)){'Happy birthday to me!'}

Ungolfed:

if('{0:M}' -f (gi $MyInvocation.MyCommand.Definition).creationtime -eq (date -f M)){
  'Happy birthday to me!'
}

O bônus não vale a pena, só consigo 117,5.

SpellingD
fonte
1

Powershell - 127

if ((gci $MyInvocation.MyCommand.Path).lastwritetime.ToString("MMdd") -eq (get-date).ToString("MMdd")){"happy birthday to me!"}

Para o bônus de 15% - 151 bytes, menos 15% = 128,4

$r=@{"0308"="you";(gci $MyInvocation.MyCommand.Path).lastwritetime.ToString("MMdd")="me"}[(get-date).tostring("MMdd")]
if($r){"Happy birthday to $r!"}
Chris J
fonte
11
Não sou especialista em PowerShell, mas isso só funcionará no ano atual? O que acontece quando o "programa" faz 1, 2, 3, etc. aniversário?
18114 RobIII
Você pode remover o writecomando - Com apenas "happy birthday to me!"ele será impresso.
unclemeat
Você está certo. Eu deveria saber disso.
Chris J
@Robill - oops. É o que acontece quando se escreve algo quando eu me distraio com outra coisa e uso o codegolf como procrastinação. Corrigido (não que tenha chance de ganhar, lembre-se).
Chris J
1

Ruby - 80 103 87 bytes

m=File.mtime $0
t=Time.now
puts"Happy birthday to me!"if t.month==m.month&&t.day==m.day

Rubi - 123 115 135 121 - 15% = 104,55 97,75 114,75 102,85 pontos

t=Time.now
{me:File.mtime($0),you:Time.at(36e5)}.map{|n,d|puts"Happy birthday to #{n}!"if t.month==d.month&&t.day==d.day}

Pode 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!

t=Time.now
{me:File.mtime($0),you:Time.at(36e5),Mel:Time.at(2e5)}.map{|n,d|puts"Happy birthday to #{n}!"if t.month==d.month&&t.day==d.day}
Tim S.
fonte
11
Seu código falha em anos bissextos, para datas após fevereiro.
19414 ugoren
@ugoren você está certo. Corrigido isso, mas perdi muitos pontos :(
Tim S.
Mas agora eu recuperei a maioria deles! =)
Tim S.
0

PureBasic

Sem Bônus - 142

If Bool(FormatDate("%dd%mm",Date())=FormatDate("%dd%mm",GetFileDate(ProgramFilename(),0)))
MessageRequester("","Happy birthday To me!")
EndIf

Com bônus - 218 - 15% = 185,3

Dim s$(2)
s$(1)="me"
s$(2)="you"
m$="%dd%mm"
d$=FormatDate(m$,Date())
i=Bool(d$=FormatDate(m$,GetFileDate(ProgramFilename(),0)))|(Bool(d$="2301")<<1)
If i=0:End:EndIf
MessageRequester("","Happy birthday To "+s$(i)+"!")
Fozzedout
fonte
0

TI-BASIC, 68 bytes

If Ans=0:getDate→G:0:G=G:If getDate=G:Disp "HAPPY BIRTHDAY TO ME!"

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.

Timtech
fonte
11
Tem certeza de que é UTF-8?
Fozzedout
3
OP afirma explicitamente que você deve usar UTF-8. São 66 caracteres e 68 bytes.
nyuszika7h
2
Se você quiser reivindicar 46 bytes, escreva-os em 46 bytes. Como é agora, são 68 bytes.
ugoren
De acordo com o tamanho dos tokens em um ambiente TI-Basic padrão, ele tem 55 bytes, mas como texto sem formatação é 68. Também tecnicamente não é necessário que haja um "no final para que possa salvar um byte.
Lemon Drop
0

J 79

 echo((6!:0'')(('',:'Happy birthday to me!'){~])@:-:&(1 2&{)&:>])1{,1!:0{:4!:3''

Versão bônus120 - 15% = 102

Recebo crédito extra por imprimir também quando ambos estão fazendo aniversário?

echo((2 6$(6!:0 '') , 0 2 7)(' ','Happy birthday to ',"2 1]3 5$'you! me!  both!'){~#.@:(-:&(1 2&{)"1)&:>])1{,1!:0{:4!:3''

Explicação (da direita para a esquerda):

last =: {:4!:3''     NB. Take the last script run (i.e. the file itself)
time =: 1{,1!:0 last NB. the modification time is the second element in that file's listing

O verbo central do trem

unbox_both =: &:>      NB. unboxes left and right argument
match  =: -:&(1 2&{)"1 NB. for each date given, left and right, compare them
to_int =: #.           NB. convert boolean to int
from   =: {~           NB. from the left array, take element right.

NB. H contains messages an empty row, appended to all combinations of messages. 
H =: (' ','Happy birthday to ',"2 1]3 5$'you! me!  both!')

V =: (H from to_int)@:match unbox_both NB. after unboxing and comparing, 
                                       NB. select the according message

O dente esquerdo do trem central:

dates=: (2 6$(6!:0 '') , 0 2 7) NB. the current date, and the relevant fields of my birthday.

NB. Combining the bricks:
echo (dates V ]) time           NB. output the monads result on time.
jpjacobs
fonte
0

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.

class Z{public static void main(String[]y){if("".format("%tj",new java.util.Date()).equals("".format("%tj",new java.io.File("Z.class").lastModified())))System.out.print("Happy birthday to me!");}}

Formatado:

class Z
{
    public static void main(String[] y)
    {
        if ("".format("%tj", new java.util.Date()).equals("".format("%tj", new java.io.File("Z.class").lastModified())))
            System.out.print("Happy birthday to me!");
    }
}
timxyz
fonte
11
O dia do ano não funciona bem com os anos bissextos.
ugoren
@ugoren Eu concordo. No entanto, como o concurso está em andamento e estamos no dia 20 de fevereiro. o dat de compilação deve ficar bom por alguns dias e não causar problemas nos anos seguintes. Ao compilar após 28 de fevereiro, haverá um problema (futuro) de fato.
22414 RobIII
Se eu estivesse compilando após 28 de fevereiro eu poderia mudar o formato String para "% tm% td" a um custo de caracteres de seis pontos
timxyz
0

C # 191 sem bônus

using s=System;class P{static void Main(){if(s.IO.File.GetCreationTime(typeof(P).Assembly.Location).ToString("Mdd")==s.DateTime.Now.ToString("Mdd"))s.Console.Write("Happy birthday to me!");}}

formatado:

using s = System;
class P
{
    static void Main()
    {
        if (s.IO.File.GetCreationTime(typeof(P).Assembly.Location).ToString("Mdd") == s.DateTime.Now.ToString("Mdd"))
            s.Console.Write("Happy birthday to me!");
    }
}
Alberto
fonte
Você usa x apenas duas vezes; var x="MMdd";+ ToString ( x) + ToString ( x) = 15 enquanto ToString ( "MMdd"); + ToString ( "MMdd"); Custa apenas 12. #
1140 RobIII
Além disso, uma nova linha não é necessária e WriteLine()pode ser reduzida para Write(). Com acima e esta mudança no lugar que você tem exatamente a mesma solução como eu ;-)
RobIII
11
Você também deve atualizar a pontuação, que é 193 agora. E você pode
reduzi
0

JavaScript (node.js) - 100 bytes

(require('fs').fstatSync(4).mtime+1).match(Date().substr(4,6))&&console.log('Happy birthday to me!')
estrôncio
fonte
0

vb.net ~ 161c

Isso imprimirá a mensagem de comemoração para todos de quem é o aniversário.

Module M
Sub Main
For Each b In{({"1705","Alan"}),({"2012","You"}),({FileDateTime(Process.GetCurrentProcess.MainModule.FileName).ToString("ddMM"),"Me"})}
If b(0)=Now.ToString("ddMM") Then Console.WriteLine("Happy Birthday To {0}!",b(1))
Next
End Sub
End Module

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

Adam Speight
fonte
Você pode obter um bônus no seu aniversário ou em uma celebridade. Não ambos.
Ugoren
A pontuação do @ugoren não indica que é um ou exclusivo, então estou usando o significado lógico de ou.
Adam Speight 30/03
0

Powershell, 82 bytes

ver também respostas de Chris J e SpellingD

"Happy birthday to me!"|?{(gv My* -v|% M*|% p*h|gci|% l*w*e|% D*r)-eq(date|% D*r)}

Onde

gv My* -v|% M*|% p*h|gci|% l*w*e|% D*r

são as combinações de atalhos e aliases para a expressão:

Get-Valiable MyInvocation -value|% MyCommand|% Path|Get-ChildItem|% LastWritetime|% DayOfYear

esse equivalente a uma forma canônica:

(Get-ChildItem $MyInvocation.MyCommand.Path).LastWritetime.DayOfYear

Powershell, 119 bytes - 14% = 102,34 pontos

filter e{$_-eq(date|% D*r)}$('me'|?{gv My* -v|% M*|% p*h|gci|% l*w*e|% D*r|e}
'Prof'|?{3|e})|%{"Happy birthday to $_!"}

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.

confuso
fonte
-1

C # - 63 bytes

class P
{
    static void Main()
    {
          Console.Write("Happy birthday to me!"));
    }
}

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.

rahulroy9202
fonte
11
Truque antigo, não é mais válido. A regra 2 diz que "não deve ser afetado pela invocação ou execução do programa de forma alguma".
Ugoren
atualizado de acordo. Obrigado @ugoren
rahulroy9202
@ugoren O código PERL de Phil H também usa esse mesmo truque. Verifique a resposta mais votada.
rahulroy9202
2
Também é uma resposta inválida. Mas - ele foi o primeiro a usar esse truque e, no momento em que o fez, as regras permitiram.
ugoren