Rock alrededor del reloj


46

En el menor número posible de caracteres Unicode, imprima lo siguiente (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.

No debe usar ningún número en su código, excepto el dígito 1.


1
Hay espacios al final de las primeras 3 líneas, ¿cuentan?
aditsu

@aditsu: Esto se debe a la edición, ya que m.buettner olvidó eliminarlos al volver a editar en un bloque de código. Modificaría esto, pero la edición se considera demasiado pequeña.
Wrzlprmft

1
Los
eliminé

44
Varias respuestas usan 11. ¿La instrucción significa que solo puede usar el número 1 o el dígito 1?
mfvonh

10
@mfvonh Dije que podrías usar 1. No especifiqué cuántas veces, por lo que el hecho de que la gente lo haya usado 11es una escapatoria inteligente, y estoy de acuerdo.
rybo111

Respuestas:


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

El hecho de que 11 esté formado por dos 1 me permite pasar las reglas, supongo.

Explicación

K +++ s es igual a (k ++) + s, por lo que agrega k primero a x, luego incrementa k y luego agrega s a x. Este proceso se realizará tres veces antes de agregar la última oración.


Por qué {} ? No es necesario por el momento, solo tiene 1 instrucción. Pero como tienes que usar ";" solo ganarás 1 personaje. ^^
Antoine Esteve

3
¿Qué k+++shacer? ¿Es (k++) + so k + (++s)o (k++) + (++s)?
seequ

31
+1 por estas tonterías:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher

2
@trlkly usualmente jugando golf en JS tienes que usar una declaración de salida y alertes más corto que console.log. Usar la visualización automática del último cálculo en la consola es como hacer trampa.
edc65

15
¿Estás seguro de que no es Brainfuck?
Michael Hampton

37

C # - 186

¿El mejor lenguaje de golf o el mejor lenguaje de golf?

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

Me pregunto por qué también ganó tantos votos. A la gente le gustan las entradas en idiomas no amigables con el golf, tal vez
William Barbosa

77
Me inspiró a hacerlo en C ++, por lo que tiene un voto. ¡Real Men (tm) no usa lenguajes interpretados woosy para golf de código!
Darren

en realidad no necesitas los espacios en los i++ +bits
DLeh

Lo escribí en dotnetfiddle y no se compiló sin los espacios. Gracias por señalarlo.
William Barbosa

Puede afeitarse un par más haciendo WriteLine-> Write, y usando un literal \nal final de la cadena.
Alconja

27

Brainfuck (1574)

No es una presentación seria, pero sigue las reglas.

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

Se puede probar aquí .


12
Las respuestas de Brainfuck siempre merecen respeto.
Pharap

1
¿Quizás deberíamos darle el premio de "respuesta más larga"? #RESPECT
Jamie

23

Rubí, 100

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

44
Puede guardar otros pocos caracteres con s="%i, %i#{", %i o'clock"*-~1} rock,\n"(reemplazar el \ncon un salto de línea literal). Gran idea para usar $$!
Ventero

3
Ampliando mi comentario anterior: si asigna en r=-~1línea, puede usar en "..."*-~rlugar de s+s+s, lo que le permite colocar la asignación en s.
Ventero

Muy bien, hará esas ediciones.
histocrat

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

La expresión regular coincide (, )y *. Usé el hecho de que el código ASCII de (es 40, de )es 41 y *es 42.

El rindicador de la expresión regular habilita la "sustitución en el lugar" y el eindicador habilita la evaluación del código (similar a x.replace(/.../, function(m){...})en JavaScript).

(clock,rock)es una serie de dos "palabras desnudas". $&es la coincidencia actual de la expresión regular y ord$&es su valor ASCII.

Enmascarados por 3 o 1+1+1los valores ASCII ahora son 0, 1 y 2, por lo que puedo usarlos para recuperar el elemento de matriz correspondiente. Como 2 está fuera de la matriz, el operador de "cortocircuito" ||evalúa ++$i. En el primer partido $ies undefpor lo incrementándolo consigo 1, luego 2 y así sucesivamente ...

En palabras simples Esto reemplaza *con su ocurrencia actual, (con "reloj" y )con "roca".


1
Hace. No. Calcular. ¿Explicación por favor?
seequ

1
@TheRare Explicación agregada;)
core1024

66
Es magia negra. +1
seequ

Este es el tipo de cosas para las que se hizo Perl, no es sorprendente que lo haga tan bien.
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

versión Unicode codificada en base64 (en caso de que las representaciones de Unicode se estropeen):

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, ya que no es necesario el punto y coma después de la llave de cierre de la declaración de función.
manatwork

@manatwork Vaya buena captura, no sé cómo se coló allí. ¡Gracias!
Trauma digital

1
Estoy en Windows ahora, pero ¿cuál es la razón para usar evalen lugar de a pipeing basho sh?
core1024

@ core1024 No hay otra razón que no sea olvidar la posibilidad ;-) ¡Gracias por la sugerencia!
Trauma digital

1
¡Vaya, no conté el $rs!
Shahbaz

13

Brainfuck, 1299

Bleuuuurgh . Eso fue terrible. No sé por qué hice esto, al principio parecía bastante fácil. Primero y probablemente el último guión de Brainfuck. Pruébalo aquí

Con un poco de ayuda de un generador de código automatizado , pude escribir un script que reutilizaba la mayoría de los caracteres en lugar de generar cada uno desde cero. Tiene solo 275 caracteres más cortos que el generado automáticamente, publicado aquí .

La salida no está terminada en nueva línea.

Podría poner un poco de explicación más adelante. Esencialmente, cualquier línea de tiempo que no es algo así como >>>>>>>o <<<<<<<o >>.>>.>>.>>.genera un carácter o una serie de ellos.

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

10

Lua - 217 164 154 154 151 149 143

Modificado el anterior para usar un bucle en su lugar, guarda una carga de personajes. Gracias a TeunPronk por ayudarme a eliminar otros 10 caracteres y a WilliamBarbosa por eliminar otros 3 caracteres. Se pueden guardar 2 caracteres más usando la variable k. Se guardan 6 caracteres más al eliminar la variable, r=" rock,"ya que se usa una 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.")

Sin golf,

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

Me pregunto si podría ser más corto si usa un bucle en lugar de jy k.
Teun Pronk

@TeunPronk: jaja, solo estaba cambiando eso cuando tu comentario me
llamó la atención

1
Puede reducirlo a 157. No necesita la coma después de cada 3er número. Poner el espacio enfrente de O, retire Ode R, colocar en un espacio Ry reemplazar Rpor O,Ren su io.write:)
Teun Pronk

1
@TeunPronk: actualizado. ¡Gracias por tu ayuda!
Kyle Kanos

1
Puede almacenar io.writeen una variable ( f=io.write) y reducir esto aún más
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~

Pruébalos en http://cjam.aditsu.net/


Su unico ... "Esta respuesta ha sido editada". Oh no importa.
seequ

8

Pitó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

pruébalo aquí: ideone.com/Wi9ftB

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

Como prometí, aquí hay una versión mejor. mi cerebro se siente como ... ooh, así que de ahí viene el nombre.

explicación: (porque no se puede mantener y no quiero olvidar cómo funciona)

En primer lugar, debe elegir el mejor diseño de datos para este desafío. se me ocurrio

-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

Tenemos que creer que esto es óptimo a menos que haya demasiados cambios (en cuyo caso tendrá que reorganizar el diseño)

Después de eso, utilicé un bucle 4x9x3 para establecer los valores iniciales de nueva línea, número, las dos letras minúsculas y la coma. (todos los códigos ascii más pequeños obtuvieron 4x9 = 36 y las dos letras minúsculas obtuvieron 4x9x3 = 108, luego agregué y restamos algunos para obtener su valor real)

Cuando se realiza el preajuste, el código ingresa al bucle más externo que realiza ciclos 3 veces. Lo 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'

Cuando termine esta sección, solo tengo que imprimir la última línea. Pero tenemos una W mayúscula que debe producirse sin usar demasiados caracteres. En este punto estamos aquí:

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

entonces puse [-3] 4 veces a [-1] y resta 3 para obtener 87 (W): >[>>++++<<-]>>---.
luego lo borro [-]
y muevo [-2] a esta ubicación [-1] para que el espacio esté cerca de las letras minúsculas.<[>+<-]

Después de eso solo imprime las letras. la letra minúscula n. ° 1 corresponde a la parte inferior 97-107 y la letra minúscula n. ° 2 corresponde a la región anterior.


2
+1 por ser 300 caracteres más cortos que las otras respuestas BF
durron597

Estaba pensando en bajar aún más. las condiciones son terribles para crear sin un tutorial decente (esolangs es hacia abajo), pero puede ser más corto por ~ 200 caracteres más
bebe

6

JavaScript, 111 107 caracteres, sin usar ningún número.

Ejecute estos fragmentos en la consola JS de su navegador:

107 (inspirado en http://xem.github.io/obfuscatweet/ más la otra respuesta de JS):

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

111 (solo empacando toda la cadena y eliminando la evaluación):

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

44
¿Alguien más ve una tortuga allí ...? wtf
Dunno

jeje, sí, los caracteres Unicode "aleatorios" generados por obfuscatweet a veces conducen a emoji :)
xem

5

C - 145 - pruébame

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 - pruébame

#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
No soy muy programador de C, así que perdóname si soy ingenuo, pero ¿no necesitas #include <stdio.h>usarlo printf?
Kyle Kanos

1
las bibliotecas predeterminadas están vinculadas a la fuente en vc ++ y gcc (por lo tanto, si no necesita algo especial, puede comenzar libremente un desafío de golf escribiendomain(){...
bebe

Ah, ya veo. Es extraño que escupe una advertencia si se acepta de forma predeterminada (solo se verificó con mi gcc & icc, no hay vc ++ para probar).
Kyle Kanos

también escupe advertencia de punto de secuencia así que ...- w :)
bebe

@Kyle include files define cómo funcionan las funciones externas (tipo de retorno y parámetros). Nada que ver con vincular bibliotecas. Un compilador de C estándar pasará los parámetros que desee a cualquier función (con advertencias) y los valores de retorno a menudo se ignoran, por lo que funciona de todos modos.
edc65

5

PHP - 125 129

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

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

Versión limpia:

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

Edité mi primer intento; funcionó cuando lo probé por primera vez, pero eso parece ser una casualidad; el incremento posterior en una secuencia es un "comportamiento indefinido", e hizo cosas extrañas (¡incluida la pantalla azul de Windows 7!) cuando intenté volver a ejecutarlo. Creo que usar printf en lugar de std :: cout podría usarse con post-incremento para obtener un programa más corto.

Editado nuevamente, lo redujo a 231 al volver a implementar el bucle. Editado una vez más, ahora a 203 ... esos #defines no fueron todos útiles en la versión en bucle.

Para aquellos que se preguntan cómo C ++ puede ejecutar una función "m", el punto de entrada se puede definir como cualquier función con solo una opción de compilador, al igual que configurar todos los funcs para que sean stdcall; Usé ambos interruptores al compilar lo anterior. Si no le gusta el punto de entrada redefinido, agregue 3 a mi recuento de caracteres.


¿Qué compilador estás usando? gcc (4.7.1) no me permite llamar a la función principal m(). Sin embargo, puede soltar voidy guardar 5 caracteres (o 2 si nombra el método main)
Christoph Böhmwalder

¿Cómo demonios obtuvo votos positivos? en primer lugar, escribió una función llamada 'm' que no se compilará de manera predeterminada, en segundo lugar, cada compilador muestra las horas en orden inverso. esto necesita una GRAN corrección
bebe

1
@HackerCow Parece que no puedo hacer que VS2013 funcione sin el tipo de retorno nulo definido; ¿hay un conmutador de compilación que lo permita?
Darren

1
@bebe explico el punto de entrada m () en mi edición; En cuanto a las horas de salida que se imprimen en orden inverso, nunca logré duplicar eso, pero logré que se imprimiera correctamente (la primera vez que lo intenté), luego al volver a probar todos los 1, 5 y 12, luego en otro volver a probar se estrelló el sistema operativo. Entonces, técnicamente se ejecutó una vez, pero confiar en un comportamiento indefinido es probablemente una 'mala idea', así que lo reescribí :)
Darren

1
@bebe soy genial de cualquier manera; de ninguna manera voy a "ganar" ningún código de rompecabezas de golf con C ++, por lo que agregar 3 caracteres no es gran cosa. Estoy de acuerdo en que las definiciones de macro de cambio -D serían engañosas, pero casi cualquier otro indicador de compilador me parece legítimo, ya que también lo eran para la gente en el hilo que vinculaste. Cualquier ventaja que obtenga de los simples conmutadores del compilador no igualará exactamente el campo de juego entre C ++ y 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.")

3

Java, 228

Una solución codificada probablemente habría sido más corta.

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 para darse cuenta de que la codificación rígida sería más corta.
Kyle Kanos

1+1+1es 9 caracteres más corto que "two".length()". ¿Y es String[] anecesario?
Kyle Kanos

Eso se sintió como una trampa, y sí, la Cadena [] a es necesaria.
merecido

No es trampa, varias personas lo han usado: D
Kyle Kanos

3

Befunge-98 ( 402 268)

Ahora una incógnita!

".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
Bits aleatorios de texto hacia atrás, ,,:,1+, a11+/a*b1111+++-+w:,, personajes callejeros por debajo de la línea principal de código ... típica Befunge. La mayoría de los intérpretes en línea están teniendo problemas con la longitud de la línea (está muy por encima del límite), ¿conoces uno que no le importe?

No pude encontrar ningún compilador Befunge-98 en línea, pero podría usar pyfunge que está disponible en PyPI.
waylon531

3

Groovy - 140 139 caracteres

Golfed, influenciado por la respuesta 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"

Sin golf:

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, creo que esta es la mejor estrategia, pero puede ser más corta .

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
A menos que mi matemática apesta, usar P(", ")en lugar de Qte ahorra 2 caracteres.
Kyle Kanos

2
Ny Rsolo aparece una vez: sería mejor alinearlos que hacer una macro.

Usando los comentarios anteriores y más, esto se puede condensar en 200 (incluso con los espacios de nombres y de inclusión que mi compilador quiere):#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 es un programa completo en ejecución, influenciado por la respuesta de William Barbosa .

Golfizado:

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

Sin golf:

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

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

2

ECMAScript6 - 136 135

Ni siquiera usa el 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.")

Probado en la consola de Firefox.


o 114 caracteres usando xem.github.io/obfuscatweet ;)
xem

44
@xem, sé que encaja con la letra de la ley, pero no soy fanático de la compresión Unicode (ni de ningún otro compilador / generador). En mi opinión, el golf es una prueba de habilidad y todo el código debe ser hecho a mano ... pero ese soy yo.
Alconja

2

PowerShell, 123 118 109

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

Después de un comienzo horrible (167) me libré de algunos modismos que ni siquiera necesitaba y al menos lo hice más corto que la referencia.


2

Haskell - 138 137 caracteres

Como un programa independiente:

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

Editar: Solía ​​tener una función auxiliar o solía definir s por

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

pero resulta que cuesta 1 personaje extra. ¿Hay alguna forma de comprimir todos los "o'clock" s / "rock" s / "ock" s?


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)

Hago una cadena como "x, x, x en punto x en punto roca, \ n ..." Luego reemplazo las "x" con números.


1

PHP 150

No hay números, incluido el 11 que no serían dos 1 pegados, pero el valor numérico es once.

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

Le falta el punto final completo.
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."

Sin golf:

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

Puede bajarlo a 127 utilizando $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'dentro del bucle.
Joey

@ Indeedοеу De hecho, gracias por el consejo!
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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.