Rock ininterruptamente

46

No menor número de caracteres Unicode possível, imprima o seguinte (144 caracteres):

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.

Você não deve usar nenhum número no seu código, exceto o dígito 1.

rybo111
fonte
1
Existem espaços no final das 3 primeiras linhas, isso conta?
Aditsu 17/07/2014
@aditsu: Isso ocorre devido à edição, pois o m.buettner esqueceu de removê-los ao editar novamente em um bloco de código. Eu alteraria isso, mas a edição é considerada muito pequena.
Wrzlprmft
1
Eu os removi agora
aditsu 17/07/2014
4
Várias respostas usam 11. A instrução significa que você só pode usar o número 1 ou o dígito 1?
Mfvonh 17/07/2014
10
@mfvonh eu disse que você poderia usar 1. Não especifiquei quantas vezes, então o fato de as pessoas terem usado 11é uma brecha inteligente, e sou a favor disso.
precisa

Respostas:

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

O fato de que 11 é feito de dois 1s deixa eu passar as regras, eu acho.

Explicação

O k +++ s é igual a (k ++) + s, portanto, ele adiciona k primeiro a x, depois incrementa k e depois adiciona s a x. Este processo será realizado três vezes antes de adicionar a última frase.

Izlin
fonte
Por que você {} ? Não é necessário por enquanto, você tem apenas 1 instrução. Mas como você tem que usar ";" você ganhará apenas 1 char. ^^
Antoine Esteve
3
O que k+++sfaz? É (k++) + sou k + (++s)ou (k++) + (++s)?
see
31
+1 para este absurdo:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher 17/07
2
@trlkly geralmente jogando golfe em JS, você precisa usar uma declaração de saída e alerté menor que console.log. Usar a exibição automática do último cálculo no console é como trapacear.
edc65
15
Tem certeza de que não é Brainfuck?
Michael Hampton
37

C # - 186

Melhor idioma de golfe ou melhor idioma de golfe?

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
fonte
Eu me pergunto por que ganhou tantos votos também. As pessoas gostam de entradas que não sejam amigáveis ​​ao golfe, talvez
William Barbosa
7
Ele me inspirou a fazê-lo em C ++, então ele recebe um voto. O Real Men (tm) não usa linguagens interpretadas para o código do golfe!
Darren
você não precisa realmente os espaços nos i++ +pedaços
DLeh
Eu escrevi no dotnetfiddle e não foi compilado sem os espaços. Obrigado por apontar.
William Barbosa
Você pode raspar mais alguns fazendo WriteLine-> Writee usando um literal \nno final da string.
Alconja
27

Brainfuck (1574)

Não é um envio sério, mas segue as regras.

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

Pode ser testado aqui .

BrunoJ
fonte
12
As respostas de Brainfuck sempre merecem respeito.
Pharap
1
Talvez devêssemos dar a ele o prêmio de "resposta mais longa"? #RESPECT
21314 Jamie
23

Ruby, 100

printf"%i, %i#{", %i o'clock"*r=-~1} rock,
"*-~r+"We're gonna rock around the clock tonight.",*1..$$
histocrata
fonte
4
Você pode salvar outros poucos caracteres com s="%i, %i#{", %i o'clock"*-~1} rock,\n"(substitua-o \npor uma quebra de linha literal). Ótima idéia para usar $$!
Ventero 17/07/2014
3
Expandindo meu comentário anterior: se você atribuir r=-~1in-line, poderá usar em "..."*-~rvez de s+s+s, permitindo que você largue a tarefa s.
Ventero 17/07/2014
Muito bom, fará essas edições.
Histocrat 17/07/2014
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

A expressão regular corresponde a (, )e *. Eu usei o fato de que o código ASCII (é 40, )é 41 e *42.

O rsinalizador da expressão regular ativa "substituição no local" e o esinalizador permite a avaliação do código (semelhante ao x.replace(/.../, function(m){...})JavaScript).

(clock,rock)é uma matriz de duas "palavras simples". $&é a correspondência atual da expressão regular e ord$&é seu valor ASCII.

Mascarados por 3 ou 1+1+1os valores ASCII agora são 0, 1 e 2, para que eu possa usá-los para recuperar o elemento da matriz correspondente. Como 2 está fora da matriz, o operador "curto-circuito" ||avalia ++$i. Na primeira partida $ié undeftão incremental que recebo 1, depois 2 e assim por diante ...

Em palavras simples. Isso substitui *a ocorrência atual, (por "clock" e )por "rock".

core1024
fonte
1
Faz. Não. Calcular. Explicação, por favor?
see
1
@TheRare Explanation added;)
core1024
6
É magia negra. +1
ver
Esse é o tipo de coisa para a qual o Perl foi criado, sem surpresa que ele se sai tão bem.
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

versão Unicode codificada em base64 (caso as renderizações unicode sejam confusas):

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
fonte
2
120, pois o ponto-e-vírgula após a chave de fechamento da declaração de função não é necessário.
manatwork
@manatwork Opa boa captura - eu não sei como essa se esgueirou lá. Obrigado!
Digital Trauma
1
Estou no Windows agora, mas qual é o motivo para usar em evalvez de canalizar para bashou sh?
core1024
@ core1024 Não há outra razão além de eu esquecer a possibilidade ;-) Obrigado pela dica!
Digital Trauma
1
Ops, não contei os $r!
Shahbaz
13

Brainfuck, 1299

Bleuuuurgh . Foi terrivel. Não sei por que fiz isso, parecia bem fácil no começo. Primeiro e provavelmente último script Brainfuck. Experimente aqui.

Com alguma ajuda de um gerador de código automatizado , consegui escrever um script que reutilizou a maioria dos caracteres em vez de gerar cada um a partir do zero. É apenas 275 caracteres menor que o gerado automaticamente, publicado aqui .

A saída não é terminada por nova linha.

Eu poderia colocar um pouco de explicação mais tarde. Essencialmente, qualquer longa linha que não é algo como >>>>>>>ou <<<<<<<ou >>.>>.>>.>>.gera um personagem ou uma série delas.

-[----->+<]>--.
>
++[------>+<]>+.------------.
[-]<<+.>
++[------>+<]>+.------------.
[-]<<+.>
++++[->++++++++<]>.
>
+[------->++<]>+.
>
+[------->+++<]>++.
>
--[----->+<]>---.
>
+[------->++<]>--.
>
+[------->++<]>+.
>
--[----->+<]>---.
>
+[----->+++<]>++++.
>
++[------>+<]>+.
>
++++[->++++++++<]>.
<<<<<<<<<<<<<<<<<<<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>>>.
>
+[--------->++<]>.
>
+[------->++<]>+.
>
--[----->+<]>---.
>
+[----->+++<]>++++.
<<<<<<<<<<.
<++++++++++.
<<<<<<<<<<
<<<<<<<
+.
>>>>>>>>>>
>>>>>>>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>>>>>>>>>
>>>>>>>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>>>.
>>.>>.>>.>>.
<<<<<<<<<<.
<.
<<<<<<<<<
<<<<<<<<
+.[-]<
++[------>+<]>+.
>>.
[-]<<[-]<
-[----->+<]>--.-.
[-]<
++[------>+<]>+.------------.
[-]<
-[----->+<]>--..
>
++++[->++++++++<]>.
>>.>>.>>.>>.>>.>>.>>.>>.>>.
>>>>>>>>>
-[----->+<]>--.+.
<<<<<<<<<
<<<<<<<<<
<<<<<<<<<
<.
>>.>>.>>.>>.>>.>>.>>.
>>>>.
>>.>>.>>.>>.
>>[-]
++[------>+<]>+.>++++++++++.
>
+[--->++<]>+.++[->++++<]>+.---[->+++<]>+.-[->+++<]>.-------------.--[--->+<]>-.++[->+++<]>+.++++++++.-..-------------.
<<<<<<<<<<
<<<<<<<<<.
>>.>>.>>.>>.
<<[-]<<[-]<<[-]<<.
>
--[----->+<]>-----.--[--->+<]>---.---.++++++.-------.----------.
[-]<<<.
>
--------[-->+++<]>.------------.---.
<<.
<<<<<<<<<<
<<.
>>.>>.>>.>>.
>>>>.
>>[-]
--------[-->+++<]>.-----.-.-----.--.+.++++++++++++.[++>---<]>.
Comunidade
fonte
10

Lua - 217 164 154 151 149 149 143

Modificado o antigo para usar um loop, economiza uma carga de caracteres de barco. Agradeço a TeunPronk por me ajudar a cortar outros 10 caracteres e a WilliamBarbosa por me cortar outros 3 caracteres. Mais 2 caracteres pode ser salvo utilizando a variável k. Mais 6 caracteres são salvos, eliminando a variável, r=" rock,"pois ela é usada uma vez.

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.")
Kyle Kanos
fonte
Gostaria de saber se pode ser mais curto se você usar um loop em vez de je k.
Teun Pronk
@TeunPronk: haha, eu estava apenas mudando isso quando seu comentário me deu um ping
Kyle Kanos
1
Você pode reduzi-lo para 157. Você não precisa da vírgula após cada terceiro número. Coloque a frente do espaço de O, remova Oa partir R, coloque um espaço no Re substituir Rpor O,Rsua io.write:)
Teun Pronk
1
@TeunPronk: Atualizado. Obrigado pela ajuda!
precisa
1
Você pode armazenar io.writeem uma variável ( f=io.write) e reduzir ainda mais longe
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~

Experimente-os em http://cjam.aditsu.net/

aditsu
fonte
Seu unico ... "Esta resposta foi editada." Oh, deixa pra lá.
see
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
fonte
7

Brainfuck - 680

teste aqui: ideone.com/Wi9ftB

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

como prometi, aqui está uma versão melhor. meu cérebro parece ... ooh, então é daí que o nome vem.

explicação: (porque é impossível de manter e não quero esquecer como funciona)

primeiro, você deve escolher o melhor layout de dados para esse desafio. eu vim com

-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

Temos que acreditar que isso é ideal, a menos que haja muitos turnos (nesse caso, você precisará reorganizar o layout)

Depois disso, usei um loop 4x9x3 para definir os valores iniciais para nova linha, número, as duas letras minúsculas e a vírgula. (todos os códigos ASCII menores têm 4x9 = 36 e as duas letras minúsculas têm 4x9x3 = 108, então adicionei e subtraí algumas para obter seu valor real)

Quando a predefinição é concluída, o código entra no loop mais externo que é executado 3 vezes. Eu explico por pseudocódigo.

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'

Quando esta seção estiver concluída, basta imprimir a última linha. Mas temos um W maiúsculo que deve ser produzido sem usar muitos caracteres. Neste ponto, estamos aqui:

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

então eu coloquei [-3] 4 vezes para [-1] e subtraia 3 para obter 87 (W): >[>>++++<<-]>>---.
apague-o [-]
e mova-o [-2] para este local [-1] para que o espaço fique próximo das letras minúsculas.<[>+<-]

Depois disso, apenas imprime as letras. letras minúsculas nº 1 são para a parte inferior 97-107 e letras minúsculas nº 2 são para a região acima.

bebe
fonte
2
+1 por ser 300 caracteres mais curtas do que as outras respostas BF
durron597
eu estava pensando em ir ainda mais baixo. condições são terríveis para criar sem um tutorial decente (esolangs está em baixo), mas pode ser mais curto por ~ 200 caracteres mais
bebe
6

JavaScript, 111 107 caracteres, sem usar nenhum número.

Execute estes trechos no console JS do seu navegador:

107 (inspirado em http://xem.github.io/obfuscatweet/ mais a outra resposta do JS):

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

111 (apenas empacotando toda a corda e removendo a avaliação):

unescape(escape('𜐬𘀲𛀠𜰠𫰧𨱬𫱣𪰬𘀴𘁯𙱣𫁯𨱫𘁲𫱣𪰬𒠵𛀠𝠬𘀷𘁯𙱣𫁯𨱫𛀠𞀠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𞐬𘀱𜀬𘀱𜐠𫰧𨱬𫱣𪰬𘀱𜠠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𥱥𙱲𩐠𩱯𫡮𨐠𬡯𨱫𘁡𬡯𭑮𩀠𭁨𩐠𨱬𫱣𪰠𭁯𫡩𩱨𭀮').replace(/uD./g,''))
xem
fonte
4
mais alguém vê uma tartaruga lá ...? wtf
Não sei
hehe, sim, os "aleatórios" caracteres Unicode gerados por obfuscatweet vezes, levar a emoji :)
xem
5

C - 145 - tente-me

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 - tente-me

#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
fonte
1
Eu não sou muito programador C, então me perdoe se estou sendo ingênuo, mas você não precisa #include <stdio.h>usar printf?
Kyle Kanos
1
bibliotecas padrão estão ligados à fonte em vc ++ e gcc (por isso, se você não precisa de algo especial, você pode começar livremente um desafio golfe de digitaçãomain(){...
bebe
Ah entendo. É estranho que ele emita um aviso se for aceito por padrão (verifiquei apenas com o meu gcc & icc, sem vc ++ para testar).
Kyle Kanos
também espetos aviso ponto sequência tão ...- w :)
bebe
O @Kyle include files define como as funções externas funcionam (tipo e parâmetros de retorno). Nada a ver com vincular bibliotecas. Um compilador C padrão passa os parâmetros que você gosta para qualquer função (com avisos) e os valores de retorno geralmente são ignorados, portanto funciona de qualquer maneira.
edc65
5

PHP - 125 129

Versão 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";

Versão 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";

Versão limpa:

while($i++<11)
    echo "$i, ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";
echo "We're gonna rock around the clock tonight";
Samuel
fonte
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
fonte
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.";}

Editou minha primeira tentativa; funcionou quando o testei pela primeira vez, mas isso parece ser um acaso; o pós-incremento em um fluxo é "comportamento indefinido" e fazia coisas estranhas (incluindo a triagem em azul do Windows 7!) quando tentei executá-lo novamente. Eu acho que usar printf em vez de std :: cout poderia ser usado com pós-incremento para obter um programa mais curto.

Editado novamente, reduziu para 231 reimplementando o loop. Editado mais uma vez, agora com 203 ... esses #defines não eram úteis na versão em loop.

Para aqueles que se perguntam como o C ++ pode executar uma função "m", o ponto de entrada pode ser definido como qualquer função com apenas uma opção de compilador, assim como definir todas as funções como stdcall; Eu usei os dois switches ao compilar o acima. Se você não gostar do ponto de entrada redefinido, adicione 3 à minha contagem de caracteres.

Darren
fonte
Qual compilador você está usando? O gcc (4.7.1) não permite que eu chame a função principal m(). No entanto, você pode soltar voide salvar 5 caracteres (ou 2, se você nomear o método main) #
Christoph Böhmwalder
como é que isso conseguiu votos positivos? primeiro, você escreveu uma função chamada 'm' que não será compilada por padrão; depois, todo compilador mostra as horas na ordem inversa. este precisa de uma correção BIG
bebe
1
@HackerCow Parece que não consigo fazer o VS2013 funcionar sem o tipo de retorno nulo definido; existe uma opção de compilador que permita isso?
Darren
1
@bebe Eu explico o ponto de entrada m () na minha edição; quanto às horas de saída impressas em ordem inversa, nunca consegui duplicar isso, mas consegui imprimir corretamente (na primeira vez que tentei), depois testando novamente todos os 1s, 5s e 12s e depois em outro reteste ele travou o sistema operacional. Então, tecnicamente, correu uma vez, mas contando com um comportamento indefinido é provavelmente uma 'má idéia', então eu reescrevi :)
Darren
1
@bebe Eu sou legal de qualquer maneira; de maneira alguma vou "vencer" qualquer quebra-cabeça de código de golfe com C ++, portanto, adicionar 3 caracteres não é demais. Concordo que as definições de macro -D switch seriam trapaceiras, mas praticamente todos os outros sinalizadores do compilador parecem legítimos para mim, pois também parecem legítimos para as pessoas no segmento que você vinculou. Qualquer vantagem que você extrair de simples comutadores de compilador não será exatamente o campo de jogo entre C ++ e Python / Bash / Perl etc.
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
fonte
3

Java, 228

Uma solução codificada provavelmente teria sido mais curta.

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");
}
Não merecido
fonte
3
+1 para perceber que a codificação embutida seria mais curta.
Kyle Kanos
1+1+1é 9 caracteres menor que "two".length()". E é String[] anecessário?
Kyle Kanos
Isso meio que parecia trapaça, e sim, String [] a é necessária.
imerecido
Não é trapaça, várias pessoas o usaram: D
Kyle Kanos
3

Befunge-98 ( 402 268)

Agora um inabalável!

".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
fonte
1
Bits aleatórios de texto para trás, ,,:,1+, a11+/a*b1111+++-+w:,, personagens de rua debaixo da principal linha de código ... típico Befunge. A maioria dos intérpretes online está tendo problemas com o comprimento da linha (está acima do limite), você conhece alguém que não se importa?
Não consegui encontrar nenhum compilador Befunge-98 on-line, mas você pode usar o pyfunge, disponível no PyPI.
waylon531
3

Groovy - 140 139 caracteres

Golfe, influenciado pela resposta de 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"

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"
Michael Easter
fonte
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
fonte
+1, acho que essa é a melhor estratégia, mas pode ser mais curta .
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
fonte
1
A menos que minha matemática seja péssima, usar P(", ")no lugar de Qsalva dois caracteres.
Kyle Kanos
2
Ne Rapareça apenas uma vez: seria melhor incorporá-los do que criar uma macro.
Usando os comentários acima e mais isso pode ser condensado a 200 (mesmo com a inclusão e namespaces meu compilador quer):#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 caracteres

Este é um programa completo de execução, influenciado pela resposta de William Barbosa .

Golfe:

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");
    }
}
Michael Easter
fonte
2

ECMAScript6 - 136 135

Nem usa o 1dígito permitido :

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

Testado no console do Firefox.

Alconja
fonte
ou 114 caracteres usando xem.github.io/obfuscatweet ;)
xem
4
@ xem, eu sei que isso se encaixa com a letra da lei, mas não sou fã de compactação Unicode (ou de qualquer outro compilador / gerador). Na minha opinião, o golfe é um teste de habilidade e todo o código deve ser criado à mão ... mas sou eu.
Alconja
2

PowerShell, 123 118 109

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

Depois de um começo horrível (167), me livrei de algumas expressões idiomáticas que nem precisava e, pelo menos, consegui mais curto que a referência.

Joey
fonte
2

Haskell - 138 137 caracteres

Como um programa independente:

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

Edit: Eu costumava ter uma função auxiliar usada para definir s por

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

mas acaba custando 1 caractere extra. Existe alguma maneira de comprimir todas as "horas" s / "rock" s / "ock" s?

Matt Noonan
fonte
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)

Eu faço uma string como "x, x, x horas x rock de horas, \ n ..." Então substituo os "x's" por números.

JeffSB
fonte
1

PHP 150

Nenhum número, incluindo o 11, que não seria dois 1's, mas o valor do número onze.

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";
user29540
fonte
Está faltando o ponto final final.
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."

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." 
DarkAjax
fonte
Você pode reduzi-lo para 127 usando $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'dentro do loop.
Joey
@ Indeedοеу De fato, obrigado pelo conselho!
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"
Furioso
fonte