สุขสันต์วันเกิดให้กับตัวเอง!


21

สุขสันต์วันเกิดให้กับตัวเอง!

เขียนโปรแกรมที่พิมพ์Happy birthday to me!ในวันเกิดของมัน

  1. วันเกิดของโปรแกรมคือการสร้างการปรับเปลี่ยนครั้งล่าสุดหรือเวลาการคอมไพล์ของโปรแกรม (คุณเลือก) และต้องไม่ฮาร์ดโค้ด
  2. วันที่คุณใช้เป็นวันเกิดจะต้องไม่ได้รับผลกระทบจากการร้องขอหรือการดำเนินการของโปรแกรม แต่อย่างใด คุณไม่สามารถแก้ไขวันเกิดของคุณ
  3. สำหรับเครดิตพิเศษ (-15% จำนวนไบต์) พิมพ์Happy birthday to you!วันเกิดของคุณ (รหัสยาก) หากไม่ตรงกับโปรแกรม หรือใช้วันเกิดของคนดังและรับ -14%
  4. มันจะต้องพิมพ์เพียงแค่นี้และไม่ได้พิมพ์อะไรในวันอื่น ๆ
  5. นับจำนวนไบต์ใน UTF-8
  6. ใช้ปฏิทินเกรกอเรียน

ขอให้โชคดีและสุขสันต์วันเกิด (กับโปรแกรมแรกเกิด)

PS
หลังจากที่ความคิดเห็นของ Izkata ถ้าคุณพิมพ์Happy birthday to Melในเมลเคย์วันเกิดของคุณได้รับการปิด 20% แต่คุณต้องให้แหล่งข้อมูลที่น่าเชื่อถือว่าเป็นวันที่นี้


1
@TununPronk คุณทำทั้งสองอย่างไม่ได้ ใช้วันเกิดของคุณเองหรือคนดัง (หรือไม่มีเลยและให้เครดิตเพิ่ม)
ugoren

4
@TununPronk: Jon Skeet เท่านั้นที่สามารถทำได้: P
MSalters

11
ฉันเห็นสิ่งนี้ในแถบข้างคำถามที่น่าสนใจและอ่าน "สุขสันต์วันเกิดให้กับเมล " ...
Izkata

1
@PeterTaylor: เอ๊ะ การให้คะแนนโบนัสประเภทต่าง ๆ สำหรับคุณสมบัติพิเศษนั้นเป็นเรื่องธรรมดาสำหรับคำถามกอล์ฟและฉันไม่เคยเห็นใครมาก่อนเลยอ้างว่ามันจะตัดสิทธิ์คำถามจากการใช้แท็กนั้นตราบใดที่เกณฑ์การให้คะแนนหลักคือความยาวของรหัส
Ilmari Karonen

1
@Izkata, อัปเดตคำถามเพื่อเป็นเกียรติแก่ Mel
ugoren

คำตอบ:


10

PHP 77 75 74 65 60

ขอบคุณมากสำหรับคำแนะนำที่ยอดเยี่ยมจากTim Seguine :

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

PHP ส่อเสียด: 46 42 41 40

ใช้ความคิดของ Phil Hและคำแนะนำของ Tim Seguineอีกครั้ง:

<?touch(__FILE__)?>Happy birthday to me!

ไม่รวมปีในการเปรียบเทียบใช่ไหม ถ้าเป็นเช่นนั้นมันจะทำงานเฉพาะในวันเกิดที่ 0
ugoren

@ugoren คุณพูดถูก! ขอบคุณสำหรับการแก้ไข บันทึก 2 ไบต์
ComFreek

หาก "ไม่ได้อะไร preint" ในกฎระเบียบที่มีการตีความออกมาตรฐานเฉลี่ยแล้วคุณสามารถชนะ 4 ไบต์โดยการลบ''รอบdmสตริง มันสร้างคำเตือน แต่ฉันเชื่อว่ามันถูกส่งไปยังข้อผิดพลาดมาตรฐานหากการรายงานข้อผิดพลาดเปิดอยู่
Tim Seguine

4
<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Tim Seguine

1
@ TimSeguine ขอบคุณสำหรับคำแนะนำของคุณ! ฉันรวมไว้ในคำตอบของฉันฉันหวังว่าคุณจะไม่รังเกียจ
ComFreek

48

Bash (ส่อเสียด): 36

touch $0;echo Happy Birthday to me\!

ตามกฎ: "การสร้างการดัดแปลงหรือการรวบรวมเวลาของโปรแกรม" ฉันเลือกเวลาการแก้ไขและการแก้ไขด้วยตนเองตลอดเวลา [HT @ace สำหรับ 1 ถ่าน]

Perl (ส่อเสียด): 29

print "Happy birthday to me!"

อันนี้เป็นเนื้อหาลับ ๆ ล่อ ๆ น้อยกว่าครั้งแรก; โปรแกรม Perl จะถูกคอมไพล์ก่อนที่จะถูกประหารชีวิตซึ่งทุกคนไม่ได้รู้ - ดูมีการศึกษาเกี่ยวกับความลับ ดังนั้นนี่คือวันรวบรวมเพลงที่ฉันใช้

- แก้ไขการเปลี่ยนแปลงกฎ -

สิ่งนี้ถูกเขียนก่อนที่จะมีกฎใด ๆ เกี่ยวกับการเปลี่ยนวันเกิดของคุณ ฉันคิดว่า Perl ยังคงยืนอยู่; โปรแกรม Perl ทั้งหมดจะถูกคอมไพล์ก่อนที่จะรัน ฉันจะทิ้งคำตอบไว้ที่นี่เพื่อเหตุผลทางการศึกษา!


6
ตกลงสิบแปดมงกุฎรับ +1 ของฉันสำหรับความฉลาด
Victor Stafusa

1
คุณสามารถหลบหนี!ด้วย\!และลบเครื่องหมายคำพูดเพื่อบันทึก 1 ตัวอักษร
user12205

1
เคล็ดลับดี แต่กฎห้ามอย่างชัดเจน (ตอนนี้)
ugoren

1
@ugoren ยังคงไม่ได้ห้ามการแก้ปัญหา Perl ซึ่งจะรวบรวมก่อนที่โปรแกรมจะเริ่มต้น
Cruncher

3
@Cruncher ฉันเกรงว่าคุณพูดถูก ฉันจะปรึกษาทนายความของฉันและส่งใบเรียกเก็บเงินให้คุณ
ugoren

13

ทุบตี - 65

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

ขอบคุณugoren , aceและnyuszika7hสำหรับความช่วยเหลือ


ฉันคิดว่าคุณสามารถหลบหนี!ด้วย\!ดังนั้นคุณไม่จำเป็นต้องพูดและประหยัด 1 ถ่าน
user12205

ที่จริงฉันมีคำพูดเพราะฉันคิดว่าเสียงก้องจะต้องใช้พวกเขาสำหรับช่องว่าง ฉันพาพวกเขาออกไปและไม่ได้หนีเครื่องหมายอัศเจรีย์และมันก็ยังใช้ได้ ขอบคุณสำหรับทิป!
shiona

2
คุณจำเป็นต้องหลบหนี!ในเชลล์แบบโต้ตอบไม่ใช่สคริปต์
nyuszika7h

คุณสามารถบันทึกอักขระสองตัวโดยใช้[และ]แทนที่[[]]และ
nyuszika7h

1
ใช้งานได้หรือไม่เมื่อปีนั้นไม่ตรงกับวันที่สร้าง?
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!"));}}

จัดรูปแบบ:

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 (ไม่มีโบนัส)

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

ด้วยคำแนะนำเพิ่มเติม (คุณจำเป็นต้องรวบรวมb.exeและเรียกใช้จากไดเรกทอรีที่ปฏิบัติการอยู่ใน) ฉันสามารถทำให้มันเป็นแบบนี้:

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 (ไม่มีโบนัส)

เช่นเดียวกับคำแนะนำข้างต้นคราวนี้พิมพ์เฉพาะข้อความในวันเกิดของตัวเอง (ดังนั้นจึงไม่มีโบนัส -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!");}}

คุณสามารถบันทึกสองสามไบต์ในโบนัสได้โดยเพิ่ม,b="1202"==tหลังจากที่คุณได้รับสตริงวันที่และใช้มันแทน
ahruss

1
ขอบคุณ! แม้ว่า "ไม่กี่ไบต์" จะกลายเป็นหนึ่ง ... หรือฉันจะหายไปบางสิ่งบางอย่าง? แก้ไขอ้าฉันเห็นแล้ว คุณพูด,b="1202"==tแต่==tส่วนหนึ่งเป็นไปไม่ได้เนื่องจากมันประเมินค่าบูลและ var อื่นเป็นสตริง คุณไม่สามารถ (AFAIK นั่นคือ) ใช้สองประเภทที่แตกต่างกันในการประกาศ "var" หนึ่งรายการ
RobIII

อ่าโอเค. ไม่นานมานี้ตั้งแต่ฉันใช้ C # ความผิดฉันเอง.
ahruss

คุณสามารถย่อรุ่นที่ง่ายกว่าโดยการเปรียบเทียบวันที่ไม่ใช่สตริง CreationTime.Date == DateTime.Todayบุรุษนี้ใช้สิ่งที่ต้องการ
svick

นั่นจะใช้ได้เฉพาะวันนี้ / ปีนี้ / วันเกิด 0 นั่นจะทำงานได้อย่างไรในปีอื่น ๆ
RobIII

5

Java - 275 - 15% = 233.75 พร้อมโบนัส / 237 ไม่มีโบนัส

พร้อมโบนัส:

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

ไม่มีโบนัส:

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

ฉันเกิดในเดือนเมษายน 23


1
สุขสันต์วันเกิดให้ไม่ใช่เพื่อ ;-) เพียงแค่ช่วยคุณประหยัด byte :-) อีกคน
RobIII

@ RobIII ขอบคุณคง
Victor Stafusa

นอกจากนี้บรรทัดใหม่ ( \n) ไม่จำเป็นต้องใช้ AFAIK ซึ่งช่วยให้คุณประหยัดอีก 4 ไบต์ ;-)
RobIII

@ RobIII ขอบคุณอีกครั้ง
Victor Stafusa

ใช่ ... ฉันควรหยุดยิงเท้าของตัวเอง: P ยินดีต้อนรับคุณ)
RobIII

3

ฉันค่อนข้างภูมิใจกับเคล็ดลับเล็ก ๆ นี้ในการบันทึกข้อความจำนวนหนึ่งไบต์ ฉันหวังว่ามันจะรวมอยู่ในคำตอบอื่น ๆ ฉันเป็นคนแรกที่คิดเรื่องนี้!

หลาม

105 ตัวอักษรไม่มีเครดิตเพิ่ม บันทึกไฟล์เป็น "สุขสันต์วันเกิดให้ฉัน" แล้วเรียกใช้ ทำงานใน GMT เท่านั้นและ "วันเกิด" ถูกกำหนดให้เป็นวันเดือนปีเกิดของคุณไม่ใช่วันครบรอบ (มักจะเรียกว่า "วันเกิด")

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

เพื่อให้ทำงานได้ให้บันทึกสิ่งนี้เป็น "สุขสันต์วันเกิดให้ฉัน" แล้วเรียกใช้ python "happy birthday to me"

หมายเหตุ: แน่นอน bootstrap ทั้งหมด แต่ขนาดเล็กอาจอยู่ในชื่อไฟล์ทำให้รหัสขนาดใหญ่โดยพลการใด ๆ ลดลงไปที่ bootstrap โดยปกติฉันจะพิจารณา "การโกง" นี้ อย่างไรก็ตาม "สุขสันต์วันเกิดให้ฉัน" ไม่ใช่ชื่อไฟล์ที่ไม่สมเหตุสมผล - มันอธิบายว่าโปรแกรมทำอะไรได้ดีกว่าบางโปรแกรม (เช่น "python") ดังนั้นในกรณีนี้ฉันจะอนุญาต :)


ฉันคิดว่าการใช้ชื่อไฟล์นั้นเป็นการโกง (แม้ว่าฉันจะไม่ได้ห้ามอย่างชัดเจน) หากได้รับอนุญาตทำไมไม่ลองเขียนดูeval(sys.argv[0])ล่ะ
ugoren

และฉันก็ไม่ได้ตั้งใจจะกำหนดวันเกิด แต่มันเป็นวันที่มาปีละครั้งเมื่อคนฉลองวันครบรอบการเกิดของพวกเขาไม่ใช่วันที่แน่นอนเมื่อคุณเกิด
ugoren

ugoren: ฉันพูดถึงในบันทึกย่อของฉันที่ด้านล่าง (ซึ่งวันที่ความคิดเห็นของคุณล่วงหน้า) 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

ชื่อไฟล์จะต้องเป็น 'fm'


1
ในวันเกิดคุณควรพูดว่า "สุขสันต์วันเกิดให้คุณ !" :-)
RobIII

@ Robobii: โอ๊ะคุณพูดถูกฉันอ่านไม่ออกพอ จะลบรุ่นที่สอง ขอบคุณ!
H.Muster

ฉันคิดว่าจะstrncmp(x, y, 5)เปรียบเทียบวันที่อย่างเช่น28-12-201315 ตัวอักษรแรก ( 28-12เช่นวันที่ 28 ธันวาคม) สิ่งนี้ยังใช้งานได้เมื่อมีการตั้งค่าตำแหน่งที่ตั้งของผู้ใช้yyyy/mm/ddหรือไม่ Matlab เป็นค่าเริ่มต้นdd-mm-yyyyเสมอหรือไม่ (แค่สงสัย). แก้ไข Nevermind: พบแล้ว! . ดูเหมือนว่ามันจะ มันจะไม่สำคัญสำหรับmm/dd/yyyyหรือdd-mm-yyyyเนื่องจากตัวถูกดำเนินการทั้งซ้ายและขวาจะใช้รูปแบบเดียวกันต่อไปและทั้ง 5 ตัวอักษรซ้ายสุดจะตรงกัน ตราบใดที่ปีไม่เคยเป็นผู้นำ
RobIII

ทำไมคุณต้องตัวแปรt? ใช้งานไม่ได้dir('f.m').date?
ugoren

@ugoren: tจำเป็นต้องทำการdirคืนค่าคุณสมบัติของไฟล์ (มิฉะนั้นจะส่งคืนไฟล์ทั้งหมดในไดเรกทอรีที่ตรงกัน'f.m') นอกจากนี้tมีความจำเป็นในการเข้าถึงdateสนาม
H.Muster

2

GNU COBOLพร้อม - ฟรี, 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.

ฉันทำผิดกฎเกี่ยวกับคนดังดังนั้นจึงไม่มีโบนัสที่นั่น ...

ข้อความที่สร้างขึ้นคือการป้อนข้อมูลของผู้ใช้ (ร้องขอเมื่อเรียกใช้) ถ้านั่นไม่ดีไปสายการกำหนดCจะต้องถูกลบเช่นเดียวกับACCEPT CและDISPLAY Cจะต้องกลายเป็น DISPLAY "HAPPY BIRTHDAY TO ME!"เป็นอักขระเพิ่มอีกเจ็ดตัว

WHEN-COMPILEDคือการลงทะเบียนพิเศษที่มีวันที่ / เวลารวบรวมที่มีให้โปรแกรม (มีประโยชน์เสมอคุณสามารถรู้ว่าคุณมีรุ่นที่ถูกต้อง) มันถูกตัดทอนในMOVEเพราะส่วนที่เหลือไม่จำเป็นต้องใช้ DATEคือวันที่ปัจจุบัน - อันนี้คือ yymmdd

/ในความหมายของเป็นสัญลักษณ์การแก้ไขแทรกตั้งแต่รวบรวมวันที่มีเครื่องหมายทับ อักขระพิเศษ แต่ทำให้การเปรียบเทียบง่ายขึ้น

คนดัง = Grace Hopper


2

รุ่นที่ - 37 ไบต์

การขโมยวิธีที่ใช้โดยหนึ่งในคำตอบของ Bash ..

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

วิธีอื่น - 145 ไบท์

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

1

Ruby, 69 ตัวอักษร / ไบต์

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

31536000คือจำนวนวินาทีในหนึ่งปีและ86400คือจำนวนวินาทีในหนึ่งวัน


4
น่าเสียดายที่ทำงานได้อย่างถูกต้องเป็นเวลาสูงสุดเจ็ดปีหรือมากกว่านั้นจนกว่าคุณจะเข้าสู่ปีอธิกสุรทินแรกหลังจากช่วงเวลานี้
Amadan

ยังกล่าวว่า "สุขสันต์วันเกิด" ในตอนเช้าหลังจากวันเกิดของคุณและไม่ได้พูดสุขสันต์วันเกิดในตอนเช้าของวันเกิดก่อนเวลาเกิดของคุณ
AMADANON Inc.

1

JavaScript

Node.js, 156 ไบต์

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

ใช้เวลาในการแก้ไขไฟล์


ถึงตอนนี้คุณเต้น 56 by = = P
stroncium

ฉันได้รับข้อผิดพลาดรันไทม์เมื่อฉันเรียกใช้ของคุณ แต่วิธีการจับคู่นั้นฉลาดกว่ามาก แก้ไขข้อผิดพลาดและคุณมี upvote ของฉัน ;)
Chris W.

คุณสามารถอ้างถึงข้อผิดพลาดและระบบปฏิบัติการของคุณ? ฉันเดาว่ามันไม่ได้เป็นแพลตฟอร์มข้ามแพลตฟอร์ม
ตรอนเซียม

1

Powershell - 105 ไบต์

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

โบนัสไม่คุ้มเลยฉันทำได้แค่ 117.5


1

Powershell - 127

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

สำหรับโบนัส 15% - 151 ไบต์น้อยกว่า 15% = 128.4

$r=@{"0308"="you";(gci $MyInvocation.MyCommand.Path).lastwritetime.ToString("MMdd")="me"}[(get-date).tostring("MMdd")]
if($r){"Happy birthday to $r!"}

1
ฉันไม่ใช่ผู้เชี่ยวชาญด้าน PowerShell แต่จะใช้ได้เฉพาะในปีปัจจุบันเท่านั้นหรือ จะเกิดอะไรขึ้นเมื่อ "โปรแกรม" มีวันเกิดวันที่ 1, 2, 3 และอื่น ๆ
RobIII

คุณสามารถลบwriteคำสั่ง - เพียงแค่"happy birthday to me!"มันจะพิมพ์ออกมา
ลุง

คุณค่อนข้างถูกต้อง ฉันควรรู้ว่า
Chris J

@ Robill - อุ๊ปส์ นั่นคือสิ่งที่มาจากการเขียนอะไรบางอย่างเมื่อฉันฟุ้งซ่านโดยสิ่งอื่นและใช้ codegolf เป็นการผัดวันประกันพรุ่ง คงที่ (ไม่ใช่ว่ามันมีโอกาสชนะใจ)
Chris J

1

Ruby - 80 103 87 ไบต์

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

ทับทิม - 123 115 135 121-15% = 104.55 97.75 114.75 102.85 จุด

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}

อาจจะยาวหรือสั้นกว่านี้เล็กน้อยขึ้นอยู่กับว่าวันเกิดของคุณตรงกับวันที่ในปีใดและวิธีที่สั้นที่สุดในการเป็นตัวแทนของมัน สำหรับฉันนั่นคือ36e5(วินาทีนับตั้งแต่กาลขึ้นอยู่กับเขตเวลา)


เมลกิบสันนับรวมไหม? นี่คือ 138 ไบต์ - โบนัส 35% = โปรแกรม89.7 จุดที่เฉลิมฉลองตัวเองฉันและ 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}

1
รหัสของคุณล้มเหลวในปีอธิกสุรทินสำหรับวันที่หลังจากเดือนกุมภาพันธ์
ugoren

@ugoren ถูกต้องคุณ แก้ไขปัญหานั้น แต่เสียคะแนนเป็นจำนวนมาก :(
ทิม S.

แต่ตอนนี้ฉันได้เรียกคืนส่วนใหญ่แล้ว! =)
Tim S.

0

PureBasic

ไม่มีโบนัส - 142

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

พร้อมโบนัส - 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)+"!")

0

TI-BASIC, 68 ไบต์

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

If , Ans, →, Dispโปรดจำไว้ว่าราชสกุลเหล่านี้เป็นหนึ่งไบต์: getDateคือสองไบต์ สัญลักษณ์หนึ่งตัวอื่น ๆ ทั้งหมดเป็นหนึ่งไบต์


1
คุณแน่ใจหรือไม่ว่าเป็น UTF-8
Fozzedout

3
OP ระบุอย่างชัดเจนว่าคุณควรใช้ UTF-8 นั่นคือ 66 ตัวอักษรและ 68 ไบต์
nyuszika7h

2
หากคุณต้องการอ้างว่าเป็น 46 ไบต์ให้เขียนเป็น 46 ไบต์ ตามที่เป็นอยู่ในขณะนี้คือ 68 ไบต์
ugoren

ตามขนาดโทเค็นในสภาพแวดล้อมมาตรฐาน TI-Basic คือ 55 ไบต์ แต่เป็นข้อความธรรมดาใช่ถึง 68 ของมันในทางเทคนิคแล้วก็ไม่จำเป็นต้องมี "ในตอนท้ายเพื่อให้สามารถบันทึกไบต์
Lemon Drop

0

J 79

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

โบนัสเวอร์ชั่น 120 - 15% = 102

ฉันจะได้รับเครดิตพิเศษสำหรับการพิมพ์ด้วยหรือไม่เมื่อทั้งสองเกิดวันเกิด

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

คำอธิบาย (ขวาไปซ้าย):

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

กริยากลางของรถไฟ

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

ขวากหนามซ้ายสำหรับรถไฟกลาง:

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.

0

Java - 196

สิ่งนี้แตกต่างจากการส่ง Java อื่น ๆ โดยใช้ Strings ซึ่งเป็นการโกน 41 อักขระในกระบวนการ มันใช้ String.format ("% tj") เพื่อจัดรูปแบบ java.util.Date หรือตราบใดที่สตริงวันของปีและจากนั้นเปรียบเทียบทั้งสองสตริง

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

จัดรูปแบบ:

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

1
วันของปีทำงานได้ไม่ดีกับปีอธิกสุรทิน
ugoren

@ugoren ฉันเห็นด้วย อย่างไรก็ตามเนื่องจากการแข่งขันกำลังดำเนินการอยู่และเราอยู่ที่ 20 กุมภาพันธ์ การรวบรวมข้อมูลควรใช้เวลาสองสามวันและไม่ทำให้เกิดปัญหาในปีต่อ ๆ ไป เมื่อรวบรวมหลังจากวันที่ 28 กุมภาพันธ์จะมีปัญหา (ในอนาคต) แน่นอน
RobIII

ถ้าฉันรวบรวมหลังจากวันที่ 28 กุมภาพันธ์ฉันสามารถเปลี่ยนรูปแบบของสตริงเป็น "% tm% td" ได้ด้วยค่าตัวอักษรหกจุด
timxyz

0

C # 191 ไม่มีโบนัส

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

จัดรูปแบบ:

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

คุณใช้ x เพียงสองครั้ง var x="MMdd";+ ToString ( x) + ToString ( x) = 15 ในขณะที่ ToString ( "MMdd"); + ToString ( "MMdd"); ราคาเพียง 12
RobIII

นอกจากนี้ยังไม่จำเป็นต้องขึ้นบรรทัดใหม่เพื่อให้WriteLine()สามารถตัดให้สั้นลงWrite()ได้ เมื่อมีการเปลี่ยนแปลงข้างต้นและในสถานที่คุณมีวิธีการแก้ปัญหาเช่นเดียวกับที่ฉันทำ ;-)
RobIII

1
คุณควรอัปเดตคะแนนด้วยซึ่งตอนนี้คือ 193 และคุณสามารถทำให้มันลดลงเหลือ 191 โดยการโกนหนวดสอง M ออก * hint *: P
RobIII


0

vb.net ~ 161c

นี่จะพิมพ์ข้อความเฉลิมฉลองให้กับทุกคนที่มีวันเกิด

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

คะแนน: 253c (-33c vb.net ขั้นต่ำ) = 220 - 15% (โบนัสวันเกิดของฉัน) = 187c - 14% (Celeb Birthday) = 160.82 ~ 161c หรือ 220c - 29% = 156.2 ~ 157c


คุณสามารถรับโบนัสสำหรับวันเกิดของคุณหรือคนดัง ไม่ใช่ทั้งคู่
ugoren

@ugoren การให้คะแนนไม่ได้ระบุว่าเป็นเอกสิทธิ์หรือดังนั้นฉันจึงใช้ความหมายเชิงตรรกะของหรือ
Adam Speight

0

Powershell, 82 ไบต์

ดูคำตอบจากChris Jและ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

คือการรวมกันของทางลัดและชื่อแทนสำหรับการแสดงออก:

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

ที่เทียบเท่ารูปแบบบัญญัติ:

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

Powershell, 119 ไบต์ - 14% = 102.34 คะแนน

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

ที่3 มกราคม , Happy birthday to Prof!จอแสดงผลสคริปต์ หากสคริปต์นี้ถูกบันทึกในวันที่ 3 มกราคมคำทักทายสองรายการจะปรากฏขึ้น


-1

C # - 63 ไบต์

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

ฉันเลือกเวลารวบรวม เนื่องจากโค้ด C # จะคอมไพล์เป็นMSILซึ่งบนรันไทม์จะถูกคอมไพล์ไปยังโค้ดที่สามารถเรียกทำงานได้โดยJIT Compilerโปรแกรมนี้จึงตรงตามเงื่อนไข

แก้ไข - อาจเป็นคำตอบที่ไม่ถูกต้องตามที่ระบุไว้ในความคิดเห็น


1
เคล็ดลับเก่าใช้ไม่ได้อีกต่อไป กฎ 2 กล่าวว่า "ต้องไม่ได้รับผลกระทบจากการร้องขอหรือการดำเนินการของโปรแกรม แต่อย่างใด"
ugoren

อัปเดตตาม ขอขอบคุณ @ugoren
rahulroy9202

@ugoren รหัส PERL โดย Phil H ยังใช้เคล็ดลับเดียวกันนี้ ตรวจสอบคำตอบที่โหวตสูงสุด
rahulroy9202

2
นอกจากนี้ยังเป็นคำตอบที่ไม่ถูกต้อง แต่ - เขาเป็นคนแรกที่ใช้เคล็ดลับนี้และในเวลาที่เขาทำมันกฎอนุญาต
ugoren
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.