Selamat ulang tahun untukku!

21

Selamat ulang tahun untukku!

Tulis program yang mencetak Happy birthday to me!pada hari ulang tahunnya.

  1. Ulang tahun program adalah kreasi, modifikasi terakhir, atau waktu kompilasi program (yang Anda pilih), dan tidak boleh dengan kode keras.
  2. Tanggal yang Anda gunakan sebagai tanggal lahir tidak boleh dipengaruhi oleh permintaan atau eksekusi program dengan cara apa pun. Anda tidak dapat mengubah tanggal lahir Anda.
  3. Untuk kredit tambahan (-15% jumlah byte), cetak Happy birthday to you!pada hari ulang tahun Anda (hard coded), jika tidak sesuai dengan program. Atau gunakan ulang tahun selebriti dan dapatkan -14%.
  4. Ini harus mencetak hanya ini, dan tidak mencetak apa pun di hari lain.
  5. Hitung byte, dalam UTF-8.
  6. Gunakan kalender Gregorian.

Semoga sukses dan selamat ulang tahun (untuk program yang baru lahir).

PS
Mengikuti komentar Izkata, jika Anda mencetak Happy birthday to Melpada hari ulang tahun Mel Kaye , Anda mendapat diskon 20%. Tetapi Anda harus memberikan sumber yang kredibel bahwa ini adalah tanggal ini.

ugoren
sumber
1
@ TeunPronk, Anda tidak bisa melakukan keduanya. Baik gunakan ulang tahun Anda sendiri, atau selebriti (atau tidak sama sekali, dan berikan kredit ekstra).
ugoren
4
@TeunPronk: Hanya Jon Skeet yang dapat: P
MSalters
11
Saya melihat ini di sidebar Pertanyaan Panas dan membaca "Selamat Ulang Tahun untuk Mel " ...
Izkata
1
@PeterTaylor: Hah? Memberi berbagai jenis bonus skor untuk fitur tambahan cukup umum untuk pertanyaan kode-golf , dan saya belum pernah melihat ada yang mengklaim bahwa itu akan mendiskualifikasi pertanyaan dari menggunakan tag itu, asalkan kriteria penilaian utama adalah panjang kode.
Ilmari Karonen
1
@Izkata, Memperbarui pertanyaan untuk menghormati Mel.
ugoren

Jawaban:

10

PHP 77 75 74 65 60

Banyak terima kasih atas saran luar biasa dari Tim Seguine :

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

PHP Sneaky: 46 42 41 40

Menggunakan ide Phil H dan lagi saran Tim Seguine :

<?touch(__FILE__)?>Happy birthday to me!
ComFreek
sumber
Bukankah itu termasuk tahun dalam perbandingan? jika demikian, itu hanya berfungsi pada ulang tahun ke-0.
ugoren
@ugoren Anda benar! Terima kasih atas koreksinya. 2 byte disimpan.
ComFreek
Jika "tidak preint apapun" dalam aturan ditafsirkan berarti keluaran standar, maka Anda bisa memenangkan 4 byte dengan menghapus ''sekitar dmstring. Ini menghasilkan peringatan, tapi saya yakin itu akan dikirim ke kesalahan standar jika pelaporan kesalahan diaktifkan.
Tim Seguine
4
<?date(dm,stat(__FILE__)[9])-date(dm)&&die?>Happy birthday to me!
Tim Seguine
1
@TimSeguine Terima kasih atas saran Anda! Saya telah memasukkannya ke dalam jawaban saya, saya harap Anda tidak keberatan.
ComFreek
48

Bash (licik): 36

touch $0;echo Happy Birthday to me\!

Menurut aturan: "waktu pembuatan, modifikasi atau kompilasi program". Saya memilih waktu modifikasi, dan modifikasi diri abadi. [HT @ace untuk 1 karakter]

Perl (juga licik): 29

print "Happy birthday to me!"

Yang ini bisa dibilang kurang licik dari yang pertama; Program Perl selalu dikompilasi sebelum dijalankan, yang tidak semua orang tahu - lihat, ada putaran edukatif pada kecerdikan. Jadi ini dia tanggal kompilasi yang saya gunakan.

- Edit untuk perubahan aturan -

Ini ditulis sebelum ada aturan untuk mengubah hari ulang tahun Anda. Saya pikir Perl masih berdiri; semua program Perl dikompilasi sebelum dijalankan. Saya akan meninggalkan jawabannya di sini karena alasan pendidikan!

Phil H
sumber
6
Oke, curang, dapatkan +1 saya untuk kepintarannya.
Victor Stafusa
1
Anda dapat melarikan diri !dengan \!dan menghapus tanda kutip untuk menyimpan 1 char
user12205
1
Trik yang bagus, tetapi aturannya secara eksplisit melarangnya (sekarang).
ugoren
1
@ugoren Masih tidak melarang solusi perl, yang dikompilasi sebelum program dimulai .
Cruncher
3
@Cruncher, saya khawatir Anda benar. Saya akan berkonsultasi dengan pengacara saya dan mengirimkan tagihannya kepada Anda.
ugoren
13

bash - 65

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

Terima kasih kepada ugoren , ace dan nyuszika7h untuk bantuannya.

shiona
sumber
Saya pikir Anda dapat melarikan diri !dengan \!sehingga Anda tidak perlu tanda kutip dan menyimpan 1 char.
user12205
Sebenarnya saya memiliki tanda kutip karena saya pikir gema akan membutuhkannya untuk spasi. Saya mengeluarkan mereka dan tidak luput dari tanda seru dan itu masih berhasil. Terima kasih atas tipnya!
shiona
2
Anda hanya perlu melarikan diri !dalam shell interaktif, bukan skrip.
nyuszika7h
Anda dapat menyimpan dua karakter dengan menggunakan [dan ]bukannya [[dan ]].
nyuszika7h
1
Apakah itu berfungsi ketika tahun tidak sama dengan tanggal pembuatan?
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!"));}}

Diformat:

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 (Tidak ada 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%)

Dengan beberapa instruksi tambahan (Anda perlu mengkompilasi ini b.exedan menjalankannya dari direktori yang dapat dieksekusi) saya dapat membahasnya:

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 (Tidak ada bonus)

Instruksi yang sama seperti di atas, kali ini hanya mencetak pesan pada hari ulang tahunnya sendiri (jadi tidak ada bonus -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
sumber
Anda bisa menyimpan beberapa byte dalam bonus dengan menambahkan ,b="1202"==tsetelah Anda mendapatkan string tanggal dan menggunakannya.
ahruss
1
Terima kasih! Meskipun "beberapa byte" ternyata menjadi satu ... atau apakah saya melewatkan sesuatu? Sunting Ah, saya mengerti; Anda mengatakan ,b="1202"==ttetapi ==tbagian itu tidak mungkin karena yang mengevaluasi bool dan var lainnya adalah string. Anda tidak dapat (AFAIK artinya) menggunakan dua jenis berbeda dalam satu deklarasi "var".
RobIII
Ah, baiklah. Sudah lama sejak saya menggunakan C #. Salahku.
ahruss
Anda dapat mempersingkat versi yang lebih sederhana dengan membandingkan tanggal, bukan string. Mens ini menggunakan sesuatu seperti CreationTime.Date == DateTime.Today.
svick
Itu hanya akan bekerja untuk hari ini / tahun ini / ulang tahun 0. Bagaimana cara kerjanya untuk tahun-tahun lainnya?
RobIII
5

Java - 275 - 15% = 233,75 dengan bonus / 237 tanpa bonus

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

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

Saya lahir pada tanggal 23 April.

Victor Stafusa
sumber
1
Selamat ulang tahun untuk , tidak untuk ;-) Hanya disimpan Anda byte lain :-)
RobIII
@RobIII Terima kasih, sudah diperbaiki.
Victor Stafusa
Juga, baris baru ( \n) tidak diperlukan AFAIK yang menyelamatkan Anda 4 byte ;-)
RobIII
@RobIII Terima kasih lagi.
Victor Stafusa
Ya ... Saya harus berhenti menembak kaki saya sendiri: P
Sama
3

Saya cukup bangga dengan trik kecil ini untuk menghemat beberapa byte pada pesan. Saya harap ini akan dimasukkan dalam jawaban lain. Saya adalah orang pertama yang memikirkan hal ini!

Python

105 karakter, tidak ada kredit tambahan. Simpan file sebagai "selamat ulang tahun untukku" dan jalankan. Berjalan dalam GMT saja, dan "ulang tahun" didefinisikan sebagai tanggal kelahiran Anda, bukan ulang tahun itu (juga sering disebut "ulang tahun").

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

Agar berhasil, simpan ini sebagai "selamat ulang tahun untukku" dan jalankan python "happy birthday to me"

Catatan: tentu saja, semua kecuali bootstrap kecil bisa dalam nama file, membuat kode besar sembarang mengurangi ke bootstrap. Biasanya saya akan menganggap ini "curang". Namun, "selamat ulang tahun untuk saya" bukan nama file yang tidak masuk akal - ini menggambarkan apa yang program lakukan, jauh lebih baik daripada beberapa program (misalnya "python"), jadi dalam hal ini saya akan mengizinkannya :)

AMADANON Inc.
sumber
Saya pikir mengandalkan nama file itu curang (meskipun saya tidak melarangnya secara eksplisit). Jika diizinkan, mengapa tidak menulis saja eval(sys.argv[0])?
ugoren
Dan saya tidak repot-repot mendefinisikan hari ulang tahun, tetapi itu adalah hari yang datang setahun sekali ketika seseorang merayakan ulang tahun kelahiran mereka , bukan hari yang tepat ketika Anda dilahirkan.
ugoren
ugoren: Saya memang menyebutkan hal itu di catatan saya di bagian bawah (yang memberi tanggal sebelum komentar Anda). 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

Nama file harus 'fm'

H.Muster
sumber
1
Pada hari ulang tahun Anda , seharusnya tertulis "Selamat ulang tahun untuk Anda !" :-)
RobIII
@RobIII: Ups, Anda benar, saya belum cukup membaca. Akan menghapus versi kedua. Terima kasih!
H.Muster
Saya berasumsi strncmp(x, y, 5)membandingkan tanggal seperti 28-12-201315 karakter pertama ( 28-12mis. 28 Desember). Apakah ini juga berfungsi ketika pengaturan lokal pengguna yyyy/mm/ddmisalnya? Apakah Matlab default dd-mm-yyyyselalu? (Hanya penasaran). Sunting Nevermind: ditemukan! . Sepertinya memang begitu. Lagi pula tidak masalah untuk mm/dd/yyyyatau dd-mm-yyyykarena kedua operan kiri dan kanan akan menggunakan format yang sama dan kedua karakter paling kiri tetap cocok; sepanjang tahun tidak pernah memimpin.
RobIII
Mengapa Anda membutuhkan variabel t? Tidak dir('f.m').datebekerja
ugoren
@ugoren: tdiperlukan untuk dirmengembalikan atribut file (jika tidak, ia hanya akan mengembalikan semua file dalam direktori yang cocok 'f.m'). Selanjutnya, tperlu untuk mengakses datebidang.
H.Muster
2

GNU COBOL dengan -gratis, 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.

Saya melanggar aturan tentang selebriti, jadi tidak ada bonus di sana ...

Teks yang dihasilkan adalah input pengguna (diminta saat dijalankan). Jika itu tidak baik, maka definisi baris Cperlu dihapus, seperti halnya ACCEPT C, dan DISPLAY Charus menjadi DISPLAY "HAPPY BIRTHDAY TO ME!", untuk tujuh karakter tambahan.

WHEN-COMPILEDadalah register khusus yang berisi tanggal kompilasi / waktu yang tersedia untuk program (selalu berguna, Anda dapat mengetahui bahwa Anda memiliki versi yang benar). Itu terpotong di MOVEkarena sisanya tidak diperlukan. DATEadalah tanggal saat ini - ini adalah yymmdd.

The /dalam definisi A adalah simbol pengeditan penyisipan, karena tanggal kompilasi berisi garis miring. Karakter tambahan, tetapi memudahkan perbandingan.

Selebriti = Grace Hopper

Bill Woodger
sumber
2

Batch - 37 Bytes

Mencuri metode yang digunakan oleh salah satu jawaban Bash ..

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

Metode lain - 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!
hapus clemeat
sumber
1

Ruby, 69 karakter / byte

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

31536000adalah jumlah detik dalam setahun, dan 86400jumlah detik dalam sehari.

Gagang pintu
sumber
4
Sayangnya, hanya berfungsi dengan benar selama maksimal tujuh tahun atau lebih, hingga Anda memasuki tahun kabisat pertama setelah atime.
Amadan
Juga ucapkan "selamat ulang tahun" pada pagi hari setelah ulang tahun Anda, dan jangan katakan selamat ulang tahun pada pagi hari ulang tahun Anda sebelum waktu kelahiran Anda.
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!")

Menggunakan waktu modifikasi file.

Chris W.
sumber
mengalahkan Anda dengan 56 byte sejauh ini = P
stroncium
Saya mendapatkan kesalahan runtime ketika saya menjalankan kesalahan Anda, tetapi pendekatan pertandingan jelas jauh lebih pintar. Perbaiki kesalahan dan Anda mendapat upvote saya. ;)
Chris W.
Bisakah Anda mengutip kesalahan dan OS Anda? Saya kira itu bukan crossplatform.
stroncium
1

Powershell - 105 byte

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

Tidak Disatukan:

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

Bonus tidak sepadan, saya hanya bisa mendapatkan 117,5.

EjaanD
sumber
1

Powershell - 127

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

Untuk bonus 15% - 151 byte, kurang 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
sumber
1
Saya bukan ahli PowerShell, tetapi ini hanya akan bekerja di tahun berjalan? Bagaimana jika "program" itu berulang tahun ke-1, ke-2, ke-3, dll.
RobIII
Anda dapat menghapus writeperintah - Dengan hanya "happy birthday to me!"itu akan mencetaknya.
hapus tanda
Anda benar. Saya harus tahu itu.
Chris J
@Robill - oops. Itulah yang terjadi ketika menulis sesuatu ketika saya terganggu oleh sesuatu yang lain dan menggunakan codegolf sebagai penundaan. Diperbaiki (bukan karena punya peluang menang, ingatlah).
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 poin

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}

Mungkin sedikit lebih lama atau lebih pendek tergantung di mana ulang tahun Anda jatuh pada tahun itu, dan cara terpendek untuk mewakili itu. Bagi saya, itu 36e5(detik sejak zaman; tergantung zona waktu).


Apakah Mel Gibson masuk hitungan? Berikut adalah 138 byte - bonus 35% = program 89,7 poin yang merayakan dirinya sendiri, saya, dan 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.
sumber
1
Kode Anda gagal pada tahun kabisat, untuk tanggal setelah Februari.
ugoren
@ugoren benar kamu. Memperbaiki itu, tetapi kehilangan banyak poin :(
Tim S.
Tapi sekarang saya sudah mendapatkan kembali sebagian besar dari itu! =)
Tim S.
0

PureBasic

Tanpa Bonus - 142

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

Dengan 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
sumber
0

TI-BASIC, 68 byte

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

Ingat, token ini adalah satu byte: If , Ans, →, Disp. getDateadalah dua byte. Semua simbol satu karakter lainnya adalah satu byte.

Timtech
sumber
1
Apakah Anda yakin itu UTF-8?
Fozzedout
3
OP secara eksplisit menyatakan Anda harus menggunakan UTF-8. Itu 66 karakter dan 68 byte.
nyuszika7h
2
Jika Anda ingin mengklaim 46 byte, tulis dalam 46 byte. Seperti sekarang, 68 byte.
ugoren
Menurut ukuran token dalam lingkungan standar TI-Basic adalah 55 byte, tetapi sebagai teks biasa ya 68. Juga secara teknis tidak harus ada "pada akhirnya sehingga dapat menyimpan byte.
Lemon Drop
0

J 79

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

Bonus versi 120 - 15% = 102

Apakah saya mendapatkan kredit tambahan untuk mencetak keduanya saat keduanya berulang tahun?

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

Penjelasan (kanan ke kiri):

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

Kata kerja pusat kereta

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 kiri untuk kereta pusat:

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

Jawa - 196

Ini berbeda dari pengajuan Java lainnya dengan menggunakan Strings, mencukur 41 karakter dalam proses. Ia menggunakan String.format ("% tj") untuk memformat java.util.Date atau selama String sehari-tahun, dan kemudian membandingkan dua String ini.

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

Diformat:

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
sumber
1
Hari tahun tidak bekerja dengan baik dengan tahun kabisat.
ugoren
@ugoren saya setuju. Namun, karena kontes sedang berjalan dan kami berada pada 20 Februari. dat kompilasi harus baik untuk beberapa hari dan tidak menyebabkan masalah tahun-tahun berikutnya. Ketika dikompilasi setelah 28 Februari akan ada masalah (masa depan) memang.
RobIII
Jika saya mengkompilasi setelah 28 Februari saya bisa mengubah format String menjadi "% tm% td" dengan biaya karakter enam poin
timxyz
0

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

diformat:

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
sumber
Anda menggunakan x hanya dua kali; var x="MMdd";+ ToString ( x) + ToString ( x) = 15 sedangkan ToString ( "MMdd"); + ToString ( "MMdd"); hanya biaya 12.
RobIII
Juga, baris baru tidak diperlukan sehingga WriteLine()dapat dipersingkat Write(). Dengan di atas dan perubahan ini di tempat Anda memiliki solusi yang sama persis seperti yang saya lakukan ;-)
RobIII
1
Anda harus memperbarui skor juga, yaitu 193 sekarang. Dan Anda bisa turun ke 191 dengan mencukur dua M * petunjuk *: 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
sumber
0

vb.net ~ 161c

Ini akan mencetak pesan perayaan untuk semua orang yang berulang tahun.

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

Nilai: 253c (-33c vb.net min) = 220 - 15% (bonus ulang tahun saya) = 187c - 14% (Ulang Tahun Perayaan) = 160,82 ~ 161c atau 220c - 29% = 156,2 ~ 157c

Adam Speight
sumber
Anda bisa mendapatkan bonus untuk ulang tahun Anda ATAU selebriti. Tidak keduanya.
ugoren
@ugoren Scoring tidak menyatakan itu eksklusif atau, jadi saya menggunakan arti logis dari atau.
Adam Speight
0

Powershell, 82 byte

lihat juga jawaban dari Chris J dan SpellingD

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

dimana

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

adalah kombinasi pintasan dan alias untuk ekspresi:

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

yang setara dengan bentuk kanonik:

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

Powershell, 119 byte - 14% = 102,34 Poin

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

Pada 3 Januari , skrip ditampilkan Happy birthday to Prof!. Jika skrip ini disimpan pada 3 Januari, dua salam akan ditampilkan.

mazzy
sumber
-1

C # - 63 byte

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

Saya memilih waktu kompilasi . Karena kode C # dikompilasi ke MSIL yang pada saat runtime dikompilasi ke kode yang dapat dieksekusi oleh JIT Compiler , program ini memenuhi persyaratan.

EDIT - Kemungkinan jawaban tidak valid seperti yang ditunjukkan dalam komentar.

rahulroy9202
sumber
1
Trik lama, tidak berlaku lagi. Aturan 2 mengatakan "tidak boleh dipengaruhi oleh permintaan atau eksekusi program dengan cara apa pun".
ugoren
diperbarui sesuai. Terima kasih @ugoren
rahulroy9202
@ugoren Kode PERL oleh Phil H juga menggunakan trik yang sama. Periksa jawaban terpilih tertinggi.
rahulroy9202
2
Itu juga jawaban yang tidak valid. Tapi - dia pertama kali menggunakan trik ini, dan pada saat dia melakukannya, aturan mengizinkannya.
ugoren