Đá quanh đồng hồ


46

Trong càng ít ký tự Unicode càng tốt, in ra (144 ký tự) sau:

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.

Bạn không được sử dụng bất kỳ số nào trong mã của mình, ngoại trừ chữ số 1.


1
Có khoảng trống ở cuối 3 dòng đầu tiên, những số đó có được không?
aditsu

@aditsu: Đây là do chỉnh sửa, vì m.buettner đã quên xóa chúng khi chỉnh sửa trở lại khối mã. Tôi sẽ sửa đổi điều này, nhưng chỉnh sửa được coi là quá nhỏ.
Wrzlprmft

1
Tôi đã gỡ bỏ chúng ngay bây giờ
aditsu

4
Một số câu trả lời sử dụng 11. Có phải hướng dẫn có nghĩa là bạn chỉ có thể sử dụng số 1 hoặc chữ số 1?
mfvonh

10
@mfvonh Tôi nói bạn có thể sử dụng 1. Tôi đã không xác định bao nhiêu lần, vì vậy thực tế mọi người đã sử dụng 11là một lỗ hổng thông minh, và tôi là tất cả cho nó.
rybo111

Câu trả lời:


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

Thực tế, số 11 được tạo thành từ 2 số 1 cho phép tôi vượt qua các quy tắc tôi đoán.

Giải trình

Các k +++ s bằng (k ++) + s, do đó, nó thêm k đầu tiên vào x, sau đó tăng k và sau đó thêm s vào x. Quá trình này sẽ được thực hiện ba lần trước khi thêm câu cuối cùng.


Tại sao bạn {} ? Nó không cần thiết trong một thời gian, bạn chỉ có 1 hướng dẫn. Nhưng khi bạn phải sử dụng ";" bạn sẽ chỉ giành được 1 char. ^^
Antoine Esteve

3
Không gì k+++slàm gì? Là nó (k++) + shay k + (++s)hay (k++) + (++s)?
Seequ

31
+1 cho điều vô nghĩa này:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher

2
@trlkly thường chơi golf trong JS bạn phải sử dụng câu lệnh đầu ra và alertngắn hơn console.log. Sử dụng màn hình tự động của phép tính cuối cùng trong bảng điều khiển cũng giống như gian lận.
edc65

15
Bạn có chắc chắn đó không phải là Brainfuck?
Michael Hampton

37

C # - 186

Ngôn ngữ golf tốt nhất hay ngôn ngữ golf tốt nhất?

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

Tôi tự hỏi tại sao nó cũng đạt được nhiều phiếu như vậy. Mọi người thích các mục nhập ngôn ngữ không thân thiện với golf, có thể
William Barbosa

7
Anh ấy đã truyền cảm hứng cho tôi để làm điều đó trong C ++, vì vậy anh ấy được một phiếu bầu. Đàn ông đích thực (tm) không sử dụng ngôn ngữ được giải thích woosy cho mã golf!
Darren

bạn thực sự không cần khoảng trắng trong các i++ +bit
DLeh

Tôi đã viết nó trên dotnetfiddle và nó không được biên dịch mà không có khoảng trắng. Cảm ơn đã chỉ nó.
William Barbosa

Bạn có thể cạo một vài cái nữa bằng cách thực hiện WriteLine-> Writevà sử dụng một chữ \nở cuối chuỗi.
Alconja

27

Brainfuck (1574)

Không phải là một đệ trình nghiêm túc, nhưng tuân theo các quy tắc.

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

Có thể được thử nghiệm ở đây .


12
Câu trả lời Brainfuck luôn xứng đáng được tôn trọng.
Pharap

1
Có lẽ chúng ta nên cho anh ấy giải thưởng "câu trả lời dài nhất"? #RESPECT
Jamie

23

Hồng ngọc, 100

printf"%i, %i#{", %i o'clock"*r=-~1} rock,
"*-~r+"We're gonna rock around the clock tonight.",*1..$$

4
Bạn có thể lưu một vài ký tự khác bằng s="%i, %i#{", %i o'clock"*-~1} rock,\n"(thay thế \nbằng một ngắt dòng theo nghĩa đen). Ý tưởng tuyệt vời để sử dụng $$!
Ventero

3
Mở rộng trên nhận xét trước đây của tôi: Nếu bạn chỉ định r=-~1nội tuyến, thì bạn có thể sử dụng "..."*-~rthay vì s+s+s, cho phép bạn bỏ nhiệm vụ s.
Ventero

Rất đẹp, sẽ thực hiện những chỉnh sửa.
lịch sử

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

Các biểu thức chính quy phù hợp (, )*. Tôi đã sử dụng thực tế là mã ASCII (là 40, )là 41 và *là 42.

Các rlá cờ của biểu thức chính quy cho phép "trong thay chỗ" và ecờ cho phép đánh giá mã (tương tự như x.replace(/.../, function(m){...})trong JavaScript).

(clock,rock)là một mảng của hai "từ trần". $&là kết quả khớp hiện tại của biểu thức chính quy và ord$&là giá trị ASCII.

Mặt nạ của 3 hoặc 1+1+1các giá trị ASCII hiện là 0, 1 và 2, vì vậy tôi có thể sử dụng chúng để lấy phần tử mảng tương ứng. Khi 2 nằm ngoài mảng, toán tử "ngắn mạch" sẽ ||đánh giá ++$i. Trong trận đấu đầu tiên $iundefđể incrementing nó tôi nhận được 1, sau đó 2 và vân vân ...

Nói một cách đơn giản. Điều này thay thế *cho sự xuất hiện hiện tại của nó, (với "đồng hồ" và )với "đá".


1
Làm. Không phải. Tính toán. Xin giải thích?
xem

1
@TheRare Giải thích thêm;)
core1024

6
Đó là ma thuật đen. +1
xem

Đây là loại mà Perl đã được tạo ra, không ngạc nhiên khi nó làm rất tốt.
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

phiên bản Unicode được mã hóa base64 (trong trường hợp kết xuất unicode bị rối):

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=

2
120, như dấu chấm phẩy sau dấu ngoặc đóng của hàm khai báo là không cần thiết.
manatwork

@manatwork Rất tiếc - Tôi không biết người đó đã lẻn vào đó như thế nào. Cảm ơn!
Chấn thương kỹ thuật số

1
Bây giờ tôi đang sử dụng Windows, nhưng lý do để sử dụng evalthay vì dẫn đến bashhoặc là shgì?
core1024 17/07/14

@ core1024 Không có lý do nào khác ngoài việc tôi quên khả năng này ;-) Cảm ơn vì tiền boa!
Chấn thương kỹ thuật số

1
Rất tiếc, đã không đếm $rs!
Shahbaz

13

Brainfuck, 1299

Bleuuuurgh . Điều đó thật tồi tệ. Tôi không biết tại sao tôi làm điều này, nó có vẻ khá dễ dàng khi bắt đầu. Kịch bản Brainfuck đầu tiên và có lẽ là cuối cùng. Hãy thử nó ở đây.

Với một số trợ giúp từ trình tạo mã tự động , tôi có thể viết một tập lệnh sử dụng lại hầu hết các ký tự thay vì tạo từng ký tự từ đầu. Nó chỉ ngắn hơn 275 ký tự so với ký tự được tạo tự động, được đăng ở đây .

Đầu ra không kết thúc dòng mới.

Tôi có thể đưa ra một chút giải thích sau này. Về cơ bản, bất kỳ dòng dài mà không phải là một cái gì đó giống như >>>>>>>hoặc <<<<<<<hoặc >>.>>.>>.>>.tạo ra một nhân vật hay một loạt trong số họ.

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

10

Lua - 217 164 154 151 149 143

Thay đổi cái cũ để sử dụng một vòng lặp thay vào đó, tiết kiệm một lượng lớn ký tự. Cảm ơn TeunPronk vì đã giúp tôi loại bỏ 10 ký tự khác và đến WilliamBarbosa vì đã loại bỏ 3 ký tự khác. Có thể lưu thêm 2 ký tự bằng cách sử dụng biến k. Thêm 6 ký tự được lưu bằng cách loại bỏ biến r=" rock,"vì nó được sử dụng một lần.

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

Ung dung

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

Tôi tự hỏi nếu nó có thể ngắn hơn nếu bạn sử dụng một vòng lặp thay vì jk.
Teun Pronk

@TeunPronk: haha, tôi chỉ thay đổi điều đó khi bình luận của bạn ping tôi
Kyle Kanos

1
Bạn có thể hạ nó xuống 157. Bạn không cần dấu phẩy sau mỗi số thứ 3. Đặt không gian phía trước O, xóa Okhỏi R, đặt một khoảng trắng vào Rvà thay thế Rbằng O,Rtrong của bạn io.write:)
Teun Pronk

1
@TeunPronk: Đã cập nhật. Cảm ơn bạn đã giúp đỡ!
Kyle Kanos

1
Bạn có thể lưu trữ io.writetrong một biến ( f=io.write) và giảm điều này hơn nữa
William Barbosa

8

Unicode - 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~

Hãy thử chúng tại http://cjam.aditsu.net/


Unico của bạn ... "Câu trả lời này đã được chỉnh sửa." Đưng bận tâm.
xem

8

Con trăn (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.")

7

Brainfuck - 680

kiểm tra nó ở đây: ideone.com/Wi9ftB

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

Như tôi đã hứa, đây là một phiên bản tốt hơn. bộ não của tôi cảm thấy như .. ooh vì vậy đó là nơi tên đến từ.

giải thích: (vì nó không thể nhầm lẫn và tôi không muốn quên cách nó hoạt động)

trước tiên bạn phải chọn bố cục dữ liệu tốt nhất cho thử thách này. Tôi đến với

-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

Chúng tôi phải tin rằng điều này là tối ưu trừ khi sẽ có quá nhiều ca (trường hợp bạn phải sắp xếp lại bố cục)

Sau đó, tôi đã sử dụng vòng lặp 4x9x3 để đặt các giá trị bắt đầu cho dòng mới, số, hai chữ cái viết thường và dấu phẩy. (tất cả các mã ascii nhỏ hơn có 4x9 = 36 và hai chữ cái viết thường có 4x9x3 = 108, sau đó tôi đã thêm và trừ một số để có giá trị thực của chúng)

Khi cài đặt sẵn được thực hiện, mã đi vào vòng lặp ngoài cùng có chu kỳ 3 lần. Tôi giải thích nó bằng mã giả.

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'

Khi phần này được thực hiện, tôi chỉ phải in dòng cuối cùng. Nhưng chúng ta có một chữ hoa W phải được tạo ra mà không sử dụng quá nhiều ký tự. Tại thời điểm này, chúng tôi đang ở đây:

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

vì vậy tôi đặt [-3] 4 lần vào [-1] và trừ 3 để lấy 87 (W): >[>>++++<<-]>>---.
sau đó xóa nó [-]
và di chuyển [-2] đến vị trí này [-1] để không gian sẽ gần với các chữ cái viết thường.<[>+<-]

Sau đó nó chỉ in các chữ cái. chữ thường số 1 dành cho phần dưới 97-107 và chữ thường số 2 dành cho khu vực trên.


2
+1 vì ngắn hơn 300 ký tự so với các câu trả lời BF khác
durron597

tôi đã suy nghĩ về việc đi thậm chí thấp hơn. điều kiện khủng khiếp để tạo ra mà không có một hướng dẫn phong nha (esolangs là xuống) nhưng nó có thể ngắn hơn bởi ~ 200 ký tự hơn
bebe

6

JavaScript, 111 107 ký tự, không sử dụng bất kỳ số nào.

Thực thi các đoạn mã này trong bảng điều khiển JS của trình duyệt của bạn:

107 (lấy cảm hứng từ http://xem.github.io/obfuscatweet/ cộng với câu trả lời JS khác):

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

111 (chỉ đóng gói tất cả các chuỗi và loại bỏ eval xung quanh):

unescape(escape('𜐬𘀲𛀠𜰠𫰧𨱬𫱣𪰬𘀴𘁯𙱣𫁯𨱫𘁲𫱣𪰬𒠵𛀠𝠬𘀷𘁯𙱣𫁯𨱫𛀠𞀠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𞐬𘀱𜀬𘀱𜐠𫰧𨱬𫱣𪰬𘀱𜠠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𥱥𙱲𩐠𩱯𫡮𨐠𬡯𨱫𘁡𬡯𭑮𩀠𭁨𩐠𨱬𫱣𪰠𭁯𫡩𩱨𭀮').replace(/uD./g,''))

4
có ai khác nhìn thấy một con rùa trong đó không ...? wtf
Dunno

hehe, yeah, các ký tự Unicode "ngẫu nhiên" được tạo bởi obfuscatweet đôi khi dẫn đến biểu tượng cảm xúc :)
xem

5

C - 145 - hãy thử tôi

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 - hãy thử tôi

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

1
Tôi không phải là một lập trình viên C, vì vậy hãy tha thứ cho tôi nếu tôi ngây thơ, nhưng bạn không cần #include <stdio.h>phải sử dụng printf?
Kyle Kanos

1
các thư viện mặc định được liên kết với nguồn trong vc ++ và gcc (vì vậy nếu bạn không cần thứ gì đó đặc biệt, bạn có thể tự do bắt đầu một thử thách chơi gôn bằng cách gõmain(){...
bebe

Ah tôi thấy. Thật kỳ lạ khi nó phát ra một cảnh báo nếu nó được chấp nhận theo mặc định (chỉ cần kiểm tra với gcc & icc của tôi, không có vc ++ để kiểm tra).
Kyle Kanos

nó cũng phun ra cảnh báo điểm thứ tự vì vậy ...- w :)
bebe

@Kyle bao gồm các tệp xác định cách thức hoạt động của các chức năng bên ngoài (kiểu trả về và tham số). Không có gì để làm với các thư viện liên kết. Một trình biên dịch C tiêu chuẩn sẽ chuyển bất kỳ tham số nào bạn muốn cho bất kỳ hàm nào (có cảnh báo) và các giá trị trả về thường bị bỏ qua, vì vậy nó vẫn hoạt động.
edc65

5

PHP - 125 129

Phiên bản 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";

Phiên bản 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";

Phiên bản sạch:

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

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

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.";}

Chỉnh sửa nỗ lực đầu tiên của tôi; nó đã hoạt động khi tôi lần đầu tiên thử nghiệm nó, nhưng đó dường như là một con sán; tăng sau trong một luồng là "hành vi không xác định" và nó đã làm những điều kỳ lạ (bao gồm cả sàng lọc màu xanh Windows 7!) khi tôi thử chạy lại nó. Tôi nghĩ rằng sử dụng printf thay vì std :: cout có thể được sử dụng với gia tăng sau để có được một chương trình ngắn hơn.

Chỉnh sửa một lần nữa, giảm xuống còn 231 bằng cách thực hiện lại vòng lặp. Đã chỉnh sửa một lần nữa, bây giờ xuống còn 203 ... những #defines đó không hữu ích trong phiên bản lặp.

Đối với những người thắc mắc làm thế nào C ++ có thể chạy một hàm "m", điểm vào có thể được định nghĩa là bất kỳ hàm nào chỉ với tùy chọn trình biên dịch, vì có thể đặt tất cả các func là stdcall; Tôi đã sử dụng cả hai công tắc khi biên dịch ở trên. Nếu bạn không thích điểm vào được xác định lại, hãy thêm 3 vào số ký tự của tôi.


Bạn đang sử dụng trình biên dịch nào? gcc (4.7.1) không cho phép tôi gọi hàm chính m(). Tuy nhiên, bạn có thể bỏ voidvà lưu 5 ký tự (hoặc 2 nếu bạn đặt tên cho phương thức main)
Christoph Böhmwalder

Làm thế nào trên trái đất nó đã nhận được bất kỳ upvote? đầu tiên bạn đã viết một hàm gọi là 'm' sẽ không biên dịch theo mặc định, thứ hai là mọi trình biên dịch hiển thị giờ theo thứ tự ngược lại. điều này cần một sự điều chỉnh BIG
bebe

1
@HackerCow Tôi dường như không thể làm cho VS2013 hoạt động mà không có loại trả về void được xác định; Có một chuyển đổi trình biên dịch sẽ cho phép điều đó?
Darren

1
@bebe Tôi giải thích điểm vào m () trong phần chỉnh sửa của mình; đối với số giờ đầu ra được in theo thứ tự ngược lại, tôi không bao giờ quản lý để sao chép nó, nhưng tôi đã quản lý để có được nó để in chính xác (lần đầu tiên tôi đã thử nó), sau đó thử lại tất cả 1, 5 và 12, sau đó trên một kiểm tra lại nó bị lỗi hệ điều hành. Vì vậy, về mặt kỹ thuật, nó đã chạy một lần, nhưng dựa vào hành vi không xác định có lẽ là một 'ý tưởng tồi', vì vậy tôi đã viết lại nó :)
Darren

1
@bebe Tôi cũng tuyệt Tôi sẽ không "chiến thắng" bất kỳ câu đố golf mã nào với C ++, vì vậy việc thêm 3 ký tự không phải là vấn đề lớn. Tôi đồng ý rằng các định nghĩa macro chuyển đổi -D sẽ gian lận, nhưng hầu như bất kỳ cờ trình biên dịch nào khác có vẻ hợp pháp đối với tôi, vì chúng cũng có vẻ hợp pháp đối với những người trong chuỗi mà bạn liên kết. Bất kỳ lợi thế nào bạn vắt kiệt từ các trình chuyển đổi trình biên dịch đơn giản sẽ không chính xác ngay cả sân chơi giữa C ++ và Python / Bash / Perl, v.v.
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.")

3

Java, 228

Một giải pháp mã hóa cứng có lẽ sẽ ngắn hơn.

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

3
+1 để nhận ra rằng mã hóa cứng sẽ ngắn hơn.
Kyle Kanos

1+1+1ngắn hơn 9 ký tự "two".length()". Và có String[] acần thiết không?
Kyle Kanos

Điều đó cảm thấy giống như gian lận, và vâng, String [] a là cần thiết.
Không được bảo vệ vào

Không phải là gian lận, một số người đã sử dụng nó: D
Kyle Kanos

3

Befunge-98 ( 402 268)

Bây giờ là một bất bại!

".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,@

1
Bit ngẫu nhiên của các văn bản lạc hậu, ,,:,1+, a11+/a*b1111+++-+w:,, nhân vật đi lạc bên dưới dòng chính của mã ... điển hình Befunge. Hầu hết các thông dịch viên trực tuyến đang gặp vấn đề với độ dài dòng (vượt quá giới hạn), bạn có biết một trong những thông dịch viên không quan tâm?

Tôi không thể tìm thấy bất kỳ trình biên dịch Befunge-98 nào trên mạng, nhưng bạn có thể sử dụng pyfunge có sẵn trong PyPI.
waylon531

3

Groovy - 140 139 ký tự

Chơi gôn, bị ảnh hưởng bởi câu trả lời của 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"

Ung dung:

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"

2

Toán học - 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++]]

+1, tôi nghĩ đây là chiến lược tốt nhất nhưng nó có thể ngắn hơn .

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

1
Trừ khi toán học của tôi hút, sử dụng P(", ")thay cho Qbạn tiết kiệm 2 ký tự.
Kyle Kanos

2
NRchỉ xuất hiện một lần: tốt hơn là nội tuyến chúng hơn là tạo macro.

Sử dụng các ý kiến ​​trên và hơn thế nữa, điều này có thể được cô đọng thành 200 (ngay cả với bao gồm và không gian tên trình biên dịch của tôi muốn):#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 ký tự

Đây là một chương trình hoàn chỉnh, chịu ảnh hưởng của câu trả lời của William Barbosa .

Chơi gôn

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

Ung dung:

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

2

ECMAScript6 - 136 135

Thậm chí không sử dụng 1chữ số được phép :

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

Đã thử nghiệm trong bảng điều khiển Firefox.


hoặc 114 ký tự bằng cách sử dụng xem.github.io/obfuscatweet ;)
xem

4
@xem, tôi biết nó phù hợp với thư pháp luật, nhưng tôi không phải là người thích nén Unicode (hoặc bất kỳ trình biên dịch / trình tạo nào khác). Trong suy nghĩ của tôi, golf là một bài kiểm tra kỹ năng và tất cả các mã nên được làm thủ công ... nhưng đó chỉ là tôi.
Alconja

2

PowerShell, 123 118 109

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

Sau một khởi đầu khủng khiếp (167) Tôi đã thoát khỏi một vài thành ngữ mà tôi thậm chí không cần và ít nhất là nó ngắn hơn tham chiếu.


2

Haskell - 138 137 ký tự

Là một chương trình độc lập:

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."

Chỉnh sửa: Tôi đã từng có một hàm trợ giúp o được sử dụng để xác định s bởi

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

nhưng hóa ra chi phí thêm 1 ký tự. Có cách nào để nén tất cả "o'clock" s / "rock" s / "ock" s không?


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)

Tôi tạo một chuỗi như "x, x, x o'clock x o'clock rock, \ n ..." Sau đó, tôi thay thế "x's" bằng các số.


1

PHP 150

Không có số nào, kể cả số 11 không phải là số 1 bị mắc kẹt với nhau, nhưng giá trị số là mười một.

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";

Nó thiếu dấu chấm hết.
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."

Ung dung:

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

Bạn có thể giảm xuống 127 bằng cách sử dụng $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'trong vòng lặp.
Joey

@ Thật vậy, cảm ơn vì lời khuyên!
DarkAjax

1

Rắn hổ mang - 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"
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.