Rock autour de l'horloge

46

Dans le moins de caractères Unicode possible, imprimez les éléments suivants (144 caractères):

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.

Vous ne devez utiliser aucun chiffre dans votre code, sauf le chiffre 1.

rybo111
la source
1
Il y a des espaces à la fin des 3 premières lignes, celles-ci comptent-elles?
Aditsu
@aditsu: Celles-ci sont dues à l'édition, car m.buettner a oublié de les supprimer lors de l'édition d'un bloc de code. Je modifierais cela, mais la modification est considérée comme trop mineure.
Wrzlprmft
1
Je les ai enlevés maintenant
Aditsu
4
Plusieurs réponses utilisent 11. Est-ce que l'instruction signifie que vous ne pouvez utiliser que le chiffre 1 ou le chiffre 1?
mfvonh
10
@ mfvonh j'ai dit que vous pourriez utiliser 1. Je n'ai pas précisé combien de fois, alors le fait que les gens l'utilisent 11est une échappatoire intelligente, et je suis tout à fait d'accord.
rybo111

Réponses:

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

Le fait que 11 soit composé de deux 1 me laisse passer les règles je suppose.

Explication

Le k +++ s est égal à (k ++) + s, il ajoute donc k d'abord à x, puis incrémente k, puis ajoute s à x. Ce processus sera effectué trois fois avant d'ajouter la dernière phrase.

Izlin
la source
Pourquoi tu {} ? Ce n'est pas nécessaire pour le moment, vous n'avez qu'une instruction. Mais comme vous devez utiliser ";" vous ne gagnerez qu'un seul personnage. ^^
Antoine Esteve
3
Que fait k+++s-il? Est-ce (k++) + sou k + (++s)ou (k++) + (++s)?
seequ
31
+1 pour cette absurdité:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher
2
@trlkly golfant généralement en JS, vous devez utiliser une instruction de sortie et alertest plus courte que console.log. Utiliser l'affichage automatique du dernier calcul dans la console revient à tricher.
Edc65
15
Êtes-vous sûr que ce n'est pas Brainfuck?
Michael Hampton
37

C # - 186

Meilleure langue de golf ou meilleure langue 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.");}}
William Barbosa
la source
Je me demande également pourquoi il a recueilli autant de voix. Les gens aiment les entrées qui ne sont pas favorables au golf, peut
William Barbosa
7
Il m'a inspiré pour le faire en C ++, donc il obtient un vote. Les vrais hommes (tm) n'utilisent pas les langages interprétés par woosy pour le code golf!
Darren
vous n'avez pas réellement besoin des espaces dans les i++ +bits
DLeh
Je l'ai écrit sur dotnetfiddle et il n'a pas été compilé sans espaces. Merci de l'avoir signalé.
William Barbosa
Vous pouvez en raser quelques autres en faisant WriteLine-> Write, et en utilisant un littéral \nà la fin de la chaîne.
Alconja
27

Brainfuck (1574)

Pas une soumission sérieuse, mais suit les règles.

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

Peut être testé ici .

BrunoJ
la source
12
Les réponses de Brainfuck méritent toujours le respect.
Pharap
1
Peut-être devrions-nous lui donner le prix de la "réponse la plus longue"? #RESPECT
Jamie
23

Ruby, 100

printf"%i, %i#{", %i o'clock"*r=-~1} rock,
"*-~r+"We're gonna rock around the clock tonight.",*1..$$
histocrate
la source
4
Vous pouvez enregistrer quelques autres caractères avec s="%i, %i#{", %i o'clock"*-~1} rock,\n"(remplacez le \npar un saut de ligne littéral). Excellente idée à utiliser $$!
Ventero
3
En développant mon commentaire précédent: Si vous affectez r=-~1inline, vous pouvez alors utiliser à la "..."*-~rplace de s+s+s, vous permettant de supprimer l’affectation s.
Ventero
Très bien, va faire ces modifications.
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

L'expression régulière correspond (, )et *. J'ai utilisé le fait que le code ASCII de (est 40, de )41 et *42.

L' rindicateur de l'expression régulière active la "substitution sur place" et l' eindicateur permet l'évaluation du code (similaire à x.replace(/.../, function(m){...})JavaScript).

(clock,rock)est un tableau de deux "mots nus". $&est la correspondance actuelle de l'expression régulière et ord$&sa valeur ASCII.

Masqué par 3 ou 1+1+1les valeurs ASCII sont maintenant 0, 1 et 2, je peux donc les utiliser pour récupérer l'élément de tableau correspondant. Comme 2 est hors de la matrice, l'opérateur "court-circuit" ||évalue ++$i. Dans le premier match $iest undefsi incrémenter je reçois 1, puis 2 et ainsi de suite ...

En mots simples. Ceci remplace *par son occurrence actuelle, (par "clock" et )par "rock".

core1024
la source
1
Est-ce que. Ne pas. Calculer. Explication s'il vous plaît?
seequ
1
@TheRare Explanation ajouté;)
core1024
6
C'est de la magie noire. +1
seequ
C’est le genre de chose pour laquelle Perl a été conçu, ce qui n’a rien de surprenant.
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

Version Unicode encodée en base64 (au cas où les rendus unicode seraient gâchés):

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 numérique
la source
2
120, car le point-virgule après l'accolade fermante de la déclaration de fonction n'est pas nécessaire.
manatwork
@manatwork Oops, bonne prise - je ne sais pas comment celui-ci s'est faufilé ici. Merci!
Digital Trauma
1
Je suis sur Windows maintenant, mais quelle est la raison d'utiliser evalplutôt que de diriger vers bashou sh?
core1024
@ core1024 Aucune autre raison que moi d'oublier la possibilité ;-) Merci pour le tuyau!
Digital Trauma
1
Oups, ne compte pas le $rs!
Shahbaz
13

Brainfuck, 1299

Bleuuuurgh . C'était terrible. Je ne sais pas pourquoi j'ai fait ça, ça semblait assez facile au début. Premier et probablement dernier script Brainfuck. Essayez ici.

Avec l'aide d' un générateur de code automatisé , j'ai pu écrire un script qui réutilisait la plupart des caractères au lieu de les générer à partir de rien. Il ne compte que 275 caractères de moins que celui généré automatiquement, posté ici .

La sortie n'est pas terminée par une nouvelle ligne.

Je pourrais mettre un peu d'explication plus tard. Essentiellement, toute longue ligne qui ne soit pas quelque chose comme >>>>>>>ou <<<<<<<ou >>.>>.>>.>>.génère un caractère ou une série d'entre eux.

-[----->+<]>--.
>
++[------>+<]>+.------------.
[-]<<+.>
++[------>+<]>+.------------.
[-]<<+.>
++++[->++++++++<]>.
>
+[------->++<]>+.
>
+[------->+++<]>++.
>
--[----->+<]>---.
>
+[------->++<]>--.
>
+[------->++<]>+.
>
--[----->+<]>---.
>
+[----->+++<]>++++.
>
++[------>+<]>+.
>
++++[->++++++++<]>.
<<<<<<<<<<<<<<<<<<<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>>>.
>
+[--------->++<]>.
>
+[------->++<]>+.
>
--[----->+<]>---.
>
+[----->+++<]>++++.
<<<<<<<<<<.
<++++++++++.
<<<<<<<<<<
<<<<<<<
+.
>>>>>>>>>>
>>>>>>>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>>>>>>>>>
>>>>>>>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>.
<<<<<<<<<<
<<<<<<
.<<+.
>>.>>.>>.>>.>>.>>.>>.>>.>>>>.
>>.>>.>>.>>.
<<<<<<<<<<.
<.
<<<<<<<<<
<<<<<<<<
+.[-]<
++[------>+<]>+.
>>.
[-]<<[-]<
-[----->+<]>--.-.
[-]<
++[------>+<]>+.------------.
[-]<
-[----->+<]>--..
>
++++[->++++++++<]>.
>>.>>.>>.>>.>>.>>.>>.>>.>>.
>>>>>>>>>
-[----->+<]>--.+.
<<<<<<<<<
<<<<<<<<<
<<<<<<<<<
<.
>>.>>.>>.>>.>>.>>.>>.
>>>>.
>>.>>.>>.>>.
>>[-]
++[------>+<]>+.>++++++++++.
>
+[--->++<]>+.++[->++++<]>+.---[->+++<]>+.-[->+++<]>.-------------.--[--->+<]>-.++[->+++<]>+.++++++++.-..-------------.
<<<<<<<<<<
<<<<<<<<<.
>>.>>.>>.>>.
<<[-]<<[-]<<[-]<<.
>
--[----->+<]>-----.--[--->+<]>---.---.++++++.-------.----------.
[-]<<<.
>
--------[-->+++<]>.------------.---.
<<.
<<<<<<<<<<
<<.
>>.>>.>>.>>.
>>>>.
>>[-]
--------[-->+++<]>.-----.-.-----.--.+.++++++++++++.[++>---<]>.
Communauté
la source
10

Lua - 217 164 154 151 149 143

Modification de l'ancien pour utiliser une boucle à la place, enregistre un bateau-charge de caractères. Merci à TeunPronk de m'avoir aidé à raser 10 autres personnages et à WilliamBarbosa de raser 3 autres personnages. 2 caractères supplémentaires peuvent être enregistrés à l'aide de la variable k. 6 caractères supplémentaires sont sauvegardés en éliminant la variable, r=" rock,"car celle-ci est utilisée une fois.

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
la source
Je me demande si cela pourrait être plus court si vous utilisez une boucle au lieu de jet k.
Teun Pronk
@TeunPronk: haha, je changeais simplement cela alors que votre commentaire me
cinglait
1
Vous pouvez le réduire à 157. Vous n'avez pas besoin de la virgule après chaque 3ème chiffre. Mettez le infront espace O, supprimer Ode R, placez un espace Ret de le remplacer Rpar O,Rvotre io.write:)
Teun Pronk
1
@TeunPronk: Mise à jour. Merci de votre aide!
Kyle Kanos
1
Vous pouvez stocker io.writeune variable ( f=io.write) et la réduire encore davantage
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~

Essayez-les à http://cjam.aditsu.net/

Aditsu
la source
Votre unico ... "Cette réponse a été modifiée." Oh peu importe.
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.")
Ian D. Scott
la source
7

Brainfuck - 680

testez-le ici: ideone.com/Wi9ftB

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

comme je l'ai promis, voici une meilleure version. mon cerveau se sent comme .. ooh alors c'est de là que vient le nom.

explication: (parce que c'est intolérable et que je ne veux pas oublier comment ça marche)

Tout d'abord, vous devez choisir la meilleure structure de données pour ce défi. Je suis venu avec

-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

Nous devons croire que c'est optimal à moins qu'il y ait trop de changements (dans ce cas, vous devez réorganiser la mise en page).

Après cela, j’ai utilisé une boucle 4x9x3 pour définir les valeurs de départ de la nouvelle ligne, du nombre, des deux lettres minuscules et de la virgule. (Tous les codes ascii plus petits ont 4x9 = 36 et les deux lettres minuscules ont 4x9x3 = 108, puis j'en ai ajouté et soustrait quelques-uns pour obtenir leur valeur réelle)

Lorsque le préréglage est terminé, le code entre dans la boucle la plus à l'extérieur qui effectue 3 cycles. Je l'explique par pseudocode.

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'

Lorsque cette section est terminée, il ne me reste plus qu'à imprimer la dernière ligne. Mais nous avons un W majuscule qui doit être produit sans utiliser trop de caractères. À ce stade, nous sommes ici:

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

donc je mets [-3] 4 fois à [-1] et soustrais 3 pour obtenir 87 (W): >[>>++++<<-]>>---.
puis effacez-le [-]
et déplacez [-2] vers cet emplacement [-1] afin que l'espace soit proche des lettres minuscules.<[>+<-]

Après cela, il n’imprime que les lettres. les minuscules n ° 1 correspondent aux parties inférieures 97-107 et les minuscules n ° 2 à la région ci-dessus.

bebe
la source
2
+1 pour avoir 300 caractères de moins que les autres réponses de BF
durron597
Je pensais aller encore plus bas. les conditions sont terribles pour créer sans un tutoriel décent (esolangs est en panne), mais il peut être plus court d'environ 200 caractères
bebe
6

JavaScript, 111 107 caractères, sans utiliser de nombre.

Exécutez ces extraits dans la console JS de votre navigateur:

107 (inspiré par http://xem.github.io/obfuscatweet/ et l'autre réponse JS):

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

111 (il suffit d'emporter toute la chaîne et de supprimer l'eval):

unescape(escape('𜐬𘀲𛀠𜰠𫰧𨱬𫱣𪰬𘀴𘁯𙱣𫁯𨱫𘁲𫱣𪰬𒠵𛀠𝠬𘀷𘁯𙱣𫁯𨱫𛀠𞀠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𞐬𘀱𜀬𘀱𜐠𫰧𨱬𫱣𪰬𘀱𜠠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𥱥𙱲𩐠𩱯𫡮𨐠𬡯𨱫𘁡𬡯𭑮𩀠𭁨𩐠𨱬𫱣𪰠𭁯𫡩𩱨𭀮').replace(/uD./g,''))
xem
la source
4
Quelqu'un d'autre voit une tortue là-bas ...? wtf
Dunno
hehe, ouais, les caractères Unicode "aléatoires" générés par obfuscatweet conduisent parfois à emoji :)
xem
5

C - 145 - essayez moi

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 - essayez moi

#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
la source
1
Je ne suis pas vraiment un programmeur C, alors pardonnez-moi si je suis naïf, mais n'avez-vous pas besoin #include <stdio.h>de l'utiliser printf?
Kyle Kanos
1
Les bibliothèques par défaut sont liées aux sources dans vc ++ et gcc (donc si vous n'avez pas besoin de quelque chose de spécial, vous pouvez librement lancer un défi de golf en tapantmain(){...
bebe
Ah, je vois. C'est étrange qu'il envoie un avertissement s'il est accepté par défaut (juste vérifié avec mon gcc & icc, pas de vc ++ à tester).
Kyle Kanos
il lance également un avertissement de point de séquence alors ...- w :)
bebe
@Kyle include files définit le fonctionnement des fonctions externes (type et paramètres de retour). Rien à voir avec les bibliothèques de liens. Un compilateur C standard transmet les paramètres de votre choix à n'importe quelle fonction (avec des avertissements) et les valeurs renvoyées sont souvent ignorées, de sorte que cela fonctionne quand même.
Edc65
5

PHP - 125 129

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

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

Version propre:

while($i++<11)
    echo "$i, ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";
echo "We're gonna rock around the clock tonight";
Samuel
la source
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
la source
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é ma première tentative; cela a fonctionné lorsque je l'ai testé pour la première fois, mais cela semble être un coup de chance; post-incrémenter dans un flux est un "comportement indéfini", et cela a fait des choses étranges (y compris le filtrage bleu de Windows 7!) lorsque j'ai essayé de le réexécuter. Je pense que l’utilisation de printf au lieu de std :: cout pourrait être utilisée post-incrémentation pour obtenir un programme plus court.

Édité à nouveau, réduit à 231 en réimplémentant la boucle. Édité encore une fois, maintenant à 203 ... ces définitions ne sont pas toutes utiles dans la version en boucle.

Pour ceux qui se demandent comment le C ++ peut exécuter une fonction "m", le point d’entrée peut être défini comme toute fonction n’ayant qu’une option de compilation, de même que la définition de tous les fonctions comme étant stdcall; J'ai utilisé les deux commutateurs lors de la compilation de ce qui précède. Si vous n'aimez pas le point d'entrée redéfini, ajoutez 3 au nombre de mes personnages.

Darren
la source
Quel compilateur utilisez-vous? gcc (4.7.1) ne me permet pas d'appeler la fonction principale m(). Vous pouvez cependant supprimer void5 caractères (ou 2 si vous nommez la méthode main)
Christoph Böhmwalder
comment diable at-il eu des votes positifs? tout d'abord, vous avez écrit une fonction appelée «m» qui ne compilera pas par défaut, deuxièmement, chaque compilateur affiche les heures dans l'ordre inverse. cela nécessite une grosse correction
bebe
1
@ HackerCow Je n'arrive pas à faire fonctionner VS2013 sans le type de retour vide défini; Y at-il un commutateur de compilateur qui permettrait cela?
Darren
1
@bebe j'explique le point d'entrée m () dans mon édition; quant aux heures de sortie imprimées en ordre inverse, je n’ai jamais réussi à la dupliquer, mais j’ai réussi à l’imprimer correctement (la première fois que j’essayais de le faire), puis à retester tous les 1, 5 et 12, puis sur un autre retester il a planté le système d'exploitation. Donc, techniquement, cela a fonctionné une fois, mais le fait de s'appuyer sur un comportement indéfini est probablement une "mauvaise idée", alors je l'ai réécrit :)
Darren
1
@bebe je suis cool de toute façon; je ne vais en aucun cas "gagner" un puzzle de golf avec code C ++, donc ajouter 3 personnages n'est pas grave. Je conviens que les définitions de macro -D switch seraient une tricherie, mais quasiment tous les autres indicateurs de compilateur me semblent légitimes, car ils semblaient également légitimes pour les personnes du fil que vous avez lié. Tous les avantages que vous retirez de simples commutateurs de compilation ne seront pas exactement identiques, même entre le C ++ et le 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
la source
3

Java, 228

Une solution codée en dur aurait probablement été plus courte.

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");
}
Immérité
la source
3
+1 pour la réalisation que le codage en dur serait plus court.
Kyle Kanos
1+1+1est 9 caractères plus court que "two".length()". Et est String[] anécessaire?
Kyle Kanos
Cela ressemblait un peu à de la triche, et oui, String [] a est nécessaire.
Undeserved
Ce n'est pas de la triche, plusieurs personnes l'ont utilisé: D
Kyle Kanos
3

Befunge-98 ( 402 268)

Maintenant unfunge!

".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
la source
1
Bits aléatoires de texte en arrière, ,,:,1+, a11+/a*b1111+++-+w:,, caractères parasites sous la ligne principale du code ... typique Befunge. La plupart des interprètes en ligne ont des problèmes avec la longueur de la ligne (c'est bien au-delà de la limite), en connaissez-vous une qui ne le dérange pas?
Je n'ai trouvé aucun compilateur Befunge-98 en ligne, mais vous pouvez utiliser pyfunge, disponible dans PyPI.
waylon531
3

Groovy - 140 139 caractères

Golfé, influencé par la réponse 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
la source
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
la source
+1, je pense que c'est la meilleure stratégie mais elle peut être plus courte .
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
la source
1
À moins que mes calculs ne craignent, utiliser P(", ")au lieu de Qvous enregistre 2 caractères.
Kyle Kanos
2
Net Rn'apparaissent qu'une fois: il serait préférable de les aligner plutôt que de faire une macro.
En utilisant les commentaires ci-dessus et plus encore, cela peut être condensé à 200 (même avec l'inclusion et les espaces de noms souhaités par le compilateur):#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 caractères

Il s'agit d'un programme complet, influencé par la réponse de William Barbosa .

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

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
la source
2

ECMAScript6 - 136 135

N'utilise même pas le 1chiffre autorisé :

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

Testé dans la console Firefox.

Alconja
la source
ou 114 caractères utilisant xem.github.io/obfuscatweet ;)
xem
4
@xem, je sais que cela correspond à la lettre de la loi, mais je ne suis pas un partisan de la compression Unicode (ou de tout autre compilateur / générateur). Dans mon esprit, le golf est une épreuve d'adresse et tout le code doit être fabriqué à la main ... mais c'est juste moi.
Alconja
2

PowerShell, 123 118 109

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

Après un début horrible (167), je me suis débarrassé de quelques idiomes dont je n'avais même pas besoin et au moins je l'ai eu plus court que la référence.

Joey
la source
2

Haskell - 138 137 caractères

En tant que programme autonome:

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: J'avais l'habitude d'avoir une fonction d'assistance o utilisé pour définir s par

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

mais il en coûte un personnage supplémentaire. Est-il possible de compresser toutes les "heures" / "rock" s / "ock" s?

Matt Noonan
la source
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)

Je crée une chaîne du style "x, x, x heure, x heure, rock, \ n ..." puis je remplace les "x" par des nombres.

JeffSB
la source
1

PHP 150

Aucun nombre, y compris les 11 qui ne seraient pas deux 1 collés ensemble, mais le nombre valeur 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";
utilisateur29540
la source
Il manque le point final de fuite.
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
la source
Vous pouvez le réduire à 127 en l’utilisant $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'dans la boucle.
Joey
@ Bien aimé, merci pour le conseil!
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"
Οurous
la source