Joyeux anniversaire à moi!

21

Joyeux anniversaire à moi!

Écrivez un programme qui s'imprime Happy birthday to me!le jour de son anniversaire.

  1. L'anniversaire du programme est la date de création, de dernière modification ou de compilation du programme (que vous choisissez) et ne doit pas être codé en dur.
  2. La date que vous utilisez comme anniversaire ne doit en aucun cas être affectée par l'invocation ou l'exécution du programme. Vous ne pouvez pas modifier votre anniversaire.
  3. Pour un crédit supplémentaire (-15% d'octets), imprimez Happy birthday to you!le jour de votre anniversaire (codé en dur), s'il ne coïncide pas avec celui du programme. Ou utilisez l'anniversaire d'une célébrité et obtenez -14%.
  4. Il ne doit imprimer que cela et ne rien imprimer d'autre jour.
  5. Comptez les octets, en UTF-8.
  6. Utilisez le calendrier grégorien.

Bonne chance et joyeux anniversaire (aux programmes nouveau-nés).

PS
Suite au commentaire d'Izkata, si vous imprimez Happy birthday to Melle jour de l'anniversaire de Mel Kaye , vous obtenez 20% de réduction. Mais vous devez fournir une source crédible que c'est cette date.

ugoren
la source
1
@TeunPronk, vous ne pouvez pas faire les deux. Soit utilisez votre propre anniversaire, soit celui d'une célébrité (ou aucun, et renoncez au crédit supplémentaire).
ugoren
4
@TeunPronk: Seul Jon Skeet peut: P
MSalters le
11
J'ai vu cela dans l'encadré Hot Questions et j'ai lu "Joyeux anniversaire à Mel " ...
Izkata
1
@PeterTaylor: Hein? L'attribution de divers types de bonus de score pour des fonctionnalités supplémentaires est assez courante pour les questions de code-golf , et je n'ai jamais vu personne prétendre que cela exclurait une question de l'utilisation de cette balise, tant que le critère de notation principal est la longueur du code.
Ilmari Karonen
1
@Izkata, Mise à jour de la question en l'honneur de Mel.
ugoren

Réponses:

10

PHP 77 75 74 65 60

Un grand merci aux superbes suggestions de Tim Seguine :

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

PHP sournois: 46 42 41 40

En utilisant l'idée de Phil H et encore la suggestion de Tim Seguine :

<?touch(__FILE__)?>Happy birthday to me!
ComFreek
la source
N'inclut-il pas l'année dans la comparaison? si c'est le cas, cela ne fonctionne que le 0e anniversaire.
ugoren
@ugoren Vous avez raison! Merci pour la correction. 2 octets enregistrés.
ComFreek
Si "ne préimprime rien" dans les règles est interprété comme signifiant une sortie standard, alors vous pourriez gagner 4 octets en supprimant le ''contour des dmchaînes. Il a généré un avertissement, mais je pense qu'il est envoyé à l'erreur standard si le rapport d'erreurs est activé.
Tim Seguine
4
<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Tim Seguine
1
@TimSeguine Merci pour vos suggestions! Je les ai incorporés dans ma réponse, j'espère que cela ne vous dérange pas.
ComFreek
48

Bash (sournois): 36

touch $0;echo Happy Birthday to me\!

Selon les règles: "heure de création, modification ou compilation du programme". Je choisis le temps de modification, et une auto-modification perpétuelle. [HT @ace pour 1 caractère]

Perl (également sournois): 29

print "Happy birthday to me!"

Celui-ci est sans doute moins sournois que le premier; Les programmes Perl sont toujours compilés avant d'être exécutés, ce que tout le monde ne sait pas - voyez, il y a une tournure éducative sur la sournoise. Voici donc la date de compilation que j'utilise.

- Modifier pour le changement de règle -

Cela a été écrit avant qu'il n'y ait de règle pour changer votre anniversaire. Je pense que le Perl est toujours debout; tous les programmes Perl sont compilés avant d'être exécutés. Je vais laisser la réponse ici pour des raisons éducatives!

Phil H
la source
6
Ok, tricheur, obtenez mon +1 pour l'intelligence.
Victor Stafusa
1
Vous pouvez échapper au !avec \!et supprimer les guillemets pour enregistrer 1 caractère
user12205
1
Belle astuce, mais les règles l'interdisent explicitement (maintenant).
ugoren
1
@ugoren Still n'interdit pas la solution Perl, qui est compilée avant le démarrage du programme .
Cruncher
3
@ Cruncher, j'ai bien peur que tu aies raison. Je vais consulter mon avocat et vous envoyer la facture.
ugoren
13

bash - 65

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

Merci à ugoren , ace et nyuszika7h pour leur aide.

shiona
la source
Je pense que vous pouvez échapper au !avec \!vous n'avez donc pas besoin des guillemets et économisez 1 caractère.
user12205
En fait, j'avais les citations car je pensais que l'écho en aurait besoin pour les espaces. Je les ai sortis et je n'ai pas échappé au point d'exclamation et ça a quand même fonctionné. Merci pour le conseil!
shiona
2
Il vous suffit de vous échapper !dans des shells interactifs, pas dans des scripts.
nyuszika7h
Vous pouvez enregistrer deux caractères en utilisant [et ]au lieu de [[et ]].
nyuszika7h
1
Cela fonctionne-t-il lorsque l'année n'est pas la même que la date de création?
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!"));}}

Formaté:

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 (Pas de bonus)

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

Avec quelques instructions supplémentaires (vous devez le compiler b.exeet l'exécuter à partir du répertoire dans lequel l'exécutable se trouve), je peux le ramener à ceci:

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 (Pas de bonus)

Mêmes instructions que ci-dessus, cette fois seulement en imprimant un message pour son anniversaire (donc pas de bonus 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
la source
Vous pouvez économiser quelques octets dans les bonus en ajoutant ,b="1202"==taprès avoir obtenu la chaîne de date et en l'utilisant à la place.
ahruss
1
Merci! Bien que "quelques octets" se révèlent être un ... ou est-ce que je manque quelque chose? Edit Ah, je vois; vous avez dit ,b="1202"==tmais la ==tpartie n'est pas possible car cela équivaut à un booléen et l'autre var est une chaîne. Vous ne pouvez pas (c'est-à-dire AFAIK) utiliser deux types différents dans une seule déclaration "var".
RobIII
Ah ok. Cela fait un moment que je n'ai pas utilisé C #. Ma faute.
ahruss
Vous pouvez raccourcir la version plus simple en comparant les dates, pas les chaînes. Ces hommes utilisent quelque chose comme CreationTime.Date == DateTime.Today.
svick
Cela ne fonctionnerait que pour aujourd'hui / cette année / l'anniversaire 0. Comment cela fonctionnerait-il pour les autres années?
RobIII
5

Java - 275 - 15% = 233,75 avec bonus / 237 sans bonus

Avec bonus:

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

Sans bonus:

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

Je suis né le 23 avril.

Victor Stafusa
la source
1
Joyeux anniversaire à , pas pour ;-) Je viens de vous enregistrer un autre octet :-)
RobIII
@RobIII Merci, corrigé.
Victor Stafusa
De plus, la nouvelle ligne ( \n) n'est pas obligatoire AFAIK qui vous fait économiser encore 4 octets ;-)
RobIII
@RobIII Merci encore.
Victor Stafusa
Ouais ... Je devrais arrêter de tirer de mon propre pied: P Vous êtes les bienvenus;)
RobIII
3

Je suis assez fier de cette petite astuce pour économiser quelques octets sur le message. J'espère que cela sera inclus dans d'autres réponses. J'étais le premier à y penser!

Python

105 caractères, pas de crédit supplémentaire. Enregistrez le fichier sous "joyeux anniversaire" et lancez. Fonctionne uniquement en GMT et "anniversaire" est défini comme la date de votre naissance, pas son anniversaire (également appelé "anniversaire").

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

Pour que cela fonctionne, enregistrez-le comme "joyeux anniversaire pour moi" et exécutez python "happy birthday to me"

Remarque: bien sûr, le tout sauf un petit bootstrap peut être dans le nom de fichier, ce qui réduit tout code arbitrairement grand au bootstrap. Normalement, je considérerais cette "tricherie". Cependant, "joyeux anniversaire" n'est pas un nom de fichier déraisonnable - il décrit ce que fait le programme, bien mieux que certains programmes (par exemple "python"), donc dans ce cas, je vais le permettre :)

AMADANON Inc.
la source
Je pense que se fier au nom du fichier est de la triche (même si je ne l'ai pas explicitement interdit). Si c'est permis, pourquoi ne pas simplement écrire eval(sys.argv[0])?
ugoren
Et je n'ai pas pris la peine de définir un anniversaire, mais c'est un jour qui vient une fois par an lorsqu'une personne célèbre l'anniversaire de sa naissance , pas le jour exact de sa naissance .
ugoren
ugoren: Je l'ai mentionné dans ma note en bas (qui précède votre commentaire). 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

Le nom du fichier doit être 'fm'

H.Muster
la source
1
Sur votre anniversaire , il devrait dire « Joyeux anniversaire à vous ! » :-)
RobIII
@RobIII: Oups, vous avez raison, je n'ai pas lu assez attentivement. Supprime la deuxième version. Merci!
H.Muster
Je suppose que strncmp(x, y, 5)compare les dates comme 28-12-2013les 15 premiers caractères ( 28-12par exemple le 28 décembre). Cela fonctionne-t-il également lorsque les paramètres régionaux de l'utilisateur sont yyyy/mm/ddpar exemple? Matlab est-il par défaut dd-mm-yyyytoujours? (Juste curieux). Modifier Nevermind: l'a trouvé! . Il semble que ce soit le cas. Cela n'aurait pas d'importance de toute façon pour mm/dd/yyyyou dd-mm-yyyypuisque l'opérande gauche et droite utiliseraient le même format de toute façon et les 5 caractères les plus à gauche correspondraient de toute façon; tant que l'année ne mène jamais.
RobIII
Pourquoi avez-vous besoin de la variable t? Ça ne dir('f.m').datemarche pas ?
ugoren
@ugoren: test nécessaire pour faire dirrenvoyer les attributs du fichier (sinon ce serait juste retourner tous les fichiers du répertoire qui correspondent 'f.m'). En outre, test nécessaire pour accéder au dateterrain.
H.Muster
2

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

J'enfreins les règles concernant la célébrité, donc pas de bonus là-bas ...

Le texte produit est saisi par l'utilisateur (demandé lors de l'exécution). Si ce n'est pas bon à aller, puis la ligne définissant les Cbesoins à supprimer, comme le fait ACCEPT C, et DISPLAY Cdoit devenir DISPLAY "HAPPY BIRTHDAY TO ME!", pour un sept caractères supplémentaires.

WHEN-COMPILEDest un registre spécial contenant la date / heure de compilation qui est disponible pour le programme (toujours pratique, vous pouvez savoir que vous avez la bonne version). Il est tronqué dans le MOVEcar le reste n'est pas nécessaire. DATEest la date actuelle - celle-ci est yymmdd.

Dans /la définition de A est un symbole d'édition d'insertion, car la date de compilation contient des barres obliques. Un caractère supplémentaire, mais facilite la comparaison.

Célébrité = Grace Hopper

Bill Woodger
la source
2

Lot - 37 octets

Voler la méthode utilisée par l'une des réponses Bash ..

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

Autre méthode - 145 octets

@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!
dégrader
la source
1

Ruby, 69 caractères / octets

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

31536000est le nombre de secondes dans une année et 86400le nombre de secondes dans une journée.

Poignée de porte
la source
4
Malheureusement, ne fonctionne correctement que pendant sept ans maximum, jusqu'à ce que vous tombiez sur la première année bissextile après l'heure.
Amadan
Dit également "joyeux anniversaire" le matin après votre anniversaire, et ne dit pas joyeux anniversaire le matin de votre anniversaire avant votre heure de naissance.
AMADANON Inc.
1

Javascript

Node.js, 156 octets

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

Utilise l'heure de modification du fichier.

Chris W.
la source
vous battre jusqu'à 56 octets jusqu'à présent = P
stroncium
J'obtiens une erreur d'exécution lorsque je lance la vôtre, mais l'approche de match est certainement beaucoup plus intelligente. Corrigez l'erreur et vous avez mon vote positif. ;)
Chris
Pouvez-vous citer l'erreur et votre système d'exploitation? Je suppose que ce n'est tout simplement pas une plateforme croisée.
stroncium
1

Powershell - 105 octets

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

Non golfé:

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

Le bonus n'en vaut pas la peine, je ne peux en obtenir que 117,5.

OrthographeD
la source
1

Powershell - 127

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

Pour le bonus de 15% - 151 octets, moins 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
la source
1
Je ne suis pas un expert PowerShell, mais cela ne fonctionnera que dans l'année en cours? Que faire quand le "programme" fête son 1er, 2e, 3e etc. anniversaire?
RobIII
Vous pouvez supprimer la writecommande - avec juste "happy birthday to me!"cela l'imprimera.
unclemeat
Vous avez tout à fait raison. Je devrais le savoir.
Chris J
@Robill - oups. C'est ce qui vient d'écrire quelque chose quand je suis distrait par quelque chose d'autre et d'utiliser le codegolf comme procrastination. Fixé (pas qu'il ait une chance de gagner, l'esprit).
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 Points

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}

Cela pourrait être un peu plus long ou plus court selon l'endroit où votre anniversaire tombe dans l'année et la façon la plus courte de le représenter. Pour le mien, c'est 36e5(secondes depuis l'époque; selon le fuseau horaire).


Mel Gibson compte-t-il? Voici un octet de 138 octets - 35% de bonus = 89,7 points qui se célèbre, moi et 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.
la source
1
Votre code échoue les années bissextiles, pour les dates après février.
ugoren
@ugoren vous avez raison. Correction de cela, mais a perdu beaucoup de points :(
Tim S.
Mais maintenant, j'en ai récupéré la plupart! =)
Tim
0

PureBasic

Sans Bonus - 142

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

Avec Bonus - 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
la source
0

TI-BASIC, 68 octets

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

Rappelez - vous, ces jetons sont un octet: If , Ans, →, Disp. getDateest de deux octets. Tous les autres symboles à un caractère ont un octet.

Timtech
la source
1
Êtes-vous sûr que c'est UTF-8?
Fozzedout
3
OP indique explicitement que vous devez utiliser UTF-8. C'est 66 caractères et 68 octets.
nyuszika7h
2
Si vous voulez prétendre que c'est 46 octets, écrivez-le en 46 octets. À l'heure actuelle, c'est 68 octets.
ugoren
Selon les tailles de jeton dans un environnement TI-Basic standard, il est de 55 octets, mais en tant que texte brut, il est de 68. De plus, techniquement, il n'est pas nécessaire qu'il y ait un "à la fin pour pouvoir économiser un octet.
Lemon Drop
0

J 79

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

Version bonus 120 - 15% = 102

Est-ce que j'obtiens un crédit supplémentaire pour également imprimer les deux lorsque les deux fêtent leur anniversaire?

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

Explication (de droite à gauche):

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

Le verbe central du train

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

La dent gauche pour le train 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
la source
0

Java - 196

Cela diffère de l'autre soumission Java en utilisant des chaînes, en supprimant 41 caractères dans le processus. Il utilise String.format ("% tj") pour formater un java.util.Date ou une chaîne de jour de l'année, puis compare ces deux chaînes.

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

Formaté:

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
la source
1
Le jour de l'année ne fonctionne pas bien avec les années bissextiles.
ugoren
@ugoren Je suis d'accord. Cependant, puisque le concours est en cours et que nous sommes au 20 février. la date de compilation devrait être correcte pendant quelques jours et ne pas poser de problème les années suivantes. Lors de la compilation après le 28 février, il y aura effectivement un (futur) problème.
RobIII
Si je compilais après le 28 février, je pourrais changer le format de chaîne en "% tm% td" à un coût de six points
timxyz
0

C # 191 sans bonus

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

formaté:

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
la source
Vous utilisez x seulement deux fois; var x="MMdd";+ ToString ( x) + ToString ( x) = 15 tandis que ToString ( "MMdd"); + ToString ( "MMdd"); ne coûte que 12.
RobIII
De plus, aucune nouvelle ligne n'est requise et WriteLine()peut donc être raccourcie Write(). Avec ce qui précède et ce changement en place, vous avez exactement la même solution que moi ;-)
RobIII
1
Vous devez également mettre à jour le score, qui est désormais de 193. Et vous pouvez le ramener à 191 en rasant deux M * * indice *: P
RobIII
0

JavaScript (node.js) - 100 octets

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

vb.net ~ 161c

Cela imprimera le message de célébration à tous ceux dont c'est l'anniversaire.

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

Score: 253c (-33c vb.net min) = 220 - 15% (ma prime d'anniversaire) = 187c - 14% (anniversaire de célébrité) = 160,82 ~ 161c ou 220c - 29% = 156,2 ~ 157c

Adam Speight
la source
Vous pouvez obtenir un bonus pour votre anniversaire OU une célébrité. Pas les deux.
ugoren
@ugoren Scoring n'indique pas qu'il s'agit d'un ou exclusif, j'utilise donc la signification logique de ou.
Adam Speight
0

Powershell, 82 octets

voir aussi les réponses de Chris J et SpellingD

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

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

est la combinaison de raccourcis et d' alias pour l'expression:

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

cet équivalent d'une forme canonique:

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

Powershell, 119 octets - 14% = 102,34 points

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

Au 3 janvier , le script s'affiche Happy birthday to Prof!. Si ce script est enregistré le 3 janvier, deux salutations seront affichées.

mazzy
la source
-1

C # - 63 octets

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

Je choisis le temps de compilation . Puisque le code C # se compile en MSIL qui lors de l' exécution est compilé en code exécutable par le compilateur JIT , ce programme remplit les conditions.

EDIT-- Réponse potentiellement invalide comme indiqué dans les commentaires.

rahulroy9202
la source
1
Vieux truc, qui n'est plus valable. La règle 2 dit "ne doit en aucun cas être affecté par l'invocation ou l'exécution du programme".
ugoren
mis à jour en conséquence. Merci @ugoren
rahulroy9202
@ugoren Le code PERL de Phil H utilise également cette même astuce. Cochez la réponse votée la plus élevée.
rahulroy9202
2
C'est aussi une réponse invalide. Mais - il a été le premier à utiliser cette astuce, et au moment où il l'a fait, les règles le permettaient.
ugoren