Chúc mừng sinh nhật tôi!


21

Chúc mừng sinh nhật tôi!

Viết một chương trình in Happy birthday to me!vào ngày sinh nhật của nó.

  1. Sinh nhật của chương trình là thời gian tạo, sửa đổi hoặc biên dịch cuối cùng của chương trình (bạn chọn) và không được mã hóa cứng.
  2. Ngày bạn sử dụng làm ngày sinh nhật không được ảnh hưởng bởi việc gọi hoặc thực hiện chương trình theo bất kỳ cách nào. Bạn không thể sửa đổi ngày sinh nhật của bạn.
  3. Đối với tín dụng bổ sung (số lượng byte -15%), hãy in Happy birthday to you!vào ngày sinh nhật của bạn (được mã hóa cứng), nếu nó không trùng với chương trình. Hoặc sử dụng sinh nhật của một số người nổi tiếng và nhận -14%.
  4. Nó phải chỉ in cái này, và không in bất cứ thứ gì vào bất kỳ ngày nào khác.
  5. Đếm số byte, trong UTF-8.
  6. Sử dụng lịch Gregorian.

Chúc may mắn và chúc mừng sinh nhật (đến các chương trình sơ sinh).

PS
Theo nhận xét của Izkata, nếu bạn in Happy birthday to Melvào ngày sinh nhật của Mel Kaye , bạn sẽ được giảm 20%. Nhưng bạn phải cung cấp một nguồn đáng tin cậy là ngày này.


1
@TeunPronk, Bạn không thể làm cả hai. Hoặc sử dụng sinh nhật của riêng bạn, hoặc của một người nổi tiếng (hoặc không, và từ bỏ tín dụng thêm).
ugoren

4
@TeunPronk: Chỉ Jon Skeet mới có thể: P
MSalters

11
Tôi đã thấy điều này trong thanh bên Câu hỏi nóng và đọc "Chúc mừng sinh nhật Mel " ...
Izkata

1
@PeterTaylor: Hả? Trao các loại phần thưởng điểm khác nhau cho các tính năng bổ sung là khá phổ biến đối với các câu hỏi về môn đánh gôn và tôi chưa từng thấy ai tuyên bố rằng nó sẽ không đủ điều kiện để sử dụng thẻ đó, miễn là tiêu chí chấm điểm chính là độ dài mã.
Ilmari Karonen

1
@Izkata, Cập nhật câu hỏi để vinh danh Mel.
ugoren

Câu trả lời:


10

PHP 77 75 74 65 60

Rất cám ơn những lời đề nghị tuyệt vời từ Tim Seguine :

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

Lén lút PHP: 46 42 41 40

Sử dụng ý tưởng của Phil H và một lần nữa gợi ý của Tim Seguine :

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

Nó không bao gồm năm trong so sánh? nếu vậy, nó chỉ hoạt động vào ngày sinh nhật thứ 0.
ugoren

@ugoren Bạn nói đúng! Cảm ơn vì sự đúng đắn của bạn. Đã lưu 2 byte.
ComFalet

Nếu "không đặt trước bất cứ điều gì" trong các quy tắc được hiểu là đầu ra tiêu chuẩn, thì bạn có thể giành được 4 byte bằng cách loại bỏ ''các dmchuỗi xung quanh . Nó tạo ra một cảnh báo, nhưng tôi tin rằng nó được gửi đến lỗi tiêu chuẩn nếu báo cáo lỗi được bật.
Tim Seguine

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

1
@TimSeguine Cảm ơn lời đề nghị của bạn! Tôi đã kết hợp chúng vào câu trả lời của tôi, tôi hy vọng bạn không phiền.
ComFalet

48

Bash (lén lút): 36

touch $0;echo Happy Birthday to me\!

Theo các quy tắc: "thời gian tạo, sửa đổi hoặc biên dịch của chương trình". Tôi chọn thời gian sửa đổi, và tự sửa đổi vĩnh viễn. [HT @ace cho 1 char]

Perl (cũng lén lút): 29

print "Happy birthday to me!"

Cái này được cho là ít lén lút hơn cái đầu tiên; Các chương trình Perl luôn được biên dịch trước khi chúng được thực thi, điều mà không phải ai cũng biết - nhìn thấy, có một sự quay vòng giáo dục về sự lén lút. Vì vậy, đây là ngày biên dịch mà tôi đang sử dụng.

- Chỉnh sửa để thay đổi quy tắc -

Điều này đã được viết trước khi có bất kỳ quy tắc về việc thay đổi ngày sinh nhật của bạn. Tôi nghĩ người Perl vẫn đứng vững; tất cả các chương trình Perl được biên dịch trước khi chúng được chạy. Tôi sẽ để lại câu trả lời ở đây vì lý do giáo dục!


6
Ok, gian lận, nhận +1 của tôi cho sự thông minh.
Victor Stafusa

1
Bạn có thể thoát !với \!và xóa các trích dẫn để lưu 1 char
user12205

1
Thủ thuật hay, nhưng các quy tắc rõ ràng cấm nó (bây giờ).
ugoren

1
@ugoren Vẫn không cấm giải pháp perl, được biên dịch trước khi chương trình bắt đầu .
Cruncher

3
@Cruncher, tôi sợ bạn đúng. Tôi sẽ hỏi ý kiến ​​luật sư của tôi và gửi cho bạn hóa đơn.
ugoren

13

bash - 65

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

Nhờ ugoren , acenyuszika7h để được giúp đỡ.


Tôi nghĩ rằng bạn có thể thoát khỏi !với \!vì vậy bạn không cần báo giá và lưu 1 char.
dùng12205

Trên thực tế tôi đã có những trích dẫn vì tôi nghĩ rằng echo sẽ yêu cầu chúng cho không gian. Tôi lấy chúng ra và không thoát khỏi dấu chấm than và nó vẫn hoạt động. Cảm ơn vì tiền hỗ trợ!
shiona

2
Bạn chỉ cần thoát !trong shell tương tác, không phải script.
nyuszika7h

Bạn có thể lưu hai ký tự bằng cách sử dụng []thay vì [[]].
nyuszika7h

1
Nó có hoạt động khi năm không giống như ngày tạo không?
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!"));}}

Định dạng:

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 (Không có tiền thưởng)

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

Với một số hướng dẫn bổ sung (bạn cần biên dịch nó b.exevà chạy nó từ thư mục có thể thực thi được) Tôi có thể chuyển nó xuống đây:

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 (Không có tiền thưởng)

Tương tự như hướng dẫn ở trên, lần này chỉ in một tin nhắn vào ngày sinh nhật của chính nó (vì vậy không có phần thưởng -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ạn có thể lưu vài byte trong phần thưởng bằng cách thêm ,b="1202"==tsau khi bạn nhận được chuỗi ngày và sử dụng chuỗi đó thay thế.
ahruss

1
Cảm ơn! Mặc dù "vài byte" hóa ra là một ... hoặc tôi đang thiếu thứ gì đó? Chỉnh sửa Ah, tôi thấy; bạn đã nói ,b="1202"==tnhưng ==tphần này là không thể vì nó đánh giá một bool và var khác là một chuỗi. Bạn không thể (AFAIK nghĩa là) sử dụng hai loại khác nhau trong một khai báo "var".
RobIII

À được rồi. Đã được một thời gian kể từ khi tôi sử dụng C #. Lỗi của tôi.
ahruss

Bạn có thể rút ngắn phiên bản đơn giản hơn bằng cách so sánh ngày, không phải chuỗi. Người đàn ông này sử dụng một cái gì đó như CreationTime.Date == DateTime.Today.
Svick

Điều đó sẽ chỉ làm việc cho ngày hôm nay / năm nay / sinh nhật 0. Làm thế nào điều đó sẽ làm việc cho những năm khác?
RobIII

5

Java - 275 - 15% = 233,75 với tiền thưởng / 237 không có tiền thưởng

Có thưởng

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

Không có tiền thưởng:

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

Tôi sinh vào tháng Tư, 23.


1
Chúc mừng sinh nhật tới , không cho ;-) Chỉ cần lưu cho bạn một byte :-)
RobIII

@RobIII Cảm ơn, đã sửa.
Victor Stafusa

Ngoài ra, dòng mới ( \n) không bắt buộc AFAIK giúp bạn tiết kiệm thêm 4 byte ;-)
RobIII

@RobIII Cảm ơn một lần nữa.
Victor Stafusa

Vâng ... Tôi nên dừng bắn vào chân mình: P Bạn được chào đón;)
RobIII

3

Tôi khá tự hào về thủ thuật nhỏ này để lưu một vài byte vào tin nhắn. Tôi hy vọng nó sẽ được bao gồm trong các câu trả lời khác. Tôi là người đầu tiên nghĩ về điều này!

Con trăn

105 ký tự, không có tín dụng thêm. Lưu tệp dưới dạng "chúc mừng sinh nhật tôi" và chạy. Chỉ chạy trong GMT và "sinh nhật" được định nghĩa là ngày sinh của bạn, không phải là ngày kỷ niệm (cũng thường gọi là "sinh nhật").

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

Để nó hoạt động, hãy lưu cái này là "chúc mừng sinh nhật tôi" và chạy python "happy birthday to me"

Lưu ý: tất nhiên, tất cả trừ một bootstrap nhỏ có thể nằm trong tên tệp, làm cho bất kỳ mã lớn tùy ý nào giảm xuống bootstrap. Thông thường tôi sẽ xem xét "gian lận" này. Tuy nhiên, "chúc mừng sinh nhật tôi" không phải là một tên tệp không hợp lý - nó mô tả những gì chương trình làm, tốt hơn nhiều so với một số chương trình (ví dụ: "python"), vì vậy trong trường hợp này tôi sẽ cho phép nó :)


Tôi nghĩ rằng dựa vào tên tệp là gian lận (mặc dù tôi không cấm nó một cách rõ ràng). Nếu nó được cho phép, tại sao không chỉ viết eval(sys.argv[0])?
ugoren

Và tôi không buồn định nghĩa ngày sinh nhật, nhưng đó là một ngày mỗi năm một lần khi một người kỷ niệm ngày sinh của họ , không phải là ngày chính xác khi bạn được sinh ra.
ugoren

ugoren: Tôi đã đề cập đến điều đó trong phần ghi chú của tôi ở phía dưới (trước ngày bình luận của bạn). 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

Tên tệp phải là 'fm'


1
Vào ngày sinh nhật của bạn, nó nên nói "Chúc mừng sinh nhật bạn !" :-)
RobIII

@RobIII: Rất tiếc, bạn nói đúng, tôi đã không đọc kỹ. Sẽ loại bỏ phiên bản thứ hai. Cảm ơn!
H.Muster

Tôi giả sử strncmp(x, y, 5)so sánh các ngày như 28-12-201315 ký tự đầu tiên ( 28-12ví dụ: ngày 28 tháng 12). Điều này cũng hoạt động khi các cài đặt ngôn ngữ của người dùng là yyyy/mm/ddví dụ? Matlab có mặc định dd-mm-yyyyluôn không? (Chỉ tò mò). Chỉnh sửa Nevermind: tìm thấy nó! . Có vẻ như nó làm. Nó sẽ không quan trọng anyway cho mm/dd/yyyyhay dd-mm-yyyyvì cả hai bên trái và toán hạng bên phải sẽ sử dụng định dạng tương tự anyway và cả 5 ký tự tận cùng bên trái sẽ phù hợp anyway; miễn là năm không bao giờ dẫn đầu.
RobIII

Tại sao bạn cần biến t? Không dir('f.m').datehoạt động?
ugoren

@ugoren: tlà cần thiết để dirtrả về các thuộc tính tệp (nếu không, nó sẽ chỉ trả về tất cả các tệp trong thư mục phù hợp 'f.m'). Hơn nữa, tlà cần thiết để truy cập vào các datelĩnh vực.
H.Muster

2

GNU COBOL với -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.

Tôi phá vỡ các quy tắc về người nổi tiếng, vì vậy không có tiền thưởng ở đó ...

Văn bản được tạo ra là đầu vào của người dùng (được yêu cầu khi chạy). Nếu điều đó không tốt, thì việc xác định dòng Ccần phải được xóa ACCEPT C, và DISPLAY Ccũng phải trở thành DISPLAY "HAPPY BIRTHDAY TO ME!", cho thêm bảy ký tự.

WHEN-COMPILEDlà một thanh ghi đặc biệt chứa ngày / thời gian biên dịch có sẵn cho chương trình (luôn tiện dụng, bạn có thể biết bạn có phiên bản chính xác). Nó bị cắt ngắn MOVEvì phần còn lại không cần thiết. DATElà ngày hiện tại - ngày này là yymmdd.

Các /trong định nghĩa của A là một biểu tượng chỉnh sửa chèn, kể từ khi biên dịch cập nhật có chứa dấu gạch chéo. Một nhân vật phụ, nhưng làm dịu sự so sánh.

Người nổi tiếng = Grace Hopper


2

Mẻ - 37 byte

Ăn cắp phương thức được sử dụng bởi một trong những câu trả lời của Bash ..

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

Phương pháp khác - 145 byte

@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 ký tự / byte

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

31536000là số giây trong một năm và 86400là số giây trong một ngày.


4
Thật không may, chỉ hoạt động chính xác trong tối đa bảy năm hoặc lâu hơn, cho đến khi bạn bước vào năm nhuận đầu tiên sau thời gian.
Amadan

Cũng nói "chúc mừng sinh nhật" vào buổi sáng sau ngày sinh nhật của bạn và không nói chúc mừng sinh nhật vào buổi sáng ngày sinh nhật của bạn trước giờ sinh.
AMADANON Inc.

1

JavaScript

Node.js, 156 byte

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

Sử dụng thời gian sửa đổi của tập tin.


đánh bại bạn bằng 56 byte cho đến nay = P
stroncium

Tôi gặp lỗi thời gian chạy khi tôi chạy của bạn, nhưng cách tiếp cận trận đấu chắc chắn thông minh hơn nhiều. Sửa lỗi và bạn đã có upvote của tôi. ;)
Chris W.

Bạn có thể báo lỗi và hệ điều hành của bạn? Tôi đoán nó chỉ không phải là nền tảng chéo.
stroncium

1

Powershell - 105 byte

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

Ung dung:

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

Phần thưởng không xứng đáng, tôi chỉ có thể nhận được 117,5.


1

Powershell - 127

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

Đối với phần thưởng 15% - 151 byte, ít hơn 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
Tôi không phải là chuyên gia về quyền hạn, nhưng điều này sẽ chỉ hoạt động trong năm hiện tại? Điều gì khi "chương trình" có ngày sinh nhật 1, 2, 3, v.v.
RobIII

Bạn có thể loại bỏ writelệnh - Chỉ cần "happy birthday to me!"nó sẽ in ra.
khai mạc

Bạn hoàn toàn đúng. Tôi nên biết điều đó.
Chris J

@Robill - ôi. Đó là những gì xuất hiện khi viết một cái gì đó khi tôi bị phân tâm bởi thứ khác và sử dụng codegolf làm sự chần chừ. Đã sửa (không phải là nó có cơ hội chiến thắng, hãy nhớ).
Chris J

1

Ruby - 80 103 87 byte

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 điểm

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}

Có thể dài hơn một chút hoặc ngắn hơn tùy thuộc vào nơi sinh nhật của bạn rơi trong năm và cách ngắn nhất để thể hiện điều đó. Đối với tôi, đó là 36e5(giây kể từ kỷ nguyên; phụ thuộc múi giờ).


Mel Gibson có tính không? Đây là một chương trình 138 byte - 35% tiền thưởng = 89,7 điểm , kỷ niệm chính nó, tôi và 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
Mã của bạn thất bại vào năm nhuận, cho ngày sau tháng hai.
ugoren

@ugoren đúng rồi bạn. Đã sửa lỗi đó, nhưng mất rất nhiều điểm :(
Tim S.

Nhưng bây giờ tôi đã đòi lại hầu hết những thứ đó! =)
Tim S.

0

PureBasic

Không có tiền thưởng - 142

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

Có thưởng - 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 byte

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

Hãy nhớ rằng, các mã thông báo này là một byte : If , Ans, →, Disp. getDatelà hai byte. Tất cả các ký hiệu một ký tự khác là một byte.


1
Bạn có chắc là UTF-8 không?
Cho phép

3
OP tuyên bố rõ ràng bạn nên sử dụng UTF-8. Đó là 66 ký tự và 68 byte.
nyuszika7h

2
Nếu bạn muốn yêu cầu 46 byte, hãy viết nó bằng 46 byte. Như bây giờ, nó là 68 byte.
ugoren

Theo kích thước mã thông báo trong môi trường TI-Basic tiêu chuẩn, nó là 55 byte, nhưng dưới dạng văn bản thuần túy là 68. Ngoài ra, về mặt kỹ thuật không phải có "ở cuối để có thể tiết kiệm một byte.
Lemon Drop

0

J 79

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

Phiên bản thưởng 120 - 15% = 102

Tôi có nhận được thêm tín dụng cho việc in cả hai khi cả hai đang có sinh nhật không?

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

Giải thích (phải sang trái):

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

Động từ trung tâm của tàu

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

Tine trái cho tàu trung tâm:

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

Điều này khác với trình đệ trình Java khác bằng cách sử dụng Chuỗi, loại bỏ 41 ký tự trong quy trình. Nó sử dụng String.format ("% tj") để định dạng java.util.Date hoặc dài như một chuỗi ngày, và sau đó so sánh hai Chuỗi này.

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

Định dạng:

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
Ngày trong năm không hoạt động tốt với năm nhuận.
ugoren

@ugoren Tôi đồng ý. Tuy nhiên, vì cuộc thi hiện đang diễn ra và chúng tôi sẽ diễn ra vào ngày 20 tháng 2. dữ liệu biên dịch sẽ ổn trong vài ngày và không gây ra vấn đề gì trong những năm sau đó. Khi biên dịch sau ngày 28 tháng 2, thực sự sẽ có một vấn đề (tương lai).
RobIII

Nếu tôi biên dịch sau ngày 28 tháng 2, tôi có thể thay đổi định dạng Chuỗi thành "% tm% td" với chi phí ký tự sáu điểm
timxyz

0

C # 191 không có tiền thưởng

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

định dạng:

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

Bạn chỉ sử dụng x hai lần; var x="MMdd";+ ToString ( x) + ToString ( x) = 15 trong khi ToString ( "MMdd"); + ToString ( "MMdd"); chỉ tốn 12.
RobIII

Ngoài ra, một dòng mới là không cần thiết để WriteLine()có thể rút ngắn Write(). Với sự thay đổi ở trên và thay đổi này, bạn có giải pháp chính xác giống như tôi làm ;-)
RobIII

1
Bạn cũng nên cập nhật điểm số, hiện là 193. Và bạn có thể giảm xuống còn 191 bằng cách tắt hai chữ M * gợi ý *: 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!')

0

vb.net ~ 161c

Điều này sẽ in thông điệp kỷ niệm cho tất cả những người có ngày sinh nhật.

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

Điểm: 253c (-33c vb.net phút) = 220 - 15% (tiền thưởng sinh nhật của tôi) = 187c - 14% (Sinh nhật Celeb) = 160.82 ~ 161c hoặc 220c - 29% = 156.2 ~ 157c


Bạn có thể nhận được một phần thưởng cho ngày sinh nhật của bạn HOẶC một người nổi tiếng. Không phải cả hai.
ugoren

@ugoren Ghi điểm không nêu rõ đó là độc quyền hay, vì vậy tôi đang sử dụng ý nghĩa logic của hoặc.
Adam Speight

0

Powershell, 82 byte

xem thêm câu trả lời từ Chris JSpellingD

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

Ở đâu

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

là sự kết hợp của các phím tắtbí danh cho biểu thức:

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

tương đương với một hình thức kinh điển:

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

Powershell, 119 byte - 14% = 102,34 Điểm

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

Vào ngày 3 tháng 1 , màn hình hiển thị Happy birthday to Prof!. Nếu tập lệnh này được lưu vào ngày 3 tháng 1, hai lời chào sẽ được hiển thị.


-1

C # - 63 byte

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

Tôi chọn thời gian biên dịch . Vì mã C # biên dịch thành MSIL mà trong thời gian chạy được biên dịch thành mã thực thi bởi Trình biên dịch JIT , chương trình này đáp ứng các điều kiện.

EDIT-- Có thể câu trả lời không hợp lệ như được nêu trong các bình luận.


1
Thủ thuật cũ, không còn giá trị. Quy tắc 2 nói "không được ảnh hưởng bởi việc gọi hoặc thực hiện chương trình theo bất kỳ cách nào".
ugoren

cập nhật cho phù hợp. Cảm ơn bạn @ugoren
rahulroy9202

@ugoren Mã PERL của Phil H cũng sử dụng thủ thuật rất giống này. Kiểm tra câu trả lời bình chọn cao nhất.
rahulroy9202

2
Đó cũng là một câu trả lời không hợp lệ. Nhưng - anh ta là người đầu tiên sử dụng mánh khóe này, và tại thời điểm anh ta thực hiện nó, các quy tắc đã cho phép nó.
ugoren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.