Рок круглосуточно


46

Как можно меньше символов Юникода выведите следующее (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
Я их сейчас удалил
адитсу

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 состоит из двух единиц, позволяет мне принять правила, которые я предполагаю.

объяснение

K +++ s равно (k ++) + s, поэтому он сначала добавляет k к x, затем увеличивает k, а затем добавляет s к x. Этот процесс будет выполнен три раза, прежде чем он добавит последнее предложение.


Почему ты {} ? Пока не нужно, у вас всего 1 инструкция. Но как вы должны использовать ";" Вы выиграете только 1 символ. ^^
Антуан Эстев

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

Brainfuck (1574)

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

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

Можно проверить здесь .


12
Ответы Brainfuck всегда заслуживают уважения.
Pharap

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=-~1inline, вы можете использовать "..."*-~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+1значения ASCII теперь 0, 1 и 2, поэтому я могу использовать их для получения соответствующего элемента массива. Поскольку 2 находится вне массива, оператор «короткого замыкания» выполняет ||оценку ++$i. В первом матче $iбудет undefтак приращением его я получаю 1, то 2 и так далее ...

Простыми словами. Это заменяет *его текущее вхождение, (на «часы» и )«рок».


1
Имеет ли. Не. Compute. Пояснения пожалуйста?
Seequ

1
Добавлено @TheRare Объяснение;)
core1024

6
Это черная магия. +1
seequ

Это та вещь, для которой был создан Perl, неудивительно, что она так хорошо работает.
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

Версия 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

@manatwork Ой, хороший улов - я не знаю, как этот пробрался туда. Спасибо!
Цифровая травма

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

@ core1024 Нет причин, кроме меня, забыв о возможности ;-) Спасибо за совет!
Цифровая травма

1
К сожалению, не считал $rс!
Шахбаз

13

Brainfuck, 1299

Блюууург . Это было ужасно Я не знаю, почему я это сделал, с самого начала это казалось довольно простым делом. Первый и, вероятно, последний сценарий Brainfuck. Попробуй это здесь.

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

Вывод не завершен новой строкой.

Я мог бы добавить немного объяснений позже. По сути, любая длинная строка, которая не является чем-то вроде >>>>>>>или <<<<<<<или >>.>>.>>.>>.генерирует персонажа или серию из них.

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

10

Луа - 217 164 154 151 149 143

Модифицировал старый, чтобы вместо него использовать цикл, сохраняя загрузку символов. Спасибо TeunPronk за помощь в бритье еще 10 персонажей и WilliamBarbosa за то, что они сбрили еще 3 персонажа. Еще 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.")

Ungolfed,

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. Вам не нужно запятую после каждого третьего числа. Поместите пространство линии всасывания 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

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

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 (W): >[>>++++<<-]>>---.
затем сотри его [-]
и перемести [-2] в это место [-1], чтобы пробел был близок к строчным буквам.<[>+<-]

После этого он просто печатает буквы. строчная # 1 для нижней части 97-107 и строчная № 2 для вышеуказанной области.


2
+1 за то, что на 300 символов короче других ответов BF
durron597

я думал о том, чтобы пойти еще ниже. условия ужасны для создания без приличного учебника (esolangs не работает), но он может быть короче на ~ 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
знаю

хе-хе, да, "случайные" символы Юникода, генерируемые obfuscatweet, иногда приводят к смайликам :)
xem

5

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

C - 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-файлы определяют, как работают внешние функции (тип возвращаемого значения и параметры). Ничего общего с подключением библиотек. Стандартный компилятор 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

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

С ++ 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 работать без определенного типа возврата void; есть ли переключатель компилятора, который позволил бы это?
Даррен

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)

Теперь unefunge!

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

Ungolfed:

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

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++]]

+1, я думаю, что это лучшая стратегия, но она может быть короче .

2

С ++ 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 и name, которые нужны моему компилятору):#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 символа

Это полная программа бега, под влиянием ответа Уильяма Барбозы .

Golfed:

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

Ungolfed:

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=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)

Я делаю строку типа «х, х, х часов х рок, \ n ...» Затем я заменяю «х» на цифры.


1

PHP 150

Никаких чисел, включая 11, которые не были бы двумя слипшимися, но числовое значение одиннадцать.

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

Он пропускает конечную остановку.
Джои

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

Ungolfed:

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', 'цикла.
Джои

@ Да, действительно, спасибо за совет!
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.