Alles Gute für mich!

21

Alles Gute für mich!

Schreiben Sie ein Programm, das Happy birthday to me!an seinem Geburtstag gedruckt wird .

  1. Der Geburtstag des Programms ist die Erstellungs-, letzte Änderungs- oder Kompilierungszeit des Programms (Sie wählen) und darf nicht fest codiert sein.
  2. Das Datum, das Sie als Geburtstag verwenden, darf in keiner Weise vom Aufruf oder der Ausführung des Programms beeinflusst werden. Sie können Ihren Geburtstag nicht ändern.
  3. Für zusätzliches Guthaben (-15% Byteanzahl) drucken Sie Happy birthday to you!an Ihrem Geburtstag (fest codiert), wenn es nicht mit dem Programm übereinstimmt . Oder nutzen Sie den Geburtstag einer Berühmtheit und erhalten Sie -14%.
  4. Es darf nur dieses und an keinem anderen Tag etwas drucken.
  5. Zählen Sie die Bytes in UTF-8.
  6. Verwenden Sie den Gregorianischen Kalender.

Viel Glück und alles Gute zum Geburtstag (zu den Neugeborenenprogrammen).

PS
Nach Izkatas Kommentar erhalten Sie 20% Rabatt, wenn Sie Happy birthday to Melan Mel Kayes Geburtstag drucken . Sie müssen jedoch eine glaubwürdige Quelle angeben, dass es sich um dieses Datum handelt.

ugoren
quelle
1
@ TeunPronk, Sie können nicht beides tun. Verwenden Sie entweder Ihren eigenen Geburtstag oder den eines Prominenten (oder keinen, und geben Sie das zusätzliche Guthaben auf).
Ugoren
4
@ TeunPronk: Nur Jon Skeet kann: P
MSalters
11
Ich habe das in der Seitenleiste "Heiße Fragen" gesehen und "Alles Gute zum Geburtstag an Mel " gelesen ...
Izkata
1
@ PeterTaylor: Huh? Verschiedene Arten von Bewertungsboni für zusätzliche Funktionen zu vergeben, ist bei Code-Golf- Fragen weit verbreitet, und ich habe noch nie jemanden behaupten sehen, es würde eine Frage von der Verwendung dieses Tags ausschließen, solange das primäre Bewertungskriterium die Codelänge ist.
Ilmari Karonen
1
@ Izkata, Aktualisierte die Frage zu Ehren von Mel.
Ugoren

Antworten:

10

PHP 77 75 74 65 60

Vielen Dank an die tollen Vorschläge von Tim Seguine :

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

Hinterhältiges PHP: 46 42 41 40

Nach Phil Hs Idee und nochmals Tim Seguines Vorschlag :

<?touch(__FILE__)?>Happy birthday to me!
ComFreek
quelle
Ist nicht das Jahr im Vergleich enthalten? Wenn ja, funktioniert es nur am 0. Geburtstag.
Ugoren
@ugoren Du hast recht! Danke für die Korrektur. 2 Bytes gespeichert.
ComFreek
Wenn "nichts vorbereiten" in den Regeln als Standardausgabe interpretiert wird, können Sie 4 Bytes gewinnen, indem Sie ''die dmZeichenfolgen entfernen . Es wurde eine Warnung generiert, aber ich glaube, es wird an Standardfehler gesendet, wenn die Fehlerberichterstattung aktiviert ist.
Tim Seguine
4
<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Tim Seguine
1
@ TimSeguine Vielen Dank für Ihre Vorschläge! Ich habe sie in meine Antwort aufgenommen, ich hoffe es macht Ihnen nichts aus.
ComFreek
48

Bash (hinterhältig): 36

touch $0;echo Happy Birthday to me\!

Gemäß den Regeln: "Erstellungs-, Änderungs- oder Übersetzungszeit des Programms". Ich wähle die Änderungszeit und eine ständige Selbständerung. [HT @ace für 1 Zeichen]

Perl (auch hinterhältig): 29

print "Happy birthday to me!"

Dieser ist wohl weniger hinterhältig als der erste; Perl-Programme werden immer kompiliert, bevor sie ausgeführt werden, was nicht jeder weiß. Hier ist also das Kompilierungsdatum, das ich verwende.

- Für Regeländerung bearbeiten -

Dies wurde geschrieben, bevor es eine Regel zum Ändern Ihres Geburtstages gab. Ich denke das Perl steht noch; Alle Perl-Programme werden kompiliert, bevor sie ausgeführt werden. Ich werde die Antwort aus pädagogischen Gründen hier lassen!

Phil H
quelle
6
Ok, Betrüger, bekomme meine +1 für die Klugheit.
Victor Stafusa
1
Sie können das !mit entkommen \!und die Anführungszeichen entfernen, um 1
Zeichen
1
Netter Trick, aber die Regeln verbieten es ausdrücklich (jetzt).
Ugoren
1
@ugoren Verbietet immer noch nicht die Perl-Lösung, die kompiliert wird, bevor das Programm startet .
Cruncher
3
@Cruncher, ich fürchte, du hast recht. Ich werde meinen Anwalt konsultieren und Ihnen die Rechnung schicken.
Ugoren
13

Bash - 65

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

Danke an ugoren , ace und nyuszika7h für die Hilfe.

Shiona
quelle
Ich denke , man kann die entkommen !mit , \!damit Sie nicht die Anführungszeichen benötigen und speichern 1 Zeichen.
user12205
Eigentlich hatte ich die Anführungszeichen, da ich dachte, das Echo würde sie für die Leerzeichen benötigen. Ich nahm sie heraus und entkam nicht dem Ausrufezeichen und es funktionierte immer noch. Danke für den Tipp!
Shiona
2
Sie müssen nur !in interaktiven Shells entkommen , nicht in Skripten.
Nyuszika7h
Sie können zwei Zeichen speichern, indem Sie [und ]anstelle von [[und verwenden ]].
Nyuszika7h
1
Funktioniert es, wenn das Jahr nicht mit dem Erstellungsdatum übereinstimmt?
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!"));}}

Formatiert:

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

Mit ein paar zusätzlichen Anweisungen (Sie müssen dies kompilieren b.exeund aus dem Verzeichnis ausführen, in dem sich die ausführbare Datei befindet) kann ich es folgendermaßen ausführen:

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 (kein Bonus)

Dieselben Anweisungen wie oben, diesmal wird eine Nachricht nur an ihrem eigenen Geburtstag gedruckt (also kein Bonus von -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
quelle
Sie können einige Bytes in den Bonus-Bytes einsparen, indem ,b="1202"==tSie nach dem Erhalt der Datumszeichenfolge hinzufügen und diese stattdessen verwenden.
Ahruss
1
Vielen Dank! Obwohl sich herausstellt, dass "wenige Bytes" eins sind ... oder fehle ich etwas? Bearbeiten Ah, ich verstehe; Sie sagten, ,b="1202"==taber der ==tTeil ist nicht möglich, da dies ein Bool ergibt und die andere Var ein String ist. Sie können nicht (AFAIK) zwei verschiedene Typen in einer "var" -Deklaration verwenden.
RobIII
Ah, okay. Es ist schon eine Weile her, dass ich C # verwendet habe. Mein Fehler.
Ahruss
Sie können die einfachere Version verkürzen, indem Sie Datumsangaben und keine Zeichenfolgen vergleichen. Diese Herren benutzen sowas wie CreationTime.Date == DateTime.Today.
Svick
Das würde nur für heute / dieses Jahr / Geburtstag 0 funktionieren. Wie würde das für andere Jahre funktionieren?
RobIII
5

Java - 275 - 15% = 233,75 mit Bonus / 237 ohne Bonus

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

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

Ich wurde am 23. April geboren.

Victor Stafusa
quelle
1
Alles Gute zum Geburtstag zu , nicht für ;-) gerade gespeichert Sie ein anderes Byte :-)
robiii
@RobIII Danke, behoben.
Victor Stafusa
Außerdem ist die newline ( \n) nicht AFAIK erforderlich, wodurch Sie weitere 4 Bytes
sparen ;-)
@RobIII Nochmals vielen Dank.
Victor Stafusa
Ja ... ich sollte aufhören, auf meinen eigenen Fuß zu schießen: P
Gern geschehen
3

Ich bin ziemlich stolz auf diesen kleinen Trick, um ein paar Bytes in der Nachricht zu sparen. Ich hoffe, dass es in anderen Antworten enthalten sein wird. Ich war der erste, der daran dachte!

Python

105 Zeichen, kein extra Guthaben. Speichern Sie die Datei als "happy birthday to me" und führen Sie sie aus. Läuft nur in GMT und "Geburtstag" ist das Geburtsdatum, nicht das Jubiläum (auch "Geburtstag" genannt).

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

Damit es funktioniert, speichern Sie dies als "Alles Gute zum Geburtstag" und führen Sie es aus python "happy birthday to me"

Hinweis: Natürlich kann der Dateiname nur einen kleinen Bootstrap enthalten, sodass beliebig großer Code auf den Bootstrap reduziert wird. Normalerweise würde ich dies als "Betrug" bezeichnen. "Happy birthday to me" ist jedoch kein unzumutbarer Dateiname - es beschreibt, was das Programm macht, viel besser als einige Programme (z. B. "python"), also werde ich es in diesem Fall zulassen :)

AMADANON Inc.
quelle
Ich denke, sich auf den Dateinamen zu verlassen, ist Betrug (obwohl ich es nicht ausdrücklich verboten habe). Wenn es erlaubt ist, warum nicht einfach schreiben eval(sys.argv[0])?
Ugoren
Und ich habe mir nicht die Mühe gemacht, einen Geburtstag zu definieren, aber es ist ein Tag, an dem ein Mensch einmal im Jahr den Jahrestag seiner Geburt feiert , nicht genau den Tag, an dem du geboren wurdest.
Ugoren
ugoren: Ich habe das in meiner Anmerkung unten erwähnt (die Ihren Kommentar vorwegnimmt). 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

Dateiname muss 'fm' sein

H.Muster
quelle
1
Auf Ihrem Geburtstag sollte es „Alles Gute zum Geburtstag sagen Sie !“ :-)
RobIII
@RobIII: Ups, du hast recht, ich habe nicht sorgfältig genug gelesen. Entfernt die zweite Version. Vielen Dank!
H.Muster
Ich gehe davon aus, dass strncmp(x, y, 5)Daten mit 28-12-2013den ersten 15 Zeichen verglichen werden ( 28-12z. B. 28. Dez.). Funktioniert dies auch, wenn die Ländereinstellungen des Benutzers yyyy/mm/ddbeispielsweise lauten ? Hat Matlab standardmäßig dd-mm-yyyyimmer? (Nur neugierig). Edit Nevermind: Habe es gefunden! . Es scheint so. Es würde keine Rolle spielen sowieso für mm/dd/yyyyoder dd-mm-yyyyda sowohl linke als auch rechte Operand würde das gleiche Format verwenden sowieso und beide 5 am weitesten links stehende Zeichen passen würde sowieso; Solange das Jahr noch nicht vorbei ist.
RobIII
Warum brauchen Sie die Variable t? Nicht dir('f.m').datefunktioniert?
Ugoren
@ugoren: tist erforderlich, um dirdie Dateiattribute zurückzugeben (andernfalls würden nur alle Dateien in dem Verzeichnis zurückgegeben, die übereinstimmen 'f.m'). Darüber hinaus tist für den Zugriff auf das dateFeld erforderlich .
H.Muster
2

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

Ich verstoße gegen die Regeln über die Berühmtheit, also gibt es keinen Bonus ...

Der erzeugte Text ist eine Benutzereingabe (wird beim Ausführen angefordert). Ist dies nicht der CFall ACCEPT C, DISPLAY Cmuss die Zeilendefinition gelöscht werden , und es müssen DISPLAY "HAPPY BIRTHDAY TO ME!"weitere sieben Zeichen hinzugefügt werden.

WHEN-COMPILEDist ein spezielles Register mit Datum und Uhrzeit der Kompilierung, das dem Programm zur Verfügung steht (immer griffbereit, Sie können wissen, dass Sie die richtige Version haben). Es wird abgeschnitten, MOVEweil der Rest nicht benötigt wird. DATEist das aktuelle Datum - dieses ist yymmdd.

Das /in der Definition von A ist ein Einfügungsbearbeitungssymbol, da das Kompilierungsdatum Schrägstriche enthält. Ein zusätzliches Zeichen, erleichtert aber den Vergleich.

Promi = Grace Hopper

Bill Woodger
quelle
2

Batch - 37 Bytes

Die Methode stehlen, die von einer der Bash-Antworten verwendet wird.

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

Andere Methode - 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!
unclemeat
quelle
1

Ruby, 69 Zeichen / Byte

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

31536000ist die Anzahl der Sekunden pro Jahr und 86400die Anzahl der Sekunden pro Tag.

Türknauf
quelle
4
Funktioniert leider nur für maximal sieben Jahre oder so richtig, bis Sie auf das erste Schaltjahr nach dem Zeitpunkt stoßen.
Amadan
Sagt auch "Alles Gute zum Geburtstag" am Morgen nach Ihrem Geburtstag und sagt nicht "Alles Gute zum Geburtstag" am Morgen Ihres Geburtstages vor Ihrer Geburtszeit.
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!")

Verwendet die Änderungszeit der Datei.

Chris W.
quelle
Schlagen Sie um 56 Bytes so weit = P
Stroncium
Ich bekomme einen Laufzeitfehler, wenn ich Ihren ausführe, aber der Match-Ansatz ist definitiv viel cleverer. Beheben Sie den Fehler und Sie haben meine positive Bewertung erhalten. ;)
Chris W.
Können Sie den Fehler und Ihr Betriebssystem angeben? Ich denke, es ist einfach keine Cross-Plattform.
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!'
}

Der Bonus ist es nicht wert, ich kann nur 117,5 bekommen.

RechtschreibungD
quelle
1

Powershell - 127

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

Für den 15% -Bonus - 151 Bytes, abzüglich 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
quelle
1
Ich bin kein Powershell-Experte, aber das wird erst im laufenden Jahr funktionieren? Was ist, wenn das "Programm" 1., 2., 3. usw. Geburtstag hat?
RobIII
Sie können den writeBefehl entfernen - Mit nur "happy birthday to me!"wird es ausgedruckt.
Unclemeat
Du hast vollkommen recht. Ich sollte das wissen.
Chris J
@Robill - hoppla. Das kommt davon, etwas zu schreiben, wenn ich von etwas anderem abgelenkt bin und Codegolf als Aufschub benutze. Behoben (nicht, dass es eine Gewinnchance gibt, Verstand).
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

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

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}

Könnte etwas länger oder kürzer sein, je nachdem, wo Ihr Geburtstag im Jahr liegt und auf kürzeste Weise. Für mich ist das 36e5(Sekunden seit Epoche; Zeitzonenabhängig).


Zählt Mel Gibson ? Hier ist ein 138 Byte - 35% Bonus = 89,7-Punkte- Programm, das sich selbst, mich und Mel feiert!

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.
quelle
1
Ihr Code schlägt in Schaltjahren für Daten nach Februar fehl.
Ugoren
@ugoren richtig du bist. Das behoben, aber viele Punkte verloren :(
Tim S.
Aber jetzt habe ich die meisten zurückgefordert! =)
Tim S.
0

PureBasic

Ohne Bonus - 142

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

Mit 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
quelle
0

TI-BASIC, 68 Bytes

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

Denken Sie daran, diese Token sind ein Byte: If , Ans, →, Disp. getDateist zwei Bytes. Alle anderen Ein-Zeichen-Symbole bestehen aus einem Byte.

Timtech
quelle
1
Sind Sie sicher, dass das UTF-8 ist?
Fozzedout
3
OP gibt ausdrücklich an, dass Sie UTF-8 verwenden sollten. Das sind 66 Zeichen und 68 Bytes.
nyuszika7h
2
Wenn Sie behaupten möchten, dass es 46 Bytes sind, schreiben Sie es in 46 Bytes. So wie es jetzt ist, sind es 68 Bytes.
Ugoren
Entsprechend den Token-Größen in einer Standard-TI-Basic-Umgebung sind es 55 Bytes, aber als Klartext sind es 68. Auch technisch muss kein "am Ende stehen, damit ein Byte gespart werden kann.
Lemon Drop
0

J 79

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

Bonusversion 120 - 15% = 102

Bekomme ich eine zusätzliche Gutschrift dafür, dass ich beide drucke, wenn beide Geburtstag haben?

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

Erklärung (von rechts nach links):

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

Das zentrale Verb des Zuges

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

Die linke Spur für den Zentralzug:

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
quelle
0

Java - 196

Dies unterscheidet sich von der anderen Java-Übermittlung durch die Verwendung von Strings, wobei 41 Zeichen gespart werden. Mit String.format ("% tj") wird eine java.util.Date-Datei oder eine Zeichenfolge mit einer Länge von einem Tag im Jahr formatiert und anschließend diese beiden Zeichenfolgen verglichen.

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

Formatiert:

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
quelle
1
Tag des Jahres funktioniert nicht gut mit Schaltjahren.
Ugoren
@ugoren Ich stimme zu. Da jedoch der Wettbewerb gerade läuft und wir am 20. Februar sind. Die Kompilierungsdaten sollten für einige Tage in Ordnung sein und in den folgenden Jahren kein Problem verursachen. Beim Kompilieren nach dem 28. Februar wird es tatsächlich ein (zukünftiges) Problem geben.
RobIII
Wenn ich nach dem 28. Februar kompilieren würde, könnte ich das String-Format zu "% tm% td" ändern, und zwar zu einem Preis von sechs Punkten
timxyz
0

C # 191 kein 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!");}}

formatiert:

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
quelle
Sie verwenden x nur zweimal. var x="MMdd";+ ToString ( x) + ToString ( x) = 15 während ToString ( "MMdd"); + ToString ( "MMdd"); kostet nur 12.
RobIII
Auch ein Zeilenvorschub ist nicht erforderlich, WriteLine()kann also auf gekürzt werden Write(). Mit oben und dieser Änderung an Ort und Stelle haben Sie genau die gleiche Lösung wie ich
;-)
1
Sie sollten auch die Punktzahl aktualisieren, die jetzt 193 ist. Und Sie können es auf 191 bringen, indem Sie zwei M's abschneiden * Hinweis *: P
RobIII
0

JavaScript (node.js) - 100 Byte

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

vb.net ~ 161c

Dadurch wird die Feiernachricht an alle gedruckt, deren Geburtstag heute ist.

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

Ergebnis: 253c (-33c vb.net min) = 220 - 15% (mein Geburtstagsbonus) = 187c - 14% (Promi-Geburtstag) = 160,82 ~ 161c oder 220c - 29% = 156,2 ~ 157c

Adam Speight
quelle
Sie können einen Bonus für Ihren Geburtstag oder eine Berühmtheit bekommen. Nicht beide.
Ugoren
@ugoren Scoring gibt nicht an, dass es sich um ein exklusives oder handelt, daher verwende ich die logische Bedeutung von oder.
Adam Speight
0

Powershell, 82 Bytes

Siehe auch Antworten von Chris J und SpellingD

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

woher

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

ist die Kombination von Abkürzungen und Aliasen für den Ausdruck:

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

das entspricht einer kanonischen Form:

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

PowerShell, 119 Bytes - 14% = 102,34 Punkte

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

Am 3. Januar wird das Skript angezeigt Happy birthday to Prof!. Wenn dieses Skript am 3. Januar gespeichert wurde, werden zwei Begrüßungen angezeigt.

mazzy
quelle
-1

C # - 63 Bytes

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

Ich wähle die Kompilierungszeit . Da der C # -Code in MSIL kompiliert wird, das zur Laufzeit vom JIT-Compiler in den ausführbaren Code kompiliert wird , erfüllt dieses Programm die Bedingungen.

EDIT-- Möglicherweise ungültige Antwort, wie in Kommentaren angegeben.

rahulroy9202
quelle
1
Alter Trick, nicht mehr gültig. Regel 2 besagt, "darf in keiner Weise vom Aufruf oder der Ausführung des Programms betroffen sein".
Ugoren
entsprechend aktualisiert. Vielen Dank @ugoren
rahulroy9202
@ugoren Der PERL-Code von Phil H verwendet denselben Trick. Überprüfen Sie die Antwort mit der höchsten Bewertung.
Rahulroy9202
2
Es ist auch eine ungültige Antwort. Aber - er war der erste, der diesen Trick anwendete, und als er das tat, erlaubten es die Regeln.
Ugoren