Bahasa pemrograman favorit Anda baru saja berulang tahun. Bersikap baik dan nyanyikan lagu Selamat Ulang Tahun .
Tentu saja Anda harus mencapainya dengan menulis program dalam bahasa itu. Program tidak menerima input, dan menulis teks berikut ke output standar atau file arbitrer:
Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear [your favourite programming language]
Happy Birthday to You
Anda harus mengganti bagian yang diberi tanda kurung (dan menghilangkan tanda kurung).
Ini adalah kode golf - kode terpendek menang.
MEMPERBARUI
Saya senang pertanyaan itu membangkitkan minat besar. Biarkan saya menambahkan beberapa info tambahan tentang penilaian. Seperti yang dinyatakan pada awalnya, pertanyaan ini adalah kode golf, sehingga kode terpendek akan menang. Pemenang akan dipilih pada akhir minggu ini (19 Oktober).
Namun, saya juga menghargai kiriman cerdas lainnya dengan suara terbanyak (dan saya mendorong semua orang untuk melakukannya juga). Oleh karena itu, meskipun ini adalah kontes kode-golf, jawaban yang tidak terlalu pendek juga diterima.
Hasil
Selamat kepada Pengoptimal , pemenang kontes ini dengan panjang 42 byte, pengajuan CJam .
sumber
Jawaban:
CJam,
4642 byteBagaimana itu bekerja:
Ini meninggalkan tumpukan sebagai berikut di akhir kode:
yang dicetak secara otomatis ke keluaran sebagai
Coba di sini (Salin kodenya dan jalankan)
sumber
LOLCODE: 109 (105 dengan ejaan "benar")
LOLCODE bukan bahasa yang bagus untuk bermain golf, terutama karena Anda kehilangan semua keindahan dan ekspresif saat memperpendek kode.
Uji dengan menggunakan loljs
Ini adalah rendition pilihan saya, dengan berat 187 karakter (spasi ditambahkan untuk kejelasan):
sumber
Berharap ulang tahun barcode barcode - terlalu banyak byte
Ini mencetak ayat-ayat dan membacanya dengan keras.
StringReplace
mengganti setiap koma dengan NewLine. Barcode tidak dapat berisi karakter kontrol.sumber
10
di barcode (sudut kanan bawah), melihat yangBarcodeRecognize
diperkenalkan di Mathematica 10. ^^TI-Basic, 53 byte
Yah, karena semua orang memasang bahasa pemrograman favorit mereka, saya mungkin juga menambahkan salah satu favorit lama saya. Saya menghabiskan banyak waktu selama bertahun-tahun (sebelum saya lulus ke bahasa pemrograman aktual) mengetik perintah ke jendela setengah ukuran ponsel pintar.
Kalkulator saya tidak mendukung huruf kecil, dan satu-satunya variabel yang dapat berupa string adalah Str1, Str2 dll.
sumber
Sed,
6055 byte(1 karakter ditambahkan karena tidak ada cara untuk membuat
sed
bekerja tanpa input.)Tentu saja bukan pemenang, diposting untuk menunjukkan fitur
sed
langkas///
menggantikan hanya kejadian ke - n .Sed (lebih pendek tapi tidak menarik): 52 karakter
Contoh dijalankan:
sumber
sed
jawaban selalu pemenang IMO :)sed
bekerja tanpa masukan.)".C, 73 byte
sumber
i++-3
. (Saat ini "Dear c" muncul di baris ke-2.) (Saat menggunakan variabel tunggal, saya akanPython,
616059sumber
H="\nHappy Birthday to You"
danprint(H*3)[:59]+" Dear Python"+H
print
argumen.h="\nHappy Birthday to You";(h*3)[:60]+"Dear Python"+h
Dear
dan mengubahnya59
menjadi60
.sh, 52
sumber
H()(echo Happy Birthday ${@:-to You});H;H;H Dear sh;H
.:-
juga mencakup kasus ketika diatur tetapi kosongArnoldC , 228 byte
Mari kita buat Arnold Schwarzenegger bernyanyi ...
keluaran:
sumber
Invalid input '\', expected '"' (line 2, pos 40)
Hahpy Birfday
mengurangi jumlah karakter dengan 4.APL (48)
sumber
↑'Happy birthday '∘,¨⌽4⍴3⍴'to you' 'dear APL'
Bahasa Pemrograman Shakespeare , 3429 byte
Kata-kata saya sendiri, beberapa waktu lalu. Namun, seseorang cukup gila untuk melakukannya. Ya ya saya tahu. Terlalu banyak byte. Tapi SPL layak untuk dimasukkan di sini, saya pikir. Dan percayalah , saya telah melakukan upaya besar untuk "golf" program ini, itulah sebabnya itu sedikit berulang dan menggunakan sebagian besar kata-kata yang sama (saya selalu bisa mengikuti saran DLosc , tapi itu akan menjadi terlalu ekstrem bahkan untuk saya) .
Arti dari semua ini?
OK, jika Anda ingin tahu bagaimana semua ini seharusnya bekerja, izinkan saya mencoba dan menjelaskan alasan saya. Pertama, variabel. Mereka harus berasal dari drama Shakesperian dan, karena jumlah bakteri penting, kita harus memilih yang kecil; demikian,
Ajax
danFord
muncul. Mereka membutuhkan deskripsi setelah dideklarasikan (yang diabaikan, tetapi masih); Saya bisa menggunakan satu huruf, tapi heh.Babak I, Adegan I
var Ajax, Ford; Ford = 0;
Kami membawa variabel ke atas panggung dan memberi
Ajax
tahuFord
bahwa nilainya adalah 0.Babak I, Adegan II
if (Ford > 2*1+1) goto Scene V; Ford = Ford + 1;
OK, jika nilai yang disimpan
Ford
lebih besar dari 3, program melompat ke Scene V; selain itu, nilainya bertambah.Babak I, Adegan III
Ford = 2*2*2*2*2*2*1+2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*1-1; print((char) Ford); Ford = Ford+2*2*2*2*1-1; print((char) Ford); print((char) Ford); Ford = Ford+2*2*2*1+1; print((char) Ford); Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*1+2*2*2*1+(-1); print((char) Ford); Ford = Ford+2*2*2*1+1; print((char) Ford); Ford = Ford+2*1; print((char) Ford); Ford = Ford+2*2*2*(-1)+2*2*(-1); print((char) Ford); Ford = Ford+2*2*(-1); print((char) Ford); Ford = Ford+2*(-1)+(-1); print((char) Ford); Ford = Ford+2*2*2*2*1+2*2*2*1; print((char) Ford); if (Ajax == 2*1) goto Scene IV; Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*2*1+2*2*2*2*2*1+2*(-1); print((char) Ford); Ford = Ford+2*2*(-1)+(-1); print((char) Ford); Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*2*1+2*2*2*(-1)+1; print((char) Ford); Ford = Ford+2*2*2*2*1+2*2*2*1+2*(-1); print((char) Ford); Ford = Ford+2*2*2*1+2*-1; print((char) Ford); goto Scene II;
Banyak dan banyak garis. Idenya adalah untuk mengutak-atik nilai yang disimpan
Ford
, melakukan banyak dan banyak operasi aritmatika untuk mendapatkan nomor ASCII dari huruf yang diinginkan, kemudian kami memberitahu kompiler untuk menampilkan angka dalam bentuk karakter. Begitulah cara Anda menulisHappy Birthday
. Ada bagianif
dalam adegan ini: idenya adalah untuk memeriksa apakah ini adalah frase ketiga dari lagu; jika ya, kita lompat ke Scene IV; kalau tidak kita terus maju, untuk menulisto You
. Setelah itu, kita kembali ke Scene II.Babak I, Adegan IV
Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*2*1+2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*1+1; print((char) Ford); Ford = Ford+2*2*(-1); print((char) Ford); Ford = Ford+2*2*2*2*1+1; print((char) Ford); Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*1+2*2*2*2*1+2*1+1; print((char) Ford); Ford = Ford+2*(-1)+(-1); print((char) Ford); Ford = Ford+2*2*(-1); print((char) Ford); goto Scene II;
Cara kerjanya mirip dengan Adegan di atas: idenya adalah menulis
Dear SPL
.Babak I, Adegan V
End.
Seperti itu.
Saya masih belum menemukan tempat di mana ini dapat diuji, sayangnya ...
sumber
fat fat fat fat cat
. Juga, saya menggunakan github.com/drsam94/Spl/blob/master/splc.py untuk mengkompilasi kode spl saya.Ruby, 54 byte
Saya hanya berpikir "Hei, belum ada jawaban Ruby", tetapi kemudian satu muncul beberapa detik sebelum ini. Baiklah...
sumber
Adakah cinta untuk PHP?
615958 byteLihat dalam aksi @ http://sandbox.onlinephpfunctions.com/
sumber
$s="\nHappy Birthday";echo$t="$s to You","$t$s Dear PHP$t";
<?=$t=($s="\nHappy Birthday")." to You","$t$s Dear PHP$t"?>
\n
dengan baris yang sebenarnya untuk menghemat char.Saya tidak bisa memutuskan hanya satu bahasa: /
BrainBack: 68
BrainBack adalah campuran antara BrainFuck dan Forth, dibuat untuk tantangan PCG 7 Mar 2014
Extended BrainFuck : 79
Ulang tahun EBF adalah 16 Jul 2010
Skema: 96
(R5RS, Racket, R6RS REPL)
Skema lahir Desember, 1975 (NB: PDF)
Zozotez : 96
Namun, rasanya lebih tepat melakukan yang ini dalam bahasa Prancis (86):
Keluaran:
Ulang tahun Zozotez adalah 19 Jul 2011
sumber
Joyeux anniversaire à Zozotez
.Deadfish (
26102391 chars)Apa ini? Keluaran hanya tantangan? Kedengarannya itu adalah pekerjaan untuk Deadfish !
Sayangnya, karena Deadfish hanya menghasilkan bilangan bulat, kode di atas menampilkan representasi ASCII dari setiap karakter dalam lagu.
Jika kita menggunakan spesifikasi itu
maka kita bisa bermain golf ini ke 2391 karakter:
Catatan: Deadfish sebenarnya bukan bahasa favorit saya, tetapi saya tidak bisa menolak: P. Juga bermain golf di Deadfish adalah teka-teki yang menyenangkan.
sumber
JS, 83 byte
atau 79 byte oleh @Ingo Bürk
atau 71 byte oleh @kapep
atau jalankan di konsol halaman ini (42 byte)
sumber
h='Happy Birthday ',t='to You\n';console.log(h+t,h+t,h+'Dear Javascript\n',h+t)
(Anda masih dapat menggunakanprompt
untuk menyimpan lebih banyak lagi)t='to you\n';console.log(h='Happy birthday',t+h,t+h,'dear JavaScript\n'+h,t)
console.log(a=(b="Happy Birthday ")+"to You\n",a,b+"Dear Javascript\n",a)
alert((t=(h="Happy Birthday ")+'to You\n')+t+h+'dear EcmaScript\n'+t)
69R: 70 byte
Mengambil keuntungan dari
paste
dan daur ulang vektor.sumber
cat(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R"),'\n'))
cat
menambahkan spasi di antara string. Jadi Anda berakhir dengan spasi di awal setiap baris kecuali yang pertama.write(x,"")
->write(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R")),"")
68 byte. Ini adalah solusi asli saya dengan 73p=paste;write(c(i<-p(h<-"Happy Birthday","to You"),i,p(h,"Dear R"),i),"")
daur ulang vektor mengalahkan saya lagi.`~`=rep;write(paste("Happy Birthday"~4,c("to You"~2,"Dear R")),"")
tio.run/##K/r/…T-SQL,
8987 byteSunting: Mungkin tidak boleh mengeruk hal-hal lama ini, tapi saya hanya melihat perubahan yang jelas untuk mendapatkan kembali beberapa byte.
Menggunakan STUFF untuk menghapus bagian string yang tidak diinginkan, indeks awal disediakan oleh nilai-nilai dalam
FROM
klausa dikalikan dengan 3sumber
GNU dc, 51
sumber
dc
, tetapi bahkan versi yang hampir mentah lebih pendek:[Happy Birthday To You]d[Happy Birthday Dear dc]rdf
51 karakter.Perl - 58
Jalankan dengan:
Hanya untuk bersenang-senang:
sumber
say"Happy Birthday $_"for("to You","Dear Perl")[0,0,1,0]
?Python 507 byte
Tidak memenangkan hadiah apa pun ... tetapi jika Anda melihatnya dengan cermat, ada beberapa seni ASCII:
sumber
PowerShell -
696459dan 91
dan 108
sumber
Ruby, 56
sumber
=
selalu mengembalikan hasil ekspresi setelah tanda sama dengan. Jika saya sebaris ini, itu hanya akan mencetak"Dear Ruby"
(String#[]=
adalah metode).Marbelous , 151
Mencetak
Happy Birthday
setiap kalihb
dipanggil, dengan salah satuto you
atauDear Marbelous
ditambahkan, berdasarkan apakah inputnya0
atau1
. Marmer yang lewathb
tidak akan di-output, karena akan macet di sinkronisasi&0
.Di bawah ini adalah papan
hb
, dengan hex dikonversi menjadi teks ascii:sumber
CJam, 46 byte
Coba di sini.
Ini meninggalkan array berikut di stack:
Konten siapa yang secara otomatis dicetak kembali-ke-belakang di akhir program.
Atau, dengan for-loop dan jumlah karakter yang sama:
sumber
Haskell: 75
Output kode dalam ideone
Haskell one liner: 79
Anda dapat mencoba satu liner online di sini: http://tryhaskell.org/
sumber
mapM_(print.("Happy Birthday "++))["to You","to You","dear Haskell","to You"]
putStrLn
sesuai dengan spec (Anda mendapatkan tanda kutip ganda denganprint
)_
diperlukan karena nilai pengembalian main dibuang - Anda hanya melihatnya di GHCiVar'aQ - 121
sumber
GolfScript: 54 karakter
Contoh dijalankan:
sumber
T-SQL (Sesuai MS): 75
sumber
+char(10)
dengan satu baris di dalam kutipan, buat saja bagian dari string.C #
(75)(73)Menggunakan
System.Diagnostics
untuk tujuanDebug.Print
Tingkatkan ke kode @Abbas
Tingkatkan ke kode @Tyress
(83)(76)Keluaran:
sumber
String.Format
dan operator ternary. Anda juga dapat membuat ini terlihat kurang seperti program C # dan gunakani++<3
; p