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.


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.


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

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 .


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

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


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=

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.

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

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

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/


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

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.


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,''))

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

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

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


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

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

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,@

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"

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

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

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.


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.


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?


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.


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

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

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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.