Rocken rund um die Uhr


46

Geben Sie in möglichst wenigen Unicode-Zeichen Folgendes aus (144 Zeichen):

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.

Sie dürfen in Ihrem Code keine Zahlen außer der Ziffer verwenden 1.


1
Es gibt Leerzeichen am Ende der ersten 3 Zeilen, zählen diese?
Aditsu

@aditsu: Diese sind bearbeitungsbedingt, da m.buettner vergessen hat, sie beim Zurückbearbeiten in einen Codeblock zu entfernen. Ich würde dies ändern, aber die Bearbeitung wird als zu geringfügig angesehen.
Wrzlprmft

1
Ich habe sie jetzt entfernt
aditsu

4
Mehrere Antworten verwenden 11. Bedeutet der Befehl, dass Sie nur die Nummer 1 oder die Ziffer 1 verwenden können?
mfvonh

10
@mfvonh Ich sagte, du könntest verwenden 1. Ich habe nicht angegeben, wie oft, so dass die Tatsache, dass die Menschen verwendet haben, 11eine clevere Lücke ist, und ich bin alles dafür.
Rybo111

Antworten:


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

Die Tatsache, dass 11 aus zwei Einsen besteht, lässt mich die Regeln, die ich denke, bestehen.

Erläuterung

Das k +++ s ist gleich (k ++) + s, also addiert es k zuerst zu x, inkrementiert dann k und addiert dann s zu x. Dieser Vorgang wird dreimal ausgeführt, bevor der letzte Satz hinzugefügt wird.


Warum tun Sie {} ? Es wird für eine Weile nicht benötigt, Sie haben nur 1 Anweisung. Aber da muss man ";" Sie werden nur 1 Zeichen gewinnen. ^^
Antoine Esteve

3
Was macht k+++sdas? Ist es (k++) + soder k + (++s)oder (k++) + (++s)?
Siehe auch

31
+1 für diesen Unsinn:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher

2
@trlkly in der Regel Golf in JS müssen Sie eine Ausgabe-Anweisung verwenden und alertist kürzer als console.log. Das Verwenden der automatischen Anzeige der letzten Berechnung in der Konsole ist wie ein Betrug.
EDC65

15
Bist du sicher, dass das nicht Brainfuck ist?
Michael Hampton

37

C # - 186

Beste Golfsprache oder beste Golfsprache?

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

Ich frage mich, warum es auch so viele Stimmen gewonnen hat. Leute wie Nicht-Golf-freundlich-Sprache Einträge, vielleicht
William Barbosa

7
Er hat mich dazu inspiriert, es in C ++ zu tun, damit er eine Stimme bekommt. Echte Männer (tm) verwenden keine umwerfend interpretierten Sprachen für Code-Golf!
Darren

Sie brauchen nicht wirklich die Leerzeichen in den i++ +Bits
DLeh

Ich habe es auf dotnetfiddle geschrieben und es ist nicht ohne Leerzeichen kompiliert worden. Danke, dass Sie darauf hingewiesen haben.
William Barbosa

Sie können ein paar mehr rasieren, indem Sie WriteLine-> ausführen Writeund ein Literal \nam Ende der Zeichenfolge verwenden.
Alconja

27

Brainfuck (1574)

Keine seriöse Einreichung, sondern folgt den Regeln.

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

Kann hier getestet werden .


12
Brainfuck-Antworten verdienen immer Respekt.
Pharap

1
Vielleicht sollten wir ihm die Auszeichnung "längste Antwort" geben? #RESPECT
Jamie

23

Rubin, 100

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

4
Sie können weitere Zeichen mit speichern s="%i, %i#{", %i o'clock"*-~1} rock,\n"(ersetzen Sie das \ndurch einen wörtlichen Zeilenumbruch). Tolle Idee zu benutzen $$!
Ventero

3
Erweitern meines vorherigen Kommentars: Wenn Sie r=-~1Inline zuweisen , können Sie "..."*-~ranstelle von verwenden s+s+s, um die Zuordnung zu löschen s.
Ventero

Sehr schön, werde diese Änderungen vornehmen.
Histokrat

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

Der reguläre Ausdruck stimmt (mit )und überein *. Ich habe die Tatsache benutzt, dass der ASCII-Code von (40, von )41 und von *42 ist.

Das rFlag des regulären Ausdrucks aktiviert "in place substitution" und das eFlag aktiviert die Codeauswertung (ähnlich wie x.replace(/.../, function(m){...})in JavaScript).

(clock,rock)ist eine Anordnung von zwei "bloßen Wörtern". $&ist die aktuelle Übereinstimmung des regulären Ausdrucks und ord$&der ASCII-Wert.

Maskiert durch 3 oder 1+1+1die ASCII-Werte sind jetzt 0, 1 und 2, sodass ich sie verwenden kann, um das entsprechende Array-Element abzurufen. Da 2 außerhalb des Arrays liegt, wird der Operator "Kurzschluss" ||ausgewertet ++$i. Im ersten Match $iwird es undefso erhöht, dass ich 1 bekomme, dann 2 und so weiter ...

In einfachen Worten. Ersetzt *durch das aktuelle Vorkommen, (durch "Uhr" und )durch "Rock".


1
Tut. Nicht. Berechnen. Erklärung bitte?
Siehe auch

1
@ TheRare Erklärung hinzugefügt;)
Core1024

6
Es ist schwarze Magie. +1
siehe auch

Dies ist die Art von Dingen, für die Perl gemacht wurde, nicht überraschend, dass es so gut funktioniert.
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

Base64-codierte Unicode-Version (falls Unicode-Renderings durcheinander geraten):

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, da das Semikolon nach der schließenden Klammer der Funktionsdeklaration nicht benötigt wird.
Manatwork

@manatwork Ups, guter Fang - ich weiß nicht, wie der da reingeschlichen ist. Vielen Dank!
Digital Trauma

1
Ich bin jetzt unter Windows, aber was ist der Grund, evalzu bashoder anstatt zu leiten sh?
Core1024

@ core1024 Kein Grund außer mir, die Möglichkeit zu vergessen ;-) Danke für den Tipp!
Digitales Trauma

1
Hoppla, habe das $rs nicht gezählt !
Shahbaz

13

Brainfuck, 1299

Bleuuuurgh . Das war schrecklich. Ich weiß nicht, warum ich das getan habe, es schien am Anfang ziemlich einfach zu sein. Erstes und wahrscheinlich letztes Brainfuck-Skript. Probieren Sie es hier aus.

Mit Hilfe eines automatischen Codegenerators konnte ich ein Skript schreiben, das die meisten Zeichen wiederverwendete, anstatt jedes von Grund auf neu zu generieren. Es sind nur 275 Zeichen kürzer als die hier veröffentlichten .

Die Ausgabe ist nicht mit Zeilenvorschub abgeschlossen.

Ich könnte später eine Erklärung abgeben. Im Wesentlichen, das jede lange Linie ist nicht so etwas wie >>>>>>>oder <<<<<<<oder >>.>>.>>.>>.erzeugt ein Zeichen oder eine Reihe von ihnen.

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

10

Lua - 217 164 154 151 149 143

Die alte wurde dahingehend geändert, dass stattdessen eine Schleife verwendet wird, wodurch eine Menge Charaktere gespeichert werden. Vielen Dank an TeunPronk, der mir geholfen hat, weitere 10 Zeichen zu entfernen, und an WilliamBarbosa, der mir weitere 3 Zeichen entfernt hat. Mit der Variablen können 2 weitere Zeichen gespeichert werden k. Durch Eliminieren der Variablen werden weitere 6 Zeichen gespeichert, r=" rock,"da diese nur einmal verwendet werden.

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

Ich frage mich, ob es kürzer sein könnte, wenn Sie eine Schleife anstelle von jund verwenden k.
Teun Pronk

@ TeunPronk: haha, ich habe das gerade geändert, als Ihr Kommentar mich ansprach
Kyle Kanos

1
Sie können es auf 157 senken. Sie brauchen das Komma nicht nach jeder dritten Zahl. Setzen Sie den Raum infront O, Entfernen Ovon R, legen Sie einen Raum in Rund ersetzen Rdurch O,Rin Ihrem io.write:)
Teun Pronk

1
@TeunPronk: Aktualisiert. Danke für Ihre Hilfe!
Kyle Kanos

1
Sie können io.writein einer Variablen ( f=io.write) speichern und diese weiter reduzieren
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~

Probieren Sie sie unter http://cjam.aditsu.net/


Dein Unico ... "Diese Antwort wurde bearbeitet." Vergiss es.
Siehe auch

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

Testen Sie es hier: ideone.com/Wi9ftB

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

Wie ich versprochen habe, ist hier eine bessere Version. Mein Gehirn fühlt sich an wie ... Oh, daher kommt der Name.

Erklärung: (weil es nicht zu warten ist und ich nicht vergessen möchte, wie es funktioniert)

Zunächst müssen Sie das beste Datenlayout für diese Herausforderung auswählen. Ich hatte die Idee dass

-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

Wir müssen glauben, dass dies optimal ist, es sei denn, es wird zu viele Schichten geben (in diesem Fall müssen Sie das Layout neu ordnen).

Danach habe ich eine 4x9x3-Schleife verwendet, um die Startwerte für Newline, Number, die beiden Kleinbuchstaben und das Komma festzulegen. (Alle kleineren ASCII-Codes haben 4x9 = 36 und die beiden Kleinbuchstaben haben 4x9x3 = 108, dann habe ich einige addiert und subtrahiert, um ihren tatsächlichen Wert zu erhalten.)

Wenn die Voreinstellung abgeschlossen ist, wird der Code in die äußerste Schleife eingegeben, die dreimal durchlaufen wird. Ich erkläre es durch 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'

Wenn dieser Abschnitt fertig ist, muss ich nur noch die letzte Zeile drucken. Wir haben jedoch ein W in Großbuchstaben, das ohne Verwendung zu vieler Zeichen erzeugt werden muss. An diesem Punkt sind wir hier:

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

also setze ich [-3] 4 mal auf [-1] und subtrahiere 3, um 87 (W) zu erhalten: >[>>++++<<-]>>---.
dann lösche ich es[-]
und verschiebe [-2] an diese Stelle [-1], so dass das Leerzeichen in der Nähe der Kleinbuchstaben liegt.<[>+<-]

Danach werden nur die Buchstaben gedruckt. Kleinbuchstabe Nr. 1 steht für den unteren Teil 97-107 und Kleinbuchstabe Nr. 2 für den obigen Bereich.


2
+1 für 300 Zeichen kürzer als die anderen BF Antworten
Durron597

Ich dachte darüber nach, noch tiefer zu gehen. Bedingungen sind schrecklich, ohne ein anständiges Tutorial zu erstellen (esolangs ist ausgefallen), aber es kann um ~ 200 Zeichen kürzer sein
bebe

6

JavaScript, 111 107 Zeichen, ohne eine Zahl zu verwenden.

Führen Sie diese Snippets in der JS-Konsole Ihres Browsers aus:

107 (inspiriert von http://xem.github.io/obfuscatweet/ und der anderen Antwort von JS):

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

111 (nur den ganzen String einpacken und das Eval entfernen):

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

4
sieht sonst noch jemand eine schildkröte drin ...? wtf
Keine Ahnung

hehe, yeah, die von obfuscatweet generierten "zufälligen" Unicode-Zeichen führen manchmal zu emoji :)
xem

5

C - 145 - probier mich aus

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 - probier mich aus

#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
Ich bin nicht viel von einem C - Programmierer, so vergib mir , wenn ich naiv bin zu sein, aber Sie brauchen nicht #include <stdio.h>zu verwenden printf?
Kyle Kanos

1
Standardbibliotheken sind in vc ++ und gcc mit dem Quellcode verknüpft. Wenn Sie also nichts Besonderes benötigen, können Sie eine Golfherausforderung nach Belieben starten, indem Sie main(){...
Folgendes

Ah ich sehe. Das ist seltsam, dass es eine Warnung ausgibt, wenn es standardmäßig akzeptiert wird (nur mit meinem gcc & icc geprüft, kein vc ++ zu testen).
Kyle Kanos

es spuckt auch Sequenzpunkt Warnung so ...- w :)
Bebe

@Kyle-Include-Dateien definieren, wie externe Funktionen funktionieren (Rückgabetyp und Parameter). Nichts mit dem Verknüpfen von Bibliotheken zu tun. Ein Standard-C-Compiler übergibt beliebige Parameter an eine Funktion (mit Warnungen), und Rückgabewerte werden häufig ignoriert, sodass es trotzdem funktioniert.
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";

Saubere Version:

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

Bearbeitet meinen ersten Versuch; es hat funktioniert, als ich es zum ersten Mal getestet habe, aber das scheint ein Zufall zu sein; Nachträgliches Inkrementieren in einem Stream ist "undefiniertes Verhalten", und es hat seltsame Dinge bewirkt (einschließlich Bluescreening für Windows 7!), als ich versuchte, ihn erneut auszuführen. Ich denke, dass die Verwendung von printf anstelle von std :: cout mit post-increment verwendet werden könnte, um ein kürzeres Programm zu erhalten.

Wurde erneut bearbeitet und durch erneutes Implementieren der Schleife auf 231 reduziert. Nochmals bearbeitet, jetzt auf 203 ... diese #Defines waren in der Loop-Version nicht alle nützlich.

Für diejenigen, die sich fragen, wie C ++ eine Funktion "m" ausführen kann, kann der Einstiegspunkt als jede Funktion mit nur einer Compileroption definiert werden, ebenso wie das Setzen aller Funktionen auf stdcall; Ich habe beide Schalter beim Kompilieren der obigen verwendet. Wenn Ihnen der neu definierte Einstiegspunkt nicht gefällt, addieren Sie 3 zu meiner Zeichenanzahl.


Welchen Compiler verwenden Sie? Mit gcc (4.7.1) kann ich die Hauptfunktion nicht aufrufen m(). Sie können jedoch voidmain
löschen

Wie um alles in der Welt hat es irgendwelche Stimmen bekommen? Erstens haben Sie eine Funktion namens 'm' geschrieben, die standardmäßig nicht kompiliert wird. Zweitens zeigt jeder Compiler die Stunden in umgekehrter Reihenfolge an. dies braucht eine BIG Korrektur
bebe

1
@HackerCow Ich kann VS2013 scheinbar nicht zum Laufen bringen, ohne dass der Rückgabetyp "void" definiert ist. Gibt es einen Compiler-Schalter, der das zulässt?
Darren

1
@bebe Ich erkläre den m () Einstiegspunkt in meiner Bearbeitung; Was die in umgekehrter Reihenfolge gedruckten Ausgangsstunden betrifft, habe ich es nie geschafft, das zu duplizieren, aber ich habe es geschafft, dass es richtig gedruckt wird (das erste Mal, als ich es ausprobierte), dann beim erneuten Testen aller Einsen, Fünfsen und Zwölfen, dann bei einem anderen erneut testen, es stürzte das Betriebssystem ab. Also, technisch lief es einmal, aber sich auf undefiniertes Verhalten zu verlassen, ist wahrscheinlich eine "schlechte Idee", also habe ich es umgeschrieben :)
Darren

1
@bebe Ich bin so oder so cool; Auf keinen Fall werde ich ein Code-Golf-Puzzle mit C ++ "gewinnen", also ist das Hinzufügen von 3 Zeichen kein Problem. Ich bin damit einverstanden, dass -D-Switch-Makrodefinitionen betrügen würden, aber so ziemlich alle anderen Compiler-Flags scheinen mir legitim zu sein, da sie auch den Leuten in dem von Ihnen verknüpften Thread legitim erschienen. Jeder Vorteil, den Sie aus einfachen Compiler-Schaltern herausholen, wird nicht einmal das Spielfeld zwischen C ++ und Python / Bash / Perl usw. beeinträchtigen.
Darren

4

Schnell - 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

Eine fest codierte Lösung wäre wahrscheinlich kürzer gewesen.

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 für die Erkenntnis, dass die Hardcodierung kürzer wäre.
Kyle Kanos

1+1+1ist 9 Zeichen kürzer als "two".length()". Und ist das String[] anötig?
Kyle Kanos

Das fühlte sich irgendwie nach Schummeln an, und ja, String [] a ist notwendig.
Unterverdient

Es ist kein Betrug, mehrere Leute haben es benutzt: D
Kyle Kanos

3

Befunge-98 ( 402 268)

Nun ein unefunge!

".thginot kcolc eht dnuora kcor annog er'eW"a11+/a*1-> #;:,1+" ,",,:,1+" ,",,:,1+" ,kcolc'o "a1-k,:,1+a",kcor kcolc'o "ek,:a11+/a*b1111+++-+-#;_:,a-1+" ,",,:a111++-:*,,1+" ,",,:a111++-:*,,1+" ,kcolc'o "a1-k,:a111++-:*,,1+a",kcor kcolc'o "ek,:a11+/a*b1111+++-+$$$aa*k,@

1
Zufallsbits von rückwärts Text, ,,:,1+, a11+/a*b1111+++-+w:,, Streuzeichen unterhalb der Hauptcodezeile ... typisch Befunge. Die meisten Online-Dolmetscher haben Probleme mit der Leitungslänge (sie liegt weit über dem Limit). Kennen Sie eine, die nichts dagegen hat?

Ich konnte keine Befunge-98-Compiler online finden, aber Sie könnten Pyfunge verwenden, das in PyPI verfügbar ist.
Waylon531

3

Groovy - 140 139 Zeichen

Golf, beeinflusst von William Barbosas Antwort :

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, ich denke das ist die beste Strategie, aber sie kann kürzer sein .

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
Es sei denn, meine Mathematik ist scheiße, wenn Sie P(", ")anstelle von Q2 Zeichen speichern.
Kyle Kanos

2
Nund Rnur einmal auftauchen: Es wäre besser, sie einzubinden, als ein Makro zu erstellen.

Mit den obigen Kommentaren und mehr kann dies auf 200 komprimiert werden (auch mit den von meinem Compiler #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.";}
gewünschten

2

Java (v2) - 250 241 232 Zeichen

Dies ist ein vollständiges laufendes Programm, beeinflusst von William Barbosas Antwort beeinflusst wird .

Golf gespielt:

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

Verwendet nicht einmal die erlaubte 1Ziffer:

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

Getestet in der Firefox-Konsole.


oder 114 Zeichen mit xem.github.io/obfuscatweet ;)
xem

4
@xem, ich weiß, dass es in den Buchstaben des Gesetzes passt, aber ich bin kein Fan von Unicode-Komprimierung (oder anderen Compilern / Generatoren). In meinen Augen ist Golf ein Test für Geschicklichkeit und jeder Code sollte von Hand gefertigt werden ... aber das bin nur ich.
Alconja

2

PowerShell, 123 118 109

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

Nach einem schrecklichen Start (167) habe ich ein paar Redewendungen, die ich nicht einmal brauchte, entfernt und sie zumindest kürzer als die Referenz gemacht.


2

Haskell - 138 137 Zeichen

Als eigenständiges Programm:

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

Bearbeiten: Früher hatte ich eine Hilfsfunktion, mit der ich s definieren konnte

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

es stellt sich jedoch heraus, dass es 1 zusätzlichen Charakter kostet. Gibt es eine Möglichkeit, alle "Uhr" s / "Rock" s / "Ock" s zu komprimieren?


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)

Ich mache einen String wie "x, x, x Uhr x Uhr rock, \ n ..." Dann ersetze ich die "x" durch Zahlen.


1

PHP 150

Keine Zahlen, einschließlich der 11, bei denen es sich nicht um zwei zusammengeklebte Einsen handelt, sondern der Zahlenwert elf.

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

Es fehlt der abschließende Punkt.
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." 

Sie können es auf 127 herunterschalten, indem Sie $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'innerhalb der Schleife verwenden.
Joey

@ Јοеу In der Tat, danke für den Rat!
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"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.