Скеля навколо годинника


46

Щонайменше символів Unicode надрукуйте наступне (144 символи):

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.

Ви не повинні використовувати будь-які цифри у своєму коді, крім цифри 1.


1
У кінці перших 3 рядків є пробіли, чи вважаються вони?
aditsu

@aditsu: Це пов’язано з редагуванням, оскільки m.buettner забув видалити їх під час редагування назад до блоку коду. Я б змінив це, але редакція вважається занадто незначною.
Wrzlprmft

1
Я видалив їх зараз
aditsu

4
Використовується кілька відповідей 11. Чи означає, що інструкція може використовувати лише число 1 або цифру 1?
mfvonh

10
@mfvonh Я сказав, що ти можеш використовувати 1. Я не уточнював, скільки разів, тому факт, що люди використовували, 11- це розумна лазівка, і я все за це.
rybo111

Відповіді:


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

Те, що 11 зроблено з двох 1, дозволить мені прийняти правила, які я думаю.

Пояснення

K +++ s дорівнює (k ++) + s, тому він додає k спочатку до x, потім збільшення кроків k, а потім додає s до x. Цей процес буде здійснено три рази, перш ніж він додасть останнє речення.


Чому ви {} ? Поки це не потрібно, у вас є лише 1 інструкція. Але як вам доведеться використовувати ";" ви виграєте лише 1 char. ^^
Антуан Естев

3
Що робить k+++s? Це (k++) + sчи k + (++s)чи (k++) + (++s)?
seequ

31
+1 за цю нісенітницю:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher

2
@trlkly, як правило, для гольфу в JS ви повинні використовувати вихідний оператор і alertвін коротший, ніж console.log. Використання автоматичного відображення останнього обчислення в консолі - це як обман.
edc65

15
Ви впевнені, що це не Brainfuck?
Майкл Хемптон

37

C # - 186

Краща мова гольфу чи найкраща мова гольфу?

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

Цікаво, чому вона також набрала стільки голосів. Людям подобаються мови, які не є гольф-мовами, можливо
Вільям Барбоса

7
Він надихнув мене це зробити на C ++, тому він отримує голос. Справжні чоловіки (тм) не використовують шумні мови для інтерпретації коду!
Даррен

вам не потрібні пробіли в i++ +бітах
DLeh

Я написав це на dotnetfiddle, і він не компілювався без пробілів. Дякуємо, що вказали на це.
Вільям Барбоса

Ви можете поголити ще пару, виконуючи WriteLine-> Writeі використовуючи буквал \nв кінці рядка.
Alconja

27

Мозговий ебать (1574)

Несерйозне подання, але дотримується правил.

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

Можна протестувати тут .


12
Відповіді Brainfuck завжди заслуговують на повагу.
Фарап

1
Можливо, ми повинні дати йому нагороду "найдовшої відповіді"? #RESPECT
Джеймі

23

Рубі, 100

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

4
Ви можете зберегти ще кілька символів s="%i, %i#{", %i o'clock"*-~1} rock,\n"(замінити \nбуквальним рядком). Чудова ідея для використання $$!
Вентеро

3
Розширення на мій попередній коментар: Якщо ви призначите r=-~1вбудований текст, ви можете використовувати "..."*-~rзамість цього s+s+s, що дозволяє вам скинути завдання на 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

Звичайний вираз відповідає (, )і *. Я використав той факт, що код ASCII (становить 40, з )41 і *становить 42.

rПрапор регулярного виразу дозволяє «на місці заміщення» і eпрапор дозволяє оцінити код (подібний x.replace(/.../, function(m){...})в JavaScript).

(clock,rock)це масив з двох "голих слів". $&є поточним збігом регулярного виразу і ord$&це значення ASCII.

Замасковані 3 або 1+1+1ASCII значення тепер 0, 1 і 2, тому я можу використовувати їх для отримання відповідного елемента масиву. Оскільки 2 є поза масивом, оператор "короткого замикання" ||оцінює ++$i. У першому поєдинку $iце undefтак збільшується, я отримую 1, потім 2 і так далі ...

Простими словами. Це замінює *його поточне виникнення, ("годинник" і )"рок".


1
Чи. Ні. Обчислити. Пояснення будь ласка?
seequ

1
@TheRare додано пояснення;)
core1024

6
Це чорна магія. +1
seequ

Це та річ, для якої був зроблений Перл, не дивно, що це робить так добре.
Фарап

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

Версія Unicode, кодована base64 (у випадку, якщо візуалізація Unicode зіпсується):

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, оскільки крапка з комою після завершення декларації функції не потрібна.
манатура

@manatwork На жаль, хороший улов - я не знаю, як це заїхало там. Дякую!
Цифрова травма

1
Я на Windows , в даний час, але в чому причина , щоб використовувати evalзамість pipeing до bashабо sh?
core1024

@ core1024 Ні за що, крім того, що я забула можливість ;-) Дякую за пораду!
Цифрова травма

1
На жаль, не рахував $rs!
Шахбаз

13

Brainfuck, 1299 рік

Bleuuuurgh . Це було жахливо. Я не знаю, чому я це зробив, на початку це здавалося досить легко. Перший і, мабуть, останній сценарій Brainfuck. Спробуйте тут.

За допомогою автоматизованого генератора коду я зміг написати сценарій, який повторно використовував більшість символів, а не генерував кожного з нуля. Це лише 275 символів коротше, ніж автоматично створений, розміщений тут .

Вихід не закінчується новим рядком.

Я можу трохи пізніше пояснити. За суті, будь-яка довга лінія , яка не є чимось - щось на зразок >>>>>>>або <<<<<<<чи >>.>>.>>.>>.генерує символ або ряд з них.

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

10

Луа - 217 164 154 151 149 143

Модифікований старий, щоб замість цього використовувати цикл, зберігає човен із символів. Дякую TeunPronk за те, що він допомагав мені відголити ще 10 персонажів, а також WilliamBarbosa за гоління ще трьох персонажів. Ще 2 символи можна зберегти за допомогою змінної k. Ще 6 символів зберігаються, усуваючи змінну, r=" rock,"оскільки вона використовується один раз.

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

Безумовно,

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

Цікаво, чи може це бути коротше, якщо ви використовуєте цикл замість jі k.
Теун Пронк

@TeunPronk: ха-ха, я просто змінив це, коли ваш коментар мене
пінгував

1
Ви можете збити її до 157. Кома вам не потрібна після кожного 3-го числа. Помістіть простір лінії всмоктування O, видаліть Oз Rпомістіть простір Rі замінити Rна O,Rвашій io.write:)
Тен Пронк

1
@TeunPronk: оновлено. Спасибі за вашу допомогу!
Кайл Канос

1
Ви можете зберігати io.writeзмінну ( f=io.write) та зменшувати це ще більше
Вільям Барбоса

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~

Спробуйте їх на http://cjam.aditsu.net/


Ваш Unico ... "Ця відповідь відредагована". О, ніколи не пам'ятаю.
seequ

8

Пітон (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

протестуйте його тут: ideone.com/Wi9ftB

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

як я пообіцяв, ось краща версія. мій мозок відчуває себе .. ой, так ось звідки походить назва.

пояснення: (адже це неможливо досягти, і я не хочу забувати, як це працює)

по-перше, ви повинні вибрати найкращий макет даних для цього завдання. я придумав

-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

Ми маємо вірити, що це оптимально, якщо не буде занадто багато зрушень (у цьому випадку вам доведеться переставити макет)

Після цього я використав цикл 4x9x3, щоб встановити початкові значення для нового рядка, числа, двох малих літер та коми. (усі менші коди ascii отримали 4x9 = 36, а дві малі літери отримали 4x9x3 = 108, потім я додав і відніс деякі, щоб отримати їх реальне значення)

Коли попередньо встановлено налаштування, код надходить у найвищий цикл, який циклізує 3 рази. Я пояснюю це псевдокодом.

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'

Коли цей розділ виконано, я просто повинен надрукувати останній рядок. Але у нас є великий регістр W, який потрібно створити, не використовуючи занадто багато символів. На даний момент ми тут:

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

тож я поставив [-3] 4 рази на [-1] і підсумок 3, щоб отримати 87 (Вт): >[>>++++<<-]>>---.
потім стерти його [-]
та перемістити [-2] до цього місця [-1], щоб простір був близьким до малих літер.<[>+<-]

Після цього він просто роздруковує листи. Малий регістр №1 призначений для нижньої частини 97-107, а нижній регістр №2 - для вищевказаного регіону.


2
+1 за те, що він на 300 символів коротший за інші відповіді BF
durron597

я думав про те, щоб піти ще нижче. умови жахливі для створення без гідного підручника (езоланг знижений), але він може бути коротшим на ~ 200 символів більше
bebe

6

JavaScript, 111 107 символів, не використовуючи жодного числа.

Виконайте ці фрагменти на консолі JS веб-переглядача:

107 (натхненний http://xem.github.io/obfuscatweet/ плюс інша відповідь JS):

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

111 (просто упаковуючи всю рядок і видаляючи eval навколо):

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

4
хтось там бачив черепаху ...? wtf
Dunno

Так, так, "випадкові" символи Unicode, породжені obfuscatweet, іноді призводять до емоджи :)
xem

5

С - 145 - спробуйте

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

С - 172 - спробуйте

#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
Я не дуже програміст на С, тому вибачте мене, якщо я наївний, але чи не потрібно #include <stdio.h>вам користуватися printf?
Кайл Канос

1
Бібліотеки за замовчуванням пов'язані з джерелом в vc ++ та gcc (тому якщо вам не потрібно щось особливе, ви можете вільно розпочати виклик з гольфу, набравшиmain(){...
bebe

А, бачу. Це дивно, що воно виписує попередження, якщо воно прийняте за замовчуванням (просто перевірено моїм gcc & icc, не перевіряти vc ++).
Кайл Канос

він також плює попередження про точку послідовності, так що ...- w :)
bebe

@Kyle include files визначає, як працюють зовнішні функції (тип повернення та параметри). Нічого спільного з зв'язуванням бібліотек. Стандартний компілятор C передасть будь-які параметри будь-якої функції (з попередженнями), а значення повернення часто ігноруються, тому він все одно працює.
edc65

5

PHP - 125 129

Версія 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";

Версія 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";

Чиста версія:

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

5

Перл, 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.";}

Відредагував мою першу спробу; це спрацювало, коли я його вперше випробував, але це, здається, є флюком; пост-збільшення в потоці - це "невизначена поведінка", і це робило дивні речі (включаючи синій скринінг Windows 7!), коли я спробував повторно запустити його. Я думаю, що використання printf замість std :: cout може використовуватися з пост-інкрементом для отримання коротшої програми.

Відредагований знову, зменшив його до 231 шляхом повторної реалізації циклу. Відредаговано ще раз, тепер уже до 203 ... ці #defines були не всі корисні у циклічній версії.

Для тих, хто цікавиться, як C ++ може запускати функцію "m", точку входу можна визначити як будь-яку функцію лише з опцією компілятора, як і встановлення всіх функцій stdcall; Я використовував обидва перемикачі при складанні вищевказаного. Якщо вам не подобається перероблена точка входу, додайте 3 до моєї кількості символів.


Який компілятор ви використовуєте? gcc (4.7.1) не дозволяє мені викликати основну функцію m(). Однак ви можете скинути voidта зберегти 5 символів (або 2, якщо ви main
назвете

як на землі він отримав якісь оновлення? по-перше, ви написали функцію "m", яка не буде компілюватися за замовчуванням, по-друге, кожен компілятор показує години у зворотному порядку. для цього потрібна велика корекція
bebe

1
@HackerCow Я, здається, не можу змусити VS2013 працювати без визначеного типу повернення недійсності; чи є перемикач компілятора, який би це дозволив?
Даррен

1
@bebe Я пояснюю точку входу m () у своїй редакції; що стосується вихідних годин, що друкуються у зворотному порядку, мені ніколи не вдалося це дублювати, але мені вдалося змусити його друкувати правильно (перший раз, коли я його спробував), потім на повторному тестуванні всіх 1, 5 і 12, потім на іншому повторне тестування це аварія ОС. Так, технічно він пробіг один раз, але покладатися на невизначену поведінку - це, мабуть, «погана ідея», тому я переписав це :)
Даррен

1
@bebe я крутий в будь-якому випадку; я ні в якому разі не збираюся "виграти" будь-яку головоломку з кодом за допомогою C ++, тому додавання 3 символів не є великим. Я погоджуюся, що визначення макрокомандних перемикачів -D було б обманом, але майже будь-які інші прапори компілятора здаються мені законними, оскільки вони також здавались легітимним людям у потоці, яку ви пов’язали. Будь-яка перевага, яку ви стискаєте з простих перемикачів компілятора, не буде точно навіть ігровим полем між C ++ та Python / Bash / Perl тощо
Даррен,

4

Швидкий - 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

Ява, 228

Рішення з твердим кодом, можливо, було б коротшим.

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 для усвідомлення того, що жорстке кодування буде коротшим.
Кайл Канос

1+1+1на 9 символів коротший за "two".length()". А чи String[] aпотрібно?
Кайл Канос

Це щось відчувало як обман, і так, String [] a є необхідним.
Недосвідчений

Це не обман, кілька людей користувалися ним: D
Кайл Канос

3

Befunge-98 ( 402 268)

Тепер відключення!

".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
Випадкові біти зворотного тексту ,,:,1+, a11+/a*b1111+++-+w:,бездомні символів під основну рядок коди ... типовий Befunge. У більшості онлайн-перекладачів виникають проблеми з довжиною лінії (це вже більше межі), чи знаєте ви одного, який не проти?

Я не зміг знайти в Інтернеті жодного компілятора Befunge-98, але ви можете використовувати pyfunge, який доступний у PyPI.
waylon531

3

Groovy - 140 139 символів

Гольф, під впливом відповіді Вільяма Барбоси :

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"

Безголівки:

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

Математика - 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, я думаю, що це найкраща стратегія, але вона може бути коротшою .

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
Якщо моя математика не смокче, використання P(", ")замість Qвас економить 2 символи.
Кайл Канос

2
Nі Rз’являються лише один раз: краще було б вбудувати їх, ніж зробити макрос.

Використовуючи вищезазначені коментарі та інше, це може бути скорочено до 200 (навіть із включенням та просторами імен, який хоче мій компілятор):#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.";}
Хаген фон Ейтцен

2

Java (v2) - 250 241 232 символів

Це повна запущена програма, під впливом відповіді Вільяма Барбоси .

Гольф:

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

Безголівки:

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

Навіть не використовується дозволена 1цифра:

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

Тестовано на консолі Firefox.


або 114 символів за допомогою xem.github.io/obfuscatweet ;)
xem

4
@xem, я знаю, що це відповідає букві закону, але я не прихильник стиснення Unicode (або будь-яких інших компіляторів / генераторів). На мою думку, гольф - це тест на майстерність, і весь код повинен бути зроблений вручну ... але це тільки я.
Alconja

2

PowerShell, 123 118 109

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

Після жахливого початку (167) я позбувся кількох ідіом, які мені навіть не потрібні, і, принаймні, отримали його коротше, ніж посилання.


2

Haskell - 138 137 символів

Як окрема програма:

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

Редагувати: У мене була функція помічника o, яку використовували для визначення s

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

але, виявляється, це коштувало 1 додатковий символ. Чи є якийсь спосіб стиснути всі "години" с / "рок" с / "ок"?


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)

Я роблю рядок на кшталт "x, x, x hour x hour rock, \ n ..." Потім замінюю "x" цифрами.


1

PHP 150

Жодних чисел, у тому числі 11, які не були б двома 1, зчепленими разом, але значення числа одинадцять.

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

У ньому відсутня кінцева повна зупинка.
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."

Безголівки:

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

Ви можете зменшити його до 127, використовуючи $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'всередині циклу.
Joey

@ Јοeу Дійсно, дякую за пораду!
DarkAjax

1

Кобра - 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.