¡Feliz cumpleaños para mi!

21

¡Feliz cumpleaños para mi!

Escriba un programa que imprima Happy birthday to me!en su cumpleaños.

  1. El cumpleaños del programa es el momento de creación, última modificación o compilación del programa (usted elige), y no debe estar codificado.
  2. La fecha que use como cumpleaños no debe verse afectada por la invocación o ejecución del programa de ninguna manera. No puedes modificar tu cumpleaños.
  3. Para obtener crédito adicional (-15% de bytes), imprima Happy birthday to you!en su cumpleaños (codificado), si no coincide con el programa. O use el cumpleaños de alguna celebridad y obtenga -14%.
  4. Debe imprimir solo esto, y no imprimir nada en ningún otro día.
  5. Contar bytes, en UTF-8.
  6. Usa el calendario gregoriano.

Buena suerte y feliz cumpleaños (a los programas para recién nacidos).

PD:
Siguiendo el comentario de Izkata, si imprimes Happy birthday to Melen el cumpleaños de Mel Kaye , obtienes un 20% de descuento. Pero debe proporcionar una fuente creíble de que es esta fecha.

Ugoren
fuente
1
@TeunPronk, no puedes hacer ambas cosas. Use su propio cumpleaños o el de una celebridad (o ninguno, y renuncie al crédito adicional).
ugoren
44
@TeunPronk: Solo Jon Skeet puede: P
MSalters
11
Vi esto en la barra lateral de Preguntas más frecuentes y leí "Feliz cumpleaños a Mel " ...
Izkata
1
@PeterTaylor: ¿Eh? Otorgar varios tipos de bonificaciones de puntaje por características adicionales es bastante común para las preguntas de código de golf , y nunca antes había visto a nadie afirmar que descalificaría una pregunta del uso de esa etiqueta, siempre que el criterio de puntuación principal sea ​​la longitud del código.
Ilmari Karonen
1
@Izkata, Actualizó la pregunta en honor a Mel.
ugoren

Respuestas:

10

PHP 77 75 74 65 60

Muchas gracias a las excelentes sugerencias de Tim Seguine :

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

PHP furtivo: 46 42 41 40

Usando la idea de Phil H y nuevamente la sugerencia de Tim Seguine :

<?touch(__FILE__)?>Happy birthday to me!
ComFreek
fuente
¿No incluye el año en la comparación? si es así, solo funciona en el cumpleaños número 0.
ugoren
@ugoren Tienes razón! Gracias por la corrección. 2 bytes guardados.
ComFreek
Si "no imprime nada" en las reglas se interpreta como salida estándar, entonces puede ganar 4 bytes quitando ''las dmcadenas. Se generó una advertencia, pero creo que se envía al error estándar si el informe de errores está activado.
Tim Seguine
44
<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Tim Seguine
1
@TimSeguine ¡Gracias por tus sugerencias! Los he incorporado a mi respuesta, espero que no te importe.
ComFreek
48

Bash (astuto): 36

touch $0;echo Happy Birthday to me\!

Según las reglas: "tiempo de creación, modificación o compilación del programa". Elijo el tiempo de modificación, y una auto modificación perpetua. [HT @ace por 1 char]

Perl (también astuto): 29

print "Happy birthday to me!"

Este es posiblemente menos astuto que el primero; Los programas de Perl siempre se compilan antes de que se ejecuten, lo que no todo el mundo sabe. Mire, hay un giro educativo sobre la astucia. Así que aquí está la fecha de compilación que estoy usando.

- Editar para cambio de regla -

Esto fue escrito antes de que hubiera alguna regla sobre cambiar tu cumpleaños. Creo que el Perl sigue en pie; Todos los programas de Perl se compilan antes de ejecutarse. ¡Dejaré la respuesta aquí por razones educativas!

Phil H
fuente
66
Ok, tramposo, obtén mi +1 por la inteligencia.
Victor Stafusa
1
Puede escapar de !con \!y eliminar las comillas para guardar 1 char
user12205
1
Buen truco, pero las reglas lo prohíben explícitamente (ahora).
ugoren
1
@ugoren Aún no prohíbe la solución perl, que se compila antes de que comience el programa .
Cruncher
3
@Cruncher, me temo que tienes razón. Consultaré a mi abogado y le enviaré la factura.
ugoren
13

bash - 65

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

Gracias a ugoren , as y nyuszika7h por su ayuda.

shiona
fuente
Creo que puedes escapar !con el \!para que no necesites las comillas y ahorres 1 personaje.
usuario12205
En realidad tenía las citas ya que pensaba que echo las requeriría para los espacios. Los saqué y no escapé del signo de exclamación y todavía funcionó. ¡Gracias por el consejo!
shiona
2
Solo necesita escapar !en shells interactivos, no scripts.
nyuszika7h
Puede guardar dos caracteres usando [y en ]lugar de [[y ]].
nyuszika7h
1
¿Funciona cuando el año no es el mismo que la fecha de creación?
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!"));}}

Formateado:

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 (sin bonificación)

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

Con algunas instrucciones adicionales (necesita compilar esto b.exey ejecutarlo desde el directorio en el que se encuentra el ejecutable) puedo obtener esto:

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 (sin bonificación)

Las mismas instrucciones que las anteriores, esta vez solo imprimen un mensaje en su propio cumpleaños (por lo que no hay un bono 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
fuente
Puede ahorrar algunos bytes en los bonos agregando ,b="1202"==tdespués de obtener la cadena de fecha y usarla en su lugar.
ahruss
1
¡Gracias! Aunque "pocos bytes" resulta ser uno ... ¿o me estoy perdiendo algo? Editar Ah, ya veo; dijiste ,b="1202"==tpero la ==tparte no es posible ya que eso se evalúa como bool y la otra var es una cadena. No puede (AFAIK es decir) usar dos tipos diferentes en una declaración "var".
RobIII
Ah bien. Ha pasado un tiempo desde que usé C #. Culpa mía.
ahruss
Puede acortar la versión más simple comparando fechas, no cadenas. Este hombre usa algo como CreationTime.Date == DateTime.Today.
svick
Eso solo funcionaría para hoy / este año / cumpleaños 0. ¿Cómo funcionaría eso para otros años?
RobIII
5

Java - 275 - 15% = 233.75 con bonificación / 237 sin bonificación

Con bonificación:

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();}}

Sin el bono:

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();}}

Nací el 23 de abril.

Victor Stafusa
fuente
1
Feliz cumpleaños a , no para ;-) Sólo se salvó otro byte :-)
RobIII
@RobIII Gracias, arreglado.
Victor Stafusa
Además, la nueva línea ( \n) no se requiere AFAIK que le ahorra otros 4 bytes ;-)
RobIII
@RobIII Gracias de nuevo.
Victor Stafusa
Sí ... debería dejar de dispararme a mi propio pie: P De
nada
3

Estoy muy orgulloso de este pequeño truco para guardar algunos bytes en el mensaje. Espero que se incluya en otras respuestas. ¡Fui el primero en pensar en esto!

Pitón

105 caracteres, sin crédito adicional. Guarde el archivo como "feliz cumpleaños para mí" y ejecútelo. Se ejecuta solo en GMT, y "cumpleaños" se define como la fecha de su nacimiento, no su aniversario (a menudo también llamado "cumpleaños").

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

Para que funcione, guarde esto como "feliz cumpleaños para mí" y ejecute python "happy birthday to me"

Nota: por supuesto, todo menos un pequeño bootstrap podría estar en el nombre del archivo, haciendo que cualquier código arbitrariamente grande se reduzca al bootstrap. Normalmente consideraría este "engaño". Sin embargo, "feliz cumpleaños para mí" no es un nombre de archivo irracional: describe lo que hace el programa, mucho mejor que algunos programas (por ejemplo, "python"), por lo que en este caso lo permitiré :)

AMADANON Inc.
fuente
Creo que confiar en el nombre del archivo es hacer trampa (aunque no lo prohibí explícitamente). Si está permitido, ¿por qué no solo escribir eval(sys.argv[0])?
ugoren
Y no me molesté en definir un cumpleaños, pero es un día que ocurre una vez al año cuando una persona celebra el aniversario de su nacimiento , no el día exacto en que naciste.
Ugoren
Ugoren: Mencioné eso en mi nota en la parte inferior (que es anterior a su comentario). 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

El nombre del archivo debe ser 'fm'

H.Muster
fuente
1
En tu cumpleaños debería decir "¡Feliz cumpleaños a ti !" :-)
RobIII
@RobIII: Vaya, tienes razón, no leí con suficiente cuidado. Eliminará la segunda versión. ¡Gracias!
H.Muster
Supongo que strncmp(x, y, 5)compara fechas como 28-12-2013los primeros 15 caracteres ( 28-12por ejemplo, el 28 de diciembre). ¿Esto también funciona cuando la configuración regional del usuario es, yyyy/mm/ddpor ejemplo? ¿Matlab tiene el valor predeterminado dd-mm-yyyysiempre? (Sólo curioso). Editar Nevermind: ¡lo encontré! . Parece que sí. No importaría de todos modos para mm/dd/yyyyo dd-mm-yyyydesde tanto la izquierda como la derecha del operando sería utilizar el mismo formato de todos modos y ambos 5 caracteres más a la izquierda coincidiría con todos modos; siempre y cuando el año nunca lidere.
RobIII
¿Por qué necesitas la variable t? No dir('f.m').datefunciona
Ugoren
@ugoren: tes necesario para dirdevolver los atributos del archivo (de lo contrario, solo devolvería todos los archivos en el directorio que coincidan 'f.m'). Además, tes necesario acceder al datecampo.
H.Muster
2

GNU COBOL con -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.

Rompo las reglas sobre la celebridad, así que no hay bonificación allí ...

El texto producido es introducido por el usuario (solicitado cuando se ejecuta). Si eso no es bueno, entonces la línea que define Cdebe ser eliminada, al igual que ACCEPT C, y DISPLAY Cdebe ser DISPLAY "HAPPY BIRTHDAY TO ME!", para siete caracteres adicionales.

WHEN-COMPILEDes un registro especial que contiene la fecha / hora de compilación que está disponible para el programa (siempre útil, puede saber que tiene la versión correcta). Se trunca en el MOVEporque el resto no es necesario. DATEes la fecha actual, esta es aammdd.

El /en la definición de A es un símbolo de edición de inserción, ya que la fecha de compilación contiene barras inclinadas. Un personaje extra, pero facilita la comparación.

Celebridad = Grace Hopper

Bill Woodger
fuente
2

Lote: 37 bytes

Robar el método utilizado por una de las respuestas de Bash.

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

Otro 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!
carne sin carne
fuente
1

Ruby, 69 caracteres / bytes

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

31536000es la cantidad de segundos en un año y 86400es la cantidad de segundos en un día.

Pomo de la puerta
fuente
44
Desafortunadamente, solo funciona correctamente durante un máximo de siete años más o menos, hasta que se encuentre con el primer año bisiesto después del momento.
Amadan
También dice "feliz cumpleaños" en la mañana después de su cumpleaños, y no dice feliz cumpleaños la mañana de su cumpleaños antes de su hora de nacimiento.
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!")

Utiliza la hora de modificación del archivo.

Chris W.
fuente
superándote por 56 bytes hasta ahora = P
strongcium
Recibo un error de tiempo de ejecución cuando ejecuto el suyo, pero el enfoque de coincidencia es definitivamente mucho más inteligente. Solucione el error y obtendrá mi voto a favor. ;)
Chris W.
¿Puedes citar el error y tu sistema operativo? Supongo que no es una plataforma cruzada.
strongcium
1

Powershell - 105 bytes

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

Sin golf:

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

El bono no vale la pena, solo puedo obtener 117.5.

OrtografíaD
fuente
1

Powershell - 127

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

Para el bono del 15%: 151 bytes, menos del 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
fuente
1
No soy un experto en PowerShell, pero ¿esto solo funcionará en el año en curso? ¿Qué sucede cuando el "programa" cumple 1, 2, 3, etc. cumpleaños?
RobIII
Puede eliminar el writecomando: con solo "happy birthday to me!"lo imprimirá.
Unclemeat
Tienes toda la razón. Debería saber eso.
Chris J
@Robill - ¡Uy! Eso es lo que viene de escribir algo cuando estoy distraído por otra cosa y usando codegolf como dilación. Solucionado (no es que tenga una oportunidad de ganar, mente).
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

Ruby - 123 115 135 121 - 15% = 104.55 97.75 114.75 102.85 puntos

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}

Puede ser un poco más largo o más corto dependiendo de dónde cae tu cumpleaños en el año, y la forma más corta de representarlo. Para el mío, eso es 36e5(segundos desde la época; depende de la zona horaria).


¿Mel Gibson cuenta? ¡Aquí hay un byte de 138 - 35% de bonificación = programa de 89.7 puntos que se celebra a sí mismo, a mí y a 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.
fuente
1
Su código falla en los años bisiestos, para fechas posteriores a febrero.
Ugoren
@ugoren tienes razón. Se corrigió eso, pero perdió muchos puntos :(
Tim S.
¡Pero ahora he reclamado la mayoría de esos! =)
Tim S.
0

PureBasic

Sin Bono - 142

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

Con Bono - 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
fuente
0

TI-BASIC, 68 bytes

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

Recuerde, estas fichas son un byte: If , Ans, →, Disp. getDateson dos bytes Todos los demás símbolos de un carácter son de un byte.

Timtech
fuente
1
¿Estás seguro de que es UTF-8?
Fozzedout
3
OP declara explícitamente que debe usar UTF-8. Eso es 66 caracteres y 68 bytes.
nyuszika7h
2
Si desea reclamar que tiene 46 bytes, escríbalo en 46 bytes. Como es ahora, son 68 bytes.
ugoren
De acuerdo con los tamaños de ficha en un entorno estándar-TI básico es de 55 bytes, pero sí como texto plano su 68. También existe técnicamente no tiene que ser un "al final lo que podría ahorrar un byte.
gota de limón
0

J 79

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

Versión de bonificación 120 - 15% = 102

¿Recibo crédito adicional por imprimir ambos cuando ambos cumplen años?

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''

Explicación (de derecha a izquierda):

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

El verbo central del tren.

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

El diente izquierdo para el tren 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
fuente
0

Java - 196

Esto difiere del otro envío de Java mediante el uso de cadenas, lo que elimina 41 caracteres en el proceso. Utiliza String.format ("% tj") para formatear un java.util.Date o un String largo como un día del año, y luego compara estos dos 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!");}}

Formateado:

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
fuente
1
El día del año no funciona bien con los años bisiestos.
Ugoren
@ugoren estoy de acuerdo. Sin embargo, dado que el concurso se está ejecutando actualmente y estamos al 20 de febrero. el dato de compilación debería estar bien durante unos días y no causar un problema después de años. Al compilar después del 28 de febrero habrá un problema (futuro) de hecho.
RobIII
Si estuviera compilando después del 28 de febrero, podría cambiar el formato de cadena a "% tm% td" a un costo de seis puntos de carácter
timxyz
0

C # 191 sin bonificación

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!");}}

formateado:

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
fuente
Usas x solo dos veces; var x="MMdd";+ ToString ( x) + ToString ( x) = 15 mientras que ToString ( "MMdd"); + ToString ( "MMdd"); solo cuesta 12.
RobIII
Además, no se requiere una nueva línea, por lo que WriteLine()se puede acortar Write(). Con lo anterior y este cambio en su lugar, tiene exactamente la misma solución que yo ;-)
RobIII
1
También debe actualizar el puntaje, que ahora es 193. Y puede bajarlo a 191 al quitar dos M de * pista *: P
RobIII
0

JavaScript (node.js): 100 bytes

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

vb.net ~ 161c

Esto imprimirá el mensaje de celebración a todos cuyo cumpleaños sea.

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

Puntuación: 253c (-33c vb.net min) = 220 - 15% (mi bono de cumpleaños) = 187c - 14% (Celeb Birthday) = 160.82 ~ 161c o 220c - 29% = 156.2 ~ 157c

Adam Speight
fuente
Puede obtener un bono por su cumpleaños O una celebridad. No ambos.
Ugoren
@ugoren Scoring no dice que sea exclusivo o, así que estoy usando el significado lógico de o.
Adam Speight
0

Powershell, 82 bytes

véanse también las respuestas de Chris J y SpellingD

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

dónde

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

son las combinaciones de atajos y alias para la expresión:

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

que equivale a una forma canónica:

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

Powershell, 119 bytes - 14% = 102.34 puntos

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 $_!"}

Al 3 de enero , se muestra el guión Happy birthday to Prof!. Si este script se guarda el 3 de enero, se mostrarán dos saludos.

mazzy
fuente
-1

C # - 63 bytes

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

Elijo el tiempo de compilación . Dado que el código C # compila a MSIL, que en tiempo de ejecución es compilado al código ejecutable por el compilador JIT , este programa cumple las condiciones.

EDITAR: respuesta posiblemente inválida como se señala en los comentarios.

rahulroy9202
fuente
1
Viejo truco, ya no es válido. La regla 2 dice "no debe verse afectado por la invocación o ejecución del programa de ninguna manera".
Ugoren
actualizado en consecuencia. Gracias @ugoren
rahulroy9202
@ugoren El código PERL de Phil H también usa este mismo truco. Marque la respuesta más votada.
rahulroy9202
2
También es una respuesta no válida. Pero, él fue el primero en usar este truco, y en el momento en que lo hizo las reglas lo permitieron.
Ugoren