Rock Around the Clock

46

Dalam sesedikit mungkin karakter Unicode, cetak yang berikut (144 karakter):

1, 2, 3 o'clock, 4 o'clock rock,
5, 6, 7 o'clock, 8 o'clock rock,
9, 10, 11 o'clock, 12 o'clock rock,
We're gonna rock around the clock tonight.

Anda tidak boleh menggunakan angka apa pun dalam kode Anda, kecuali digit 1.

rybo111
sumber
1
Ada spasi di akhir 3 baris pertama, apakah itu dihitung?
aditsu
@aditsu: Ini karena pengeditan, karena m.buettner lupa menghapusnya saat mengedit kembali ke blok kode. Saya akan mengubah ini, tetapi pengeditan dianggap terlalu kecil.
Wrzlprmft
1
Saya menghapusnya sekarang
aditsu
4
Beberapa jawaban digunakan 11. Apakah instruksi tersebut berarti Anda hanya dapat menggunakan angka 1 atau angka 1?
mfvonh
10
@ mfvonh saya katakan Anda bisa menggunakan 1. Saya tidak menentukan berapa kali, jadi fakta bahwa orang telah menggunakan 11celah pintar, dan saya semua untuk itu.
rybo111

Jawaban:

48

Javascript - 140 132

k=1,s=", ",t=" o'clock",x="";while(k<11)x+=k+++s+k+++s+k+++t+s+k+++t+" rock,\n";alert(x+"We're gonna rock around the clock tonight.")

Faktanya, 11 itu terbuat dari dua angka 1, biarkan aku melewati aturan.

Penjelasan

K +++ s sama dengan (k ++) + s, jadi ia menambahkan k pertama ke x, lalu menambah k dan kemudian menambahkan s ke x. Proses ini akan dilakukan tiga kali sebelum menambahkan kalimat terakhir.

izlin
sumber
Mengapa Anda {} ? Tidak diperlukan untuk sementara, Anda hanya memiliki 1 instruksi. Tetapi karena Anda harus menggunakan ";" Anda hanya akan menang 1 char. ^^
Antoine Esteve
3
Apa yang k+++sharus dilakukan Apakah itu (k++) + satau k + (++s)atau (k++) + (++s)?
seequ
31
+1 untuk omong kosong ini:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher
2
@ CtrlKly biasanya bermain golf di JS Anda harus menggunakan pernyataan keluaran dan alertlebih pendek dari console.log. Menggunakan tampilan otomatis dari perhitungan terakhir di konsol seperti curang.
edc65
15
Apakah Anda yakin itu bukan Brainfuck?
Michael Hampton
37

C # - 186

Bahasa golf terbaik atau bahasa golf terbaik?

class P{static void Main(){var s="";for(int i=1;i<11;)s+=i+++", "+i+++", "+i+++" o'clock, "+i+++" o'clock rock,\n";System.Console.Write(s+"We're gonna rock around the clock tonight.");}}
William Barbosa
sumber
Saya bertanya-tanya mengapa ia mendapat begitu banyak suara juga. Orang-orang menyukai entri non-golf-friendly-language, mungkin
William Barbosa
7
Dia mengilhami saya untuk melakukannya di C ++, jadi dia mendapat suara. Pria Sejati (tm) tidak menggunakan bahasa yang ditafsirkan gila untuk kode golf!
Darren
Anda tidak benar-benar membutuhkan spasi dalam i++ +bit
DLeh
Saya menulisnya di dotnetfiddle dan tidak bisa dikompilasi tanpa spasi. Terima kasih telah menunjukkannya.
William Barbosa
Anda dapat mencukur pasangan lebih banyak dengan melakukan WriteLine-> Write, dan menggunakan literal \ndi akhir string.
Alconja
27

Brainfuck (1574)

Bukan penyerahan serius, tapi ikuti aturan.

-[----->+<]>--.-----.------------.[-->+++<]>++.------.------------.++[-->+++<]>.[--->++<]>--.+++++[->+++<]>.[--->+<]>++.-[--->+<]>+.+++++++++.+++.------------.++++++++.+++[----->++<]>.------------.++[-->+++<]>+.-[--->++<]>--.+++++[->+++<]>.[--->+<]>++.-[--->+<]>+.+++++++++.+++.------------.++++++++.-[++>---<]>+.---[----->++<]>.---.------------.++++++++.+++[----->++<]>.>++++++++++.-[----->+<]>.---------.------------.-----[->++<]>.----------.------------.----[->++<]>-.+[-->+<]>++++.+++++[->+++<]>.[--->+<]>++.-[--->+<]>+.+++++++++.+++.------------.++++++++.+++[----->++<]>.------------.----[->++<]>.[-->+<]>++++.+++++[->+++<]>.[--->+<]>++.-[--->+<]>+.+++++++++.+++.------------.++++++++.-[++>---<]>+.---[----->++<]>.---.------------.++++++++.+++[----->++<]>.>++++++++++.+[->+++++<]>++.-------------.------------.[-->+++<]>+.-.----.------------.[-->+++<]>+..-[--->++<]>.+++++[->+++<]>.[--->+<]>++.-[--->+<]>+.+++++++++.+++.------------.++++++++.+++[----->++<]>.------------.[-->+++<]>+.+.--[--->++<]>.+++++[->+++<]>.[--->+<]>++.-[--->+<]>+.+++++++++.+++.------------.++++++++.-[++>---<]>+.---[----->++<]>.---.------------.++++++++.+++[----->++<]>.>++++++++++.[------>+<]>.++[->++++<]>+.---[->+++<]>+.-[->+++<]>.-------------.--[--->+<]>-.++[->+++<]>+.++++++++.-..-------------.-[->+++<]>.---[----->++<]>.---.------------.++++++++.-[++>---<]>+.[->+++<]>+.--[--->+<]>---.---.++++++.-------.----------.-[--->+<]>-.---[->++++<]>.------------.---.--[--->+<]>-.+[->+++<]>.+++++++++.+++.------------.++++++++.-[++>---<]>+.---[->++++<]>.-----.-.-----.--.+.++++++++++++.[++>---<]>.

Dapat diuji di sini .

BrunoJ
sumber
12
Jawaban Brainfuck selalu layak dihormati.
Pharap
1
Mungkin kita harus memberinya penghargaan "jawaban terlama"? #RESPECT
Jamie
23

Ruby, 100

printf"%i, %i#{", %i o'clock"*r=-~1} rock,
"*-~r+"We're gonna rock around the clock tonight.",*1..$$
histokrat
sumber
4
Anda dapat menyimpan beberapa karakter dengan s="%i, %i#{", %i o'clock"*-~1} rock,\n"(ganti \ndengan linebreak literal). Ide bagus untuk digunakan $$!
Ventero
3
Memperluas komentar saya sebelumnya: Jika Anda menetapkan r=-~1inline, Anda dapat menggunakan "..."*-~ralih-alih s+s+s, memungkinkan Anda untuk membatalkan tugas s.
Ventero
Sangat bagus, akan mengeditnya.
histokrat
18

Perl 123

$s="*, *, * o'(, * o'( ),";print"$s
$s
$s
We're gonna ) around the ( tonight."=~s![(*)]!(clock,rock)[1+1+1&ord$&]||++$i!reg

Ekspresi reguler cocok (, )dan *. Saya menggunakan fakta bahwa kode ASCII (adalah 40, )adalah 41 dan *42.

The rbendera ekspresi reguler memungkinkan "di tempat substitusi" dan ebendera memungkinkan evaluasi kode (mirip dengan x.replace(/.../, function(m){...})di JavaScript).

(clock,rock)adalah array dari dua "kata kosong". $&adalah kecocokan saat ini dari persamaan reguler dan ord$&merupakan nilai ASCII.

Masked oleh 3 atau 1+1+1nilai ASCII sekarang 0, 1 dan 2, jadi saya bisa menggunakannya untuk mengambil elemen array yang sesuai. Karena 2 berada di luar array, operator "korsleting" ||mengevaluasi ++$i. Pada pertandingan pertama $iyang undefjadi incrementing itu saya mendapatkan 1, kemudian 2 dan seterusnya ...

Dengan kata-kata sederhana. Ini menggantikan *dengan kejadian saat itu, (dengan "jam" dan )dengan "batu".

core1024
sumber
1
Apakah. Tidak. Menghitung. Penjelasannya tolong?
seequ
1
@TheRare Explanation menambahkan;)
core1024
6
Itu ilmu hitam. +1
seequ
Ini adalah jenis perl yang dibuat untuk Perl, tidak mengejutkan itu melakukannya dengan baik.
Pharap
16

Bash + coreutils, 120 ASCII, 92 Unicode

ASCII:

c=clock
f(){ echo $[++i], $[++i], $[++i] o\'$c, $[++i] o\'$c rock,;}
f
f
f
echo We\'re gonna rock around the $c tonight.

Unicode:

iconv -t unicode<<<挊挽潬正昻⤨⁻捥潨␠⭛椫ⱝ␠⭛椫ⱝ␠⭛椫⁝屯␧Ᵽ␠⭛椫⁝屯␧⁣潲正㬬㭽㭦㭦㭦捥潨圠履爧⁥潧湮⁡潲正愠潲湵⁤桴⁥挤琠湯杩瑨ਮ|sed 1d|bash

base64 disandikan versi Unicode (dalam kasus rendering unicode kacau):

aWNvbnYgLXQgdW5pY29kZTw8POaMiuaMvea9rOato+aYiuKkqOKBu+aNpea9qOKQoOKtm+akq+Kx
neKQoOKtm+akq+KxneKQoOKtm+akq+KBneWxr+KQp+Kxo+KQoOKtm+akq+KBneWxr+KQp+KBo+a9
suato+OsrOCpveCppuCppuCppuaNpea9qOWcoOWxpeeIp+KBpea9p+a5ruKBoea9suato+aEoOa9
sua5teKBpOahtOKBpeaMpOeQoOa5r+adqeeRqOCornxzZWQgMWR8YmFzaAo=
Trauma Digital
sumber
2
120, sebagai titik koma setelah kurung kurung fungsi deklarasi tidak diperlukan.
manatwork
@Manatwork Ups tangkapan bagus - Saya tidak tahu bagaimana itu menyelinap di sana. Terima kasih!
Digital Trauma
1
Saya berada di Windows sekarang, tetapi apa alasan untuk menggunakan, evalbukannya pipa ke bashatau sh?
core1024
@ core1024 Tidak ada alasan selain saya melupakan kemungkinan ;-) Terima kasih atas tipnya!
Digital Trauma
1
Ups, tidak menghitung $rs!
Shahbaz
13

Brainfuck, 1299

Bleuuuurgh . Itu mengerikan. Saya tidak tahu mengapa saya melakukan ini, sepertinya cukup mudah pada awalnya. Script Brainfuck pertama dan terakhir. Coba di sini.

Dengan bantuan dari pembuat kode otomatis , saya dapat menulis skrip yang menggunakan kembali sebagian besar karakter alih-alih menghasilkan masing-masing dari awal. Hanya 275 karakter lebih pendek dari yang dihasilkan secara otomatis, diposting di sini .

Outputnya tidak diakhiri baris baru.

Saya mungkin akan memberikan sedikit penjelasan nanti. Intinya, setiap garis panjang yang bukan sesuatu seperti >>>>>>>atau <<<<<<<atau >>.>>.>>.>>.menghasilkan karakter atau serangkaian dari mereka.

-[----->+<]>--.
>
++[------>+<]>+.------------.
[-]<<+.>
++[------>+<]>+.------------.
[-]<<+.>
++++[->++++++++<]>.
>
+[------->++<]>+.
>
+[------->+++<]>++.
>
--[----->+<]>---.
>
+[------->++<]>--.
>
+[------->++<]>+.
>
--[----->+<]>---.
>
+[----->+++<]>++++.
>
++[------>+<]>+.
>
++++[->++++++++<]>.
<<<<<<<<<<<<<<<<<<<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>>>.
>
+[--------->++<]>.
>
+[------->++<]>+.
>
--[----->+<]>---.
>
+[----->+++<]>++++.
<<<<<<<<<<.
<++++++++++.
<<<<<<<<<<
<<<<<<<
+.
>>>>>>>>>>
>>>>>>>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>>>>>>>>>
>>>>>>>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>>>.
>>.>>.>>.>>.
<<<<<<<<<<.
<.
<<<<<<<<<
<<<<<<<<
+.[-]<
++[------>+<]>+.
>>.
[-]<<[-]<
-[----->+<]>--.-.
[-]<
++[------>+<]>+.------------.
[-]<
-[----->+<]>--..
>
++++[->++++++++<]>.
>>.>>.>>.>>.>>.>>.>>.>>.>>.
>>>>>>>>>
-[----->+<]>--.+.
<<<<<<<<<
<<<<<<<<<
<<<<<<<<<
<.
>>.>>.>>.>>.>>.>>.>>.
>>>>.
>>.>>.>>.>>.
>>[-]
++[------>+<]>+.>++++++++++.
>
+[--->++<]>+.++[->++++<]>+.---[->+++<]>+.-[->+++<]>.-------------.--[--->+<]>-.++[->+++<]>+.++++++++.-..-------------.
<<<<<<<<<<
<<<<<<<<<.
>>.>>.>>.>>.
<<[-]<<[-]<<[-]<<.
>
--[----->+<]>-----.--[--->+<]>---.---.++++++.-------.----------.
[-]<<<.
>
--------[-->+++<]>.------------.---.
<<.
<<<<<<<<<<
<<.
>>.>>.>>.>>.
>>>>.
>>[-]
--------[-->+++<]>.-----.-.-----.--.+.++++++++++++.[++>---<]>.
Komunitas
sumber
10

Lua - 217 164 154 151 149 143

Dimodifikasi yang lama untuk menggunakan loop sebagai gantinya, menyimpan banyak karakter. Terima kasih kepada TeunPronk karena membantu saya mencukur 10 karakter lain dan kepada WilliamBarbosa karena mencukur 3 karakter lainnya. 2 karakter lagi dapat disimpan dengan menggunakan variabel k. 6 karakter lagi disimpan dengan menghilangkan variabel r=" rock,"karena digunakan sekali.

o=" o'clock"c=", "w=io.write k=1+1 for i=1,11,k+k do w(i,c,i+1,c,i+k,o,c,i+k+1,o," rock,\n")end w("We're gonna rock around the clock tonight.")

Tidak disatukan,

o=" o'clock"
c=", "
w=io.write
k=1+1
for i=1,11,k+k do 
   w(i,c,i+1,c,i+k,o,c,i+k+1,o," rock,\n")
end
w("We're gonna rock around the clock tonight.")
Kyle Kanos
sumber
Saya ingin tahu apakah mungkin lebih pendek jika Anda menggunakan loop, bukan jdan k.
Teun Pronk
@TeunPronk: haha, saya baru saja mengubah itu ketika komentar Anda membuat saya ping
Kyle Kanos
1
Anda dapat menurunkannya menjadi 157. Anda tidak perlu koma setelah setiap angka ke-3. Menempatkan infront ruang O, menghapus Odari R, menempatkan ruang di Rdan mengganti Rdengan O,Rdi Anda io.write:)
Teun Pronk
1
@TeunPronk: Diperbarui. Terima kasih atas bantuan Anda!
Kyle Kanos
1
Anda dapat menyimpan io.writedalam variabel ( f=io.write) dan mengurangi ini lebih jauh
William Barbosa
8

CJam - 90 ASCII / 54 Unicode

ASCII:

{{T):T}:F~", ":CFCF" o'clock":OCFO" rock,
"}Z*"We're gonna rock around the clock tonight."

Unicode:

"ξ漰㠬༳ᆧᶃ㸩씪咦⏚騤䖫퍃᰽薂ᴤਥ궋씻㱗㽫Ƶꐥ勋䎔䃱魠ꝯ朐酠礢璿狮꓈执낦덋觫ᥛ琚"GZ)#bBC*b:c~

Cobalah di http://cjam.aditsu.net/

aditsu
sumber
Unico Anda ... "Jawaban ini telah diedit." Oh ya sudah.
seequ
8

Python (123)

print((1+1+1)*"%i, %i, %i o'clock, %i o'clock rock,\n"%tuple(range(1,11+1+1))+"We're gonna rock around the clock tonight.")

PYG (112)

P((1+1+1)*"%i, %i, %i o'clock, %i o'clock rock,\n"%T(R(1,11+1+1))+"We're gonna rock around the clock tonight.")
Ian D. Scott
sumber
7

Brainfuck - 680

coba di sini: ideone.com/Wi9ftB

>>>++++[>+++++++++[>+++[<<<<+<+>>>>>-]<<<+<<<+<+>>>>>>-]<-]+<++++++++<+++<---------<++++++++
++++<----<++++++++++<+++[>>>+.>>>.<<<<.>>>>>>[>[<<<<<<--------.-.>>>.<<<<.>+..<.>>>.>-----.<
------------.+++++++++.+++.------------.++++++++.++++>+++++.<<<<.>.+.>>>>->>-]+<<+>-]+<[<<<<
+.>>>.<<<<.>+.<.>>>.>-----.<<.>---.+++.<.>----.++++>+++++.<<<<.>+.>>>>-]<<<<<.>>>.>-----.<<.
>---.+++.<.>----.<<<.>>>+++++++.---.<.>----.++++>+++++.<<<<<.<-]>[>>++++<<-]>>---.[-]<[>+<-]
>>++.>>-----.<+++.<.<.>++.>---.-..<------.<.>>++++.---.<++.>----.<<.>--.>+++++++.---.++++++.
-------.<+++.<.>>++++++.<++++.---.<.>--.>--------.+++.<.>----.<<.>>+++++++++.-----.-.-----.-
-.+.>[>+++<-]>-.<<<---[>>+<<--]>>--.

seperti yang saya janjikan, ini versi yang lebih baik. otakku terasa seperti .. ooh jadi dari situlah nama itu berasal.

PENJELASAN: (karena tidak dapat dipelihara dan saya tidak ingin melupakan cara kerjanya)

pertama Anda harus memilih tata letak data terbaik untuk tantangan ini. saya datang dengan

-4 outmost loop -3 newline char -2 space -1 numbers 1 lowercase #1 2 lowercase #2 3 comma, apostrophe, period 4 condition (outmost loop < 3) 5 inner loop 6 second inner loop

Kami harus yakin ini optimal kecuali akan ada terlalu banyak shift (yang mana Anda harus mengatur ulang tata letak)

Setelah itu saya menggunakan loop 4x9x3 untuk mengatur nilai awal untuk baris baru, angka, dua huruf kecil dan koma. (semua kode ascii yang lebih kecil mendapat 4x9 = 36 dan dua huruf kecil mendapat 4x9x3 = 108, lalu saya menambahkan dan mengurangi beberapa untuk mendapatkan nilai sebenarnya)

Ketika preset selesai, kode memasuki loop terluar yang berputar 3 kali. Saya menjelaskannya dengan pseudocode.

for 3 to 1 where i = numbers
    print '++i, '
    while inner_loop != 0              # this is true after the first loop
        while second_inner_loop != 0   # and this is true after the second
            print '10, 11 o'clock, 12' # prints the difference
            condition = 0              # it prevents the printing below
        second_inner_loop += 1
    inner_loop += 1
    while condition != 0
        print '++i, ++i o'clock, ++i'
    print ' o'clock rock,\n'

Ketika bagian ini selesai saya hanya perlu mencetak baris terakhir. Tetapi kami memiliki huruf kapital W yang harus diproduksi tanpa menggunakan terlalu banyak karakter. Pada titik ini kita ada di sini:

Address  Value  Pointer
     -4      0  <--
     -3     10
     -2     32
     -1     50
      1     99
      2    111
      3     44

jadi saya menempatkan [-3] 4 kali ke [-1] dan mengurangi 3 untuk mendapatkan 87 (W): >[>>++++<<-]>>---.
kemudian hapus [-]
dan pindahkan [-2] ke lokasi ini [-1] sehingga ruang akan dekat dengan huruf kecil.<[>+<-]

Setelah itu baru cetak hurufnya. huruf kecil # 1 untuk bagian bawah 97-107 dan huruf kecil # 2 untuk wilayah di atas.

bebe
sumber
2
+1 karena 300 karakter lebih pendek daripada jawaban BF lainnya
durron597
Saya berpikir untuk menjadi lebih rendah lagi. kondisi yang buruk untuk membuat tanpa tutorial yang layak (esolangs turun) tetapi bisa lebih pendek ~ 200 karakter lagi
bebe
6

JavaScript, 111 107 karakter, tanpa menggunakan nomor apa pun.

Jalankan cuplikan ini di konsol JS browser Anda:

107 (terinspirasi oleh http://xem.github.io/obfuscatweet/ ditambah jawaban JS lainnya):

eval(unescape(escape('𩡯𬠨𬰽𘠬𘀢𛁴🐢𘁯𙱣𫁯𨱫𘠬𪐽𮀽𙰧𞰫𚱩🀽𜐱𞱸𚰽𪐫𚰫𬰫𪐫𚰫𬰫𪐫𚰫𭀫𬰫𪐫𭀫𘠠𬡯𨱫𛁜𫠢𚐻𮀫𘡗𩐧𬡥𘁧𫱮𫡡𘁲𫱣𪰠𨑲𫱵𫡤𘁴𪁥𘁣𫁯𨱫𘁴𫱮𪑧𪁴𛠢').replace(/uD./g,'')))

111 (hanya mengemas semua string dan menghapus eval sekitar):

unescape(escape('𜐬𘀲𛀠𜰠𫰧𨱬𫱣𪰬𘀴𘁯𙱣𫁯𨱫𘁲𫱣𪰬𒠵𛀠𝠬𘀷𘁯𙱣𫁯𨱫𛀠𞀠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𞐬𘀱𜀬𘀱𜐠𫰧𨱬𫱣𪰬𘀱𜠠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𥱥𙱲𩐠𩱯𫡮𨐠𬡯𨱫𘁡𬡯𭑮𩀠𭁨𩐠𨱬𫱣𪰠𭁯𫡩𩱨𭀮').replace(/uD./g,''))
xem
sumber
4
ada yang melihat kura-kura di sana ...? wtf
Entahlah
hehe, yeah, karakter Unicode "acak" yang dihasilkan oleh obfuscatweet terkadang mengarah ke emoji :)
xem
5

C - 145 - coba saya

main(i){i<11?main(i-~1+1,printf("%d, %d, %d o'clock, %d o'clock rock,\n"
,i++,i,i-~1,i-~1+1)):puts("We're gonna rock around the clock tonight.");}

C - 172 - coba saya

#define l ,__LINE__+~1
#define f ;printf("%d, %d, %d o'clock, %d o'clock rock,\n"
main(){f l
l
l
l)f
l
l
l
l)f
l
l
l
l);puts("We're gonna rock around the clock tonight.");}
bebe
sumber
1
Saya bukan programmer C, jadi maafkan saya jika saya naif, tetapi tidakkah Anda perlu #include <stdio.h>menggunakannya printf?
Kyle Kanos
1
perpustakaan default ditautkan ke sumber dalam vc ++ dan gcc (jadi jika Anda tidak memerlukan sesuatu yang istimewa, Anda dapat dengan bebas memulai tantangan golf dengan mengetikmain(){...
bebe
Ah, begitu. Aneh bahwa itu memuntahkan peringatan jika diterima secara default (hanya diperiksa dengan gcc & icc saya, tidak ada vc ++ untuk menguji).
Kyle Kanos
itu juga meludah urutan titik peringatan jadi ...- w :)
bebe
@Kyle menyertakan file menentukan cara kerja fungsi eksternal (tipe dan parameter kembali). Tidak ada hubungannya dengan menghubungkan perpustakaan. Kompiler C standar akan melewatkan parameter apa pun yang Anda suka ke fungsi apa pun (dengan peringatan) dan nilai-nilai pengembalian sering diabaikan, sehingga tetap berfungsi.
edc65
5

PHP - 125 129

Versi 1 (129)

$i;while($i<11)echo++$i.", ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";echo"We're gonna rock around the clock tonight";

Versi 2 (125)

while($i++<11)echo"$i, ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";echo"We're gonna rock around the clock tonight";

Versi bersih:

while($i++<11)
    echo "$i, ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";
echo "We're gonna rock around the clock tonight";
Samuel
sumber
5

Perl, 114 111 110 108

$s=", X o'clock";$_="X, X$s$s rock,
"x(1+1+1)."We're gonna rock around the clock tonight.";s/X/++$i/eg;print

110:

$s=", X o'clock";print(("X, X$s$s rock,
"x(1+1+1)."We're gonna rock around the clock tonight.")=~s/X/++$i/egr)

111:

print(("X, X, X o'clock, X o'clock rock,
"x(1+1+1)."We're gonna rock around the clock tonight.")=~s/X/++$i/egr)

114:

($s="X, X, X o'clock, X o'clock rock,
"x(1+1+1)."We're gonna rock around the clock tonight.")=~s/X/++$i/ge;print$s
Thaylon
sumber
4

C ++ 261 203

#include<iostream>
#define x i++;
#define y std::cout<<
#define z y x y
void m(){for(int i=1;i<11;){z", ";z", ";z" o'clock, ";z" o'clock rock, "<<"\n";}y"We're gonna rock around the clock tonight.";}

Mengedit upaya pertama saya; itu bekerja ketika saya pertama kali mengujinya, tetapi itu tampaknya hanya kebetulan; peningkatan pasca dalam aliran adalah "perilaku tidak terdefinisi", dan melakukan hal-hal aneh (termasuk skrining biru Windows 7!) ketika saya mencoba menjalankannya kembali. Saya pikir menggunakan printf sebagai ganti std :: cout dapat digunakan dengan penambahan selisih untuk mendapatkan program yang lebih pendek.

Diedit lagi, turun ke 231 dengan menerapkan kembali loop. Diedit lagi, sekarang ke 203 ... #define itu tidak semuanya berguna dalam versi perulangan.

Bagi mereka yang bertanya-tanya bagaimana C ++ dapat menjalankan fungsi "m", titik masuk dapat didefinisikan sebagai fungsi apa pun hanya dengan opsi kompiler, karena dapat mengatur semua fungsi menjadi stdcall; Saya menggunakan kedua sakelar saat mengkompilasi di atas. Jika Anda tidak menyukai titik entri yang didefinisikan ulang, tambahkan 3 ke jumlah karakter saya.

Darren
sumber
Kompiler mana yang Anda gunakan? gcc (4.7.1) tidak memungkinkan saya untuk memanggil fungsi utama m(). Namun Anda dapat menghapus voiddan menyimpan 5 karakter (atau 2 jika Anda menyebutkan metode main)
Christoph Böhmwalder
bagaimana bisa ada upvotes? pertama Anda menulis fungsi yang disebut 'm' yang tidak akan dikompilasi secara default, kedua setiap kompiler menunjukkan jam dalam urutan terbalik. ini membutuhkan koreksi BESAR
bebe
1
@HackerCow Sepertinya saya tidak bisa membuat VS2013 berfungsi tanpa jenis pengembalian kosong yang ditentukan; apakah ada saklar kompiler yang akan memungkinkan itu?
Darren
1
@ MBE Saya menjelaskan titik masuk m () di edit saya; Adapun jam keluaran dicetak dalam urutan terbalik, saya tidak pernah berhasil menduplikasi itu, tapi saya berhasil membuatnya mencetak dengan benar (pertama kali saya mencobanya), kemudian pada pengujian ulang semua 1, 5 dan 12, kemudian pada yang lain tes ulang itu menabrak OS. Jadi, secara teknis itu berjalan sekali, tetapi mengandalkan perilaku yang tidak terdefinisi mungkin merupakan 'ide buruk', jadi saya menulis ulang :)
Darren
1
@ Bebe Aku keren juga; sama sekali tidak saya akan "memenangkan" puzzle golf kode apa pun dengan C ++, jadi menambahkan 3 karakter bukanlah masalah besar. Saya setuju bahwa -D beralih definisi makro akan curang, tetapi hampir semua flag kompiler lain tampak sah bagi saya, karena mereka juga tampak sah bagi orang-orang di utas yang Anda tautkan. Keuntungan apa pun yang Anda peroleh dari sakelar kompiler sederhana tidak akan persis sama dengan medan bermain antara C ++ dan Python / Bash / Perl dll.
Darren
4

Swift - 136 134

var x=1
for;x<11;{print("\(x++), \(x++), \(x++) o'clock, \(x++) o'clock rock,\n")}
print("We're gonna rock around the clock tonight.")
KFuzz
sumber
3

Jawa, 228

Solusi hardcoded mungkin lebih pendek.

public static void main(String[] a){
        String s = "";
        int i=1,j=1;
        for(i--,j--;i<=11;){
            s += ++i + (j > 1 ? " o'clock rock, ":", ");
            if(j == "one".length()){
                j -= j;
                s +="\n";
            }else
                j++;
        }
        System.out.println(s+"We're gonna rock around the clock tonight");
}
Tidak layak
sumber
3
+1 untuk realisasi bahwa hard-coding akan lebih pendek.
Kyle Kanos
1+1+1adalah 9 karakter lebih pendek dari "two".length()". Dan apakah String[] aperlu?
Kyle Kanos
Itu terasa seperti selingkuh, dan ya, String [] a diperlukan.
tidak layak
Ini tidak curang, beberapa orang telah menggunakannya: D
Kyle Kanos
3

Befunge-98 ( 402 268)

Sekarang kehancuran!

".thginot kcolc eht dnuora kcor annog er'eW"a11+/a*1-> #;:,1+" ,",,:,1+" ,",,:,1+" ,kcolc'o "a1-k,:,1+a",kcor kcolc'o "ek,:a11+/a*b1111+++-+-#;_:,a-1+" ,",,:a111++-:*,,1+" ,",,:a111++-:*,,1+" ,kcolc'o "a1-k,:a111++-:*,,1+a",kcor kcolc'o "ek,:a11+/a*b1111+++-+$$$aa*k,@
waylon531
sumber
1
Acak bit teks mundur, ,,:,1+, a11+/a*b1111+++-+w:,, karakter liar di bawah jalur utama kode ... khas Befunge. Sebagian besar penerjemah online mengalami masalah dengan panjang garis (itu melebihi batas), apakah Anda tahu ada yang tidak keberatan?
Saya tidak dapat menemukan kompiler Befunge-98 online, tetapi Anda bisa menggunakan pyfunge yang tersedia di PyPI.
waylon531
3

Groovy - 140 139 karakter

Golf, dipengaruhi oleh jawaban William Barbosa :

s="ock"
i=1
f={->println "${i++}, ${i++}, ${i++} o'cl$s, ${i++} o'cl$s r$s,"}
f();f();f()
println "We're gonna r$s around the cl$s tonight"

Tidak Disatukan:

s = "ock"
i = 1
f = { ->
    println "${i++}, ${i++}, ${i++} o'cl$s, ${i++} o'cl$s r$s,"}
}

f();f();f()

println "We're gonna r$s around the clock tonight"
Michael Easter
sumber
2

Mathematica - 153

i=1;
StringReplace[
  StringJoin[
    Riffle[{s="X, X, X o'clock, X o'clock rock,",s,s},"\n"]]<>
    "\nWe're gonna rock around the clock tonight.","X":>ToString[i++]]
mfvonh
sumber
+1, saya pikir ini adalah strategi terbaik tetapi bisa lebih pendek .
2

C ++ 252

#define P(x) cout<<x
#define Q cout<<", "
#define N cout<<endl
#define C P(" o'clock")
#define R P(" rock")
#define F P(++i);Q;P(++i);Q;P(++i);C;Q;P(++i);C;R;N;
int i;
main()
{
    F F F
    P("We're gonna rock around the clock tonight.");
}
bacchusbeale
sumber
1
Kecuali jika matematika saya payah, gunakan P(", ")untuk Qmenghemat 2 karakter.
Kyle Kanos
2
Ndan Rhanya muncul sekali: akan lebih baik untuk menyejajarkan mereka daripada membuat makro.
Menggunakan komentar di atas dan lebih banyak lagi, ini dapat diringkas menjadi 200 (bahkan dengan menyertakan dan ruang nama yang diinginkan oleh kompiler saya):#include<iostream> #define P std::cout<<++i<< #define C" o'clock" #define F P", ";P", ";P C<<", ";P C<<" rock"<<std::endl; int i;main(){F F F std::cout<<"We're gonna rock around the clock tonight.";}
Hagen von Eitzen
2

Java (v2) - 250 241 232 karakter

Ini adalah program yang berjalan lengkap, dipengaruhi oleh jawaban William Barbosa .

Golf:

public class R{
static int o=1;
static String c(){return o+++", "+o+++", "+o+++" o'clock, "+o+++" o'clock rock,\n";}
public static void main (String[] a){System.out.println(c()+c()+c()+"We're gonna rock around the clock tonight");}}

Tidak Disatukan:

public class R {
    static int o = 1;
    static String c() { 
        return o+++", "+o+++", "+o+++" o'clock, "+o+++" o'clock rock,\n";
    }

    public static void main (String[] a) {
        System.out.println(c()+c()+c()+"We're gonna rock around the clock tonight");
    }
}
Michael Easter
sumber
2

ECMAScript6 - 136 135

Bahkan tidak menggunakan 1digit yang diizinkan :

alert([,...a=[s=", ",s,(c=" o'clock")+s,c+" rock,\n"],...a,...a].map((x,i)=>i+x).join("")+"We're gonna rock around the clock tonight.")

Diuji di konsol Firefox.

Alconja
sumber
atau 114 karakter menggunakan xem.github.io/obfuscatweet ;)
xem
4
@ xem, saya tahu itu cocok dengan surat hukum, tapi saya bukan penggemar kompresi Unicode (atau kompiler / generator lainnya). Dalam pikiran saya, golf adalah ujian keterampilan dan semua kode harus dibuat dengan tangan ... tapi itu hanya saya.
Alconja
2

PowerShell, 123 118 109

1,1,1|%{"$('',''," o'clock"," o'clock rock"|%{"$((++$a))$_,"})"}
"We're gonna rock around the clock tonight."

Setelah awal yang mengerikan (167), saya menyingkirkan beberapa idiom yang bahkan tidak saya butuhkan dan setidaknya membuatnya lebih pendek daripada referensi.

Joey
sumber
2

Haskell - 138 137 karakter

Sebagai program mandiri:

r n=show n++s!!n
s=" o'clock rock,\n":c:c:" o'clock, ":s
c=", "
main=putStr$(r=<<)[1..11+1]++"We're gonna rock around the clock tonight."

Sunting: Saya dulu memiliki fungsi pembantu o digunakan untuk mendefinisikan s oleh

s=o" rock,\n":c:c:o c:s;o=(" o'clock"++)

tetapi ternyata membutuhkan 1 karakter ekstra. Apakah ada cara untuk mengompres semua "jam" / "rock" s / "ock"?

Matt Noonan
sumber
2

JavaScript, 140

a=", x o'clock",b="x, x"+a+a+" rock,\n",b+=b+=b+"We're gonna rock around the clock 
tonight.";for(i=1;i<=11+1;)b=b.replace("x",i++);alert(b)

Saya membuat string seperti "x, x, x jam x batu jam, \ n ..." Lalu saya mengganti "x's" dengan angka.

JeffSB
sumber
1

PHP 150

Tidak ada angka, termasuk 11 yang tidak akan menjadi dua 1 yang saling menempel, tetapi nilai angka sebelas.

function f(){static $i;echo++$i.", ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";}f();f();f();echo"We're gonna rock around the clock tonight";
pengguna29540
sumber
Itu hilang full-stop trailing.
Joey
1

PowerShell, 156 140 136 129 127

for($i=1;$i-lt11){$i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', '}"We're gonna rock around the clock tonight."

Tidak Disatukan:

for($i = 1; $i -lt 11){
    $i++, $i++ , "$(($i++)) o'clock", "$(($i++)) o'clock rock," -join ', '
}
"We're gonna rock around the clock tonight." 
DarkAjax
sumber
Anda bisa menurunkannya menjadi 127 dengan menggunakan $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'dalam loop.
Joey
@ Јοеу Memang, terima kasih atas sarannya!
DarkAjax
1

Cobra - 193

class P
    var i=1-1
    def main
        print[.f,.f,.f,"We're gonna rock around the clock tonight."].join("")
    def f as String
        return"[[.i+=1,.i+=1,.i+=1].join(", ")] o'clock, [.i+=1] o'clock rock,\n"
Suram
sumber