Alles Gute für mich!
Schreiben Sie ein Programm, das Happy birthday to me!
an seinem Geburtstag gedruckt wird .
- Der Geburtstag des Programms ist die Erstellungs-, letzte Änderungs- oder Kompilierungszeit des Programms (Sie wählen) und darf nicht fest codiert sein.
- 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.
- 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%. - Es darf nur dieses und an keinem anderen Tag etwas drucken.
- Zählen Sie die Bytes in UTF-8.
- 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 Mel
an Mel Kayes Geburtstag drucken . Sie müssen jedoch eine glaubwürdige Quelle angeben, dass es sich um dieses Datum handelt.
Antworten:
PHP
7775746560Vielen Dank an die tollen Vorschläge von Tim Seguine :
Hinterhältiges PHP:
46424140Nach Phil Hs Idee und nochmals Tim Seguines Vorschlag :
quelle
''
diedm
Zeichenfolgen entfernen . Es wurde eine Warnung generiert, aber ich glaube, es wird an Standardfehler gesendet, wenn die Fehlerberichterstattung aktiviert ist.<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Bash (hinterhältig): 36
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
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!
quelle
!
mit entkommen\!
und die Anführungszeichen entfernen, um 1Bash - 65
Danke an ugoren , ace und nyuszika7h für die Hilfe.
quelle
!
mit ,\!
damit Sie nicht die Anführungszeichen benötigen und speichern 1 Zeichen.!
in interaktiven Shells entkommen , nicht in Skripten.[
und]
anstelle von[[
und verwenden]]
.C # 198.05 (233 - 15%)
Formatiert:
191 (kein Bonus)
181,05 (213 - 15%)
Mit ein paar zusätzlichen Anweisungen (Sie müssen dies kompilieren
b.exe
und aus dem Verzeichnis ausführen, in dem sich die ausführbare Datei befindet) kann ich es folgendermaßen ausführen:171 (kein Bonus)
Dieselben Anweisungen wie oben, diesmal wird eine Nachricht nur an ihrem eigenen Geburtstag gedruckt (also kein Bonus von -15%).
quelle
,b="1202"==t
Sie nach dem Erhalt der Datumszeichenfolge hinzufügen und diese stattdessen verwenden.,b="1202"==t
aber der==t
Teil 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.CreationTime.Date == DateTime.Today
.Java - 275 - 15% = 233,75 mit Bonus / 237 ohne Bonus
Mit Bonus:
Ohne den Bonus:
Ich wurde am 23. April geboren.
quelle
\n
) nicht AFAIK erforderlich, wodurch Sie weitere 4 BytesIch 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).
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 :)
quelle
eval(sys.argv[0])
?However, "happy birthday to me" is not an unreasonable filename - it describes what the program does, much better than some programs (e.g. "python"), so in this case I'm going to allow it
Matlab: 66
Dateiname muss 'fm' sein
quelle
strncmp(x, y, 5)
Daten mit28-12-2013
den ersten 15 Zeichen verglichen werden (28-12
z. B. 28. Dez.). Funktioniert dies auch, wenn die Ländereinstellungen des Benutzersyyyy/mm/dd
beispielsweise lauten ? Hat Matlab standardmäßigdd-mm-yyyy
immer? (Nur neugierig). Edit Nevermind: Habe es gefunden! . Es scheint so. Es würde keine Rolle spielen sowieso fürmm/dd/yyyy
oderdd-mm-yyyy
da 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.t
? Nichtdir('f.m').date
funktioniert?t
ist erforderlich, umdir
die Dateiattribute zurückzugeben (andernfalls würden nur alle Dateien in dem Verzeichnis zurückgegeben, die übereinstimmen'f.m'
). Darüber hinaust
ist für den Zugriff auf dasdate
Feld erforderlich .GNU COBOL mit -free, 204
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
C
FallACCEPT C
,DISPLAY C
muss die Zeilendefinition gelöscht werden , und es müssenDISPLAY "HAPPY BIRTHDAY TO ME!"
weitere sieben Zeichen hinzugefügt werden.WHEN-COMPILED
ist 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,MOVE
weil der Rest nicht benötigt wird.DATE
ist 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
quelle
Batch - 37 Bytes
Die Methode stehlen, die von einer der Bash-Antworten verwendet wird.
Andere Methode - 145 Bytes
quelle
Ruby, 69 Zeichen / Byte
31536000
ist die Anzahl der Sekunden pro Jahr und86400
die Anzahl der Sekunden pro Tag.quelle
JavaScript
Node.js, 156 Bytes
Verwendet die Änderungszeit der Datei.
quelle
Powershell - 105 Bytes
Ungolfed:
Der Bonus ist es nicht wert, ich kann nur 117,5 bekommen.
quelle
Powershell - 127
Für den 15% -Bonus - 151 Bytes, abzüglich 15% = 128,4
quelle
write
Befehl entfernen - Mit nur"happy birthday to me!"
wird es ausgedruckt.Ruby -
8010387 BytesRubin -
123115135121 - 15% =104,5597,75114,75102,85 PunkteKö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!
quelle
PureBasic
Ohne Bonus - 142
Mit Bonus - 218 - 15% = 185,3
quelle
TI-BASIC, 68 Bytes
Denken Sie daran, diese Token sind ein Byte:
If , Ans, →, Disp
.getDate
ist zwei Bytes. Alle anderen Ein-Zeichen-Symbole bestehen aus einem Byte.quelle
J 79
Bonusversion 120 - 15% = 102
Bekomme ich eine zusätzliche Gutschrift dafür, dass ich beide drucke, wenn beide Geburtstag haben?
Erklärung (von rechts nach links):
Das zentrale Verb des Zuges
Die linke Spur für den Zentralzug:
quelle
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.
Formatiert:
quelle
C # 191 kein Bonus
formatiert:
quelle
var x="MMdd";
+ ToString (x
) + ToString (x
) = 15 während ToString ("MMdd"
); + ToString ("MMdd"
); kostet nur 12.WriteLine()
kann also auf gekürzt werdenWrite()
. Mit oben und dieser Änderung an Ort und Stelle haben Sie genau die gleiche Lösung wie ichJavaScript (node.js) - 100 Byte
quelle
vb.net ~ 161c
Dadurch wird die Feiernachricht an alle gedruckt, deren Geburtstag heute ist.
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
quelle
Powershell, 82 Bytes
woher
ist die Kombination von Abkürzungen und Aliasen für den Ausdruck:
das entspricht einer kanonischen Form:
PowerShell, 119 Bytes - 14% = 102,34 Punkte
Am 3. Januar wird das Skript angezeigt
Happy birthday to Prof!
. Wenn dieses Skript am 3. Januar gespeichert wurde, werden zwei Begrüßungen angezeigt.quelle
C # - 63 Bytes
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.
quelle