Kołysz się przez całą dobę


46

W jak najmniejszej liczbie znaków Unicode, wydrukuj następujące (144 znaki):

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.

Nie wolno używać żadnych cyfr w kodzie, z wyjątkiem cyfry 1.


1
Na końcu pierwszych 3 wierszy są spacje, czy one się liczą?
aditsu

@aditsu: Są one spowodowane edycją, ponieważ m.buettner zapomniał je usunąć podczas edycji z powrotem do bloku kodu. Chciałbym to zmienić, ale zmiana jest uważana za zbyt drobną.
Wrzlprmft


4
Używa kilku odpowiedzi 11. Czy instrukcja oznacza, że ​​możesz używać tylko cyfry 1 lub cyfry 1?
mfvonh

10
@mfvonh Powiedziałem, że możesz użyć 1. Nie określiłem ile razy, więc fakt, że ludzie używali, 11jest sprytną luką i jestem za tym.
rybo111

Odpowiedzi:


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

Fakt, że 11 składa się z dwóch 1, pozwala mi przejść zasady, jak sądzę.

Wyjaśnienie

K +++ s jest równe (k ++) + s, więc najpierw dodaje k do x, następnie zwiększa k, a następnie dodaje s do x. Ten proces zostanie wykonany trzy razy, zanim doda ostatnie zdanie.


Dlaczego ty {} ? Na razie nie jest to potrzebne, masz tylko 1 instrukcję. Ale jak trzeba użyć „;” wygrasz tylko 1 char. ^^
Antoine Esteve

3
Co ma k+++szrobić? Czy to (k++) + sczy k + (++s)czy (k++) + (++s)?
patrz

31
+1 za ten nonsens:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher

2
@trlkly zwykle gra w golfa w JS, musisz użyć instrukcji wyjściowej i alertjest on krótszy niż console.log. Korzystanie z automatycznego wyświetlania ostatnich obliczeń w konsoli jest jak oszustwo.
edc65

15
Jesteś pewien, że to nie Brainfuck?
Michael Hampton

37

C # - 186

Najlepszy język golfa czy najlepszy język golfa?

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

Zastanawiam się, dlaczego zdobył tak wiele głosów. Być może ludzie lubią hasła nie przyjazne dla golfistów
William Barbosa,

7
Zainspirował mnie do zrobienia tego w C ++, więc dostaje głos. Prawdziwi mężczyźni (tm) nie używają woosy interpretowanych języków do golfa kodowego!
Darren,

tak naprawdę nie potrzebujesz spacji w i++ +bitach
DLeh

Napisałem to na dotnetfiddle i nie skompilowało się bez spacji. Dzięki za wskazanie tego.
William Barbosa

Możesz ogolić jeszcze kilka, wykonując WriteLine-> Writei używając literału \nna końcu łańcucha.
Alconja,

27

Brainfuck (1574)

Nie jest to poważne zgłoszenie, ale zgodne z zasadami.

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

Można przetestować tutaj .


12
Odpowiedzi Brainfuck zawsze zasługują na szacunek.
Pharap

1
Może powinniśmy przyznać mu nagrodę za „najdłuższą odpowiedź”? #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
Możesz zapisać kolejne kilka znaków za pomocą s="%i, %i#{", %i o'clock"*-~1} rock,\n"(zamień na \ndosłowny podział wiersza). Świetny pomysł do użycia $$!
Ventero,

3
Wracając do mojego poprzedniego komentarza: jeśli przypisujesz r=-~1wbudowany, możesz go użyć "..."*-~rzamiast s+s+s, co pozwala upuścić przypisanie do s.
Ventero

Bardzo fajnie, wprowadzę te zmiany.
histokrata

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

Wyrażenie regularne pasuje (, )i *. Wykorzystałem fakt, że kod ASCII (to 40, )to 41 i *42.

rFlaga wyrażenia regularnego umożliwia „w miejsce podstawienia” i eflaga umożliwia ocenę kodu (podobnie jak x.replace(/.../, function(m){...})w JavaScript).

(clock,rock)to tablica dwóch „nagich słów”. $&jest bieżącym dopasowaniem wyrażenia regularnego i ord$&jest wartością ASCII.

Zamaskowane przez 3 lub 1+1+1wartości ASCII wynoszą teraz 0, 1 i 2, więc mogę ich użyć do pobrania odpowiedniego elementu tablicy. Ponieważ 2 jest poza układem, operator „zwarcia” ||ocenia ++$i. W pierwszym meczu $ijest undefwięc zwiększając go dostać 1, potem 2 i tak dalej ...

W prostych słowach. To zastępuje *się obecnym występowaniem, („zegarem” i )„kamieniem”.


1
Robi. Nie. Obliczać. Wyjaśnienie proszę?
patrz

1
@ Dodano wyjaśnienie TheRare;)
core1024

6
To czarna magia. +1
patrz

Właśnie z tego powodu stworzono Perla, co nie jest zaskoczeniem, że radzi sobie tak dobrze.
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

wersja Unicode zakodowana w base64 (na wypadek pomyłki w renderowaniu Unicode):

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, ponieważ średnik po nawiasie zamykającym deklarację funkcji nie jest potrzebny.
manatwork

@manatwork Ups, dobry haczyk - nie wiem, jak tam się wślizgnął. Dzięki!
Cyfrowa trauma,

1
Jestem teraz w systemie Windows, ale jaki jest powód, aby używać evalzamiast potokowania do bashlub sh?
core1024

@ core1024 Nie bez powodu zapomniałem o możliwości ;-) Dzięki za wskazówkę!
Digital Trauma

1
Ups, nie liczyłem $rs!
Shahbaz

13

Brainfuck, 1299

Bleuuuurgh . To było okropne. Nie wiem, dlaczego to zrobiłem, na początku wydawało się to dość łatwe. Pierwszy i prawdopodobnie ostatni skrypt Brainfuck. Wypróbuj tutaj.

Z pomocą automatycznego generatora kodów mogłem napisać skrypt, który ponownie wykorzystał większość znaków, zamiast generować je od zera. Jest tylko 275 znaków krótszy niż automatycznie generowany, opublikowany tutaj .

Wyjście nie jest zakończone znakiem nowej linii.

Później mógłbym wyjaśnić. Zasadniczo, każda długa linia, która nie jest czymś >>>>>>>lub <<<<<<<lub >>.>>.>>.>>.generuje postać lub serii z nich.

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

10

Lua - 217 164 154 151 149 149 143

Zmodyfikowano stary, aby zamiast tego używał pętli, oszczędzając ładunek znaków. Dziękuję TeunPronk za pomoc w goleniu kolejnych 10 znaków, a WilliamBarbosa za golenie kolejnych 3 postaci. Za pomocą zmiennej można zapisać 2 kolejne znaki k. 6 kolejnych znaków jest zapisywanych przez wyeliminowanie zmiennej, r=" rock,"ponieważ jest ona używana raz.

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

Nie golfowany,

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

Zastanawiam się, czy może być krótszy, jeśli użyjesz pętli zamiast ji k.
Teun Pronk

@TeunPronk: haha, właśnie to zmieniałem, gdy twój komentarz mnie
pingował

1
Możesz sprowadzić go do 157. Nie potrzebujesz przecinka po każdym 3 numerze. Umieścić Infront kosmiczny O, wyjąć Oz Rumieść spację Ri zastąpić Rprzez O,Rw io.write:)
Teun PRONK

1
@TeunPronk: zaktualizowano. Dzięki za pomoc!
Kyle Kanos

1
Możesz przechowywać io.writew zmiennej ( f=io.write) i jeszcze bardziej ją zmniejszać
William Barbosa,

8

CJam - 90 Unicode ASCII / 54

ASCII:

{{T):T}:F~", ":CFCF" o'clock":OCFO" rock,
"}Z*"We're gonna rock around the clock tonight."

Unicode:

"ξ漰㠬༳ᆧᶃ㸩씪咦⏚騤䖫퍃᰽薂ᴤਥ궋씻㱗㽫Ƶꐥ勋䎔䃱魠ꝯ朐酠礢璿狮꓈执낦덋觫ᥛ琚"GZ)#bBC*b:c~

Wypróbuj je na http://cjam.aditsu.net/


Twój unico ... „Ta odpowiedź została zredagowana”. Och nieważne.
patrzqu.

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

przetestuj tutaj: ideone.com/Wi9ftB

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

tak jak obiecałem, oto lepsza wersja. mój mózg czuje się jak ... och, stąd pochodzi nazwa.

wyjaśnienie: (ponieważ jest nie do utrzymania i nie chcę zapomnieć, jak to działa)

po pierwsze musisz wybrać najlepszy układ danych dla tego wyzwania. wymyśliłem

-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

Musimy wierzyć, że jest to optymalne, chyba że będzie zbyt wiele zmian (w takim przypadku musisz zmienić układ)

Następnie użyłem pętli 4x9x3, aby ustawić wartości początkowe dla nowej linii, liczby, dwóch małych liter i przecinka. (wszystkie mniejsze kody ascii otrzymały 4x9 = 36, a dwie małe litery - 4x9x3 = 108, a następnie dodałem i odjąłem niektóre, aby uzyskać ich prawdziwą wartość)

Po zakończeniu ustawienia wstępnego kod wchodzi w skrajną pętlę, która wykonuje cykl 3 razy. Tłumaczę to pseudokodem.

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'

Po zakończeniu tej sekcji muszę po prostu wydrukować ostatni wiersz. Ale mamy wielką literę W, która musi być wyprodukowana bez użycia zbyt wielu znaków. W tym momencie jesteśmy tutaj:

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

więc wstawiam [-3] 4 razy na [-1] i odejmuję 3, aby uzyskać 87 (W): >[>>++++<<-]>>---.
następnie go usuwam [-]
i przesuwam [-2] do tej lokalizacji [-1], aby spacja była blisko małych liter.<[>+<-]

Następnie drukuje tylko litery. mała litera # 1 dotyczy dolnej części 97-107, a mała litera # 2 dotyczy powyższego regionu.


2
+1 za to, że jest o 300 znaków krótszy niż inne odpowiedzi BF
durron597

myślałem o pójściu jeszcze niżej. warunki są okropne do stworzenia bez przyzwoitego samouczka (esolangi są wyłączone), ale może być krótszy o ~ 200 znaków więcej
bebe

6

JavaScript, 111 107 znaków, bez użycia żadnej liczby.

Wykonaj następujące fragmenty w konsoli JS przeglądarki:

107 (zainspirowany http://xem.github.io/obfuscatweet/ plus inna odpowiedź JS):

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

111 (wystarczy spakować cały ciąg i usunąć eval):

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

4
ktoś jeszcze widział tam żółwia ...? wtf
Dunno

hehe, tak, „losowe” znaki Unicode generowane przez obfuscatweet czasami prowadzą do emoji :)
xem

5

C - 145 - wypróbuj mnie

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 - wypróbuj mnie

#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
Nie jestem zbytnio programistą C, więc wybacz mi, jeśli jestem naiwny, ale czy nie potrzebujesz #include <stdio.h>tego używać printf?
Kyle Kanos

1
biblioteki domyślne są połączone ze źródłem w vc ++ i gcc (więc jeśli nie potrzebujesz czegoś specjalnego, możesz swobodnie rozpocząć grę w golfa, piszącmain(){...
bebe

O, rozumiem. To dziwne, że wyrzuca ostrzeżenie, jeśli jest domyślnie zaakceptowane (po prostu sprawdzone za pomocą mojego gcc i icc, bez testowania vc ++).
Kyle Kanos

pluje także ostrzeżenie o punkcie sekwencyjnym, więc ... - w :)
bądź

Pliki załączników @Kyle definiują działanie funkcji zewnętrznych (typ i parametry zwracane). Nie ma nic wspólnego z łączeniem bibliotek. Standardowy kompilator C przekaże dowolne parametry do dowolnej funkcji (z ostrzeżeniami), a zwracane wartości są często ignorowane, więc i tak działa.
edc65

5

PHP - 125 129

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

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

Czysta wersja:

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

Zredagowałem moją pierwszą próbę; zadziałało, kiedy pierwszy raz go przetestowałem, ale wydaje się, że to fuks; post-inkrementacja w strumieniu jest „niezdefiniowanym zachowaniem” i działało dziwnie (w tym niebieski ekran Windows 7!), kiedy próbowałem go ponownie uruchomić. Myślę, że użycie printf zamiast std :: cout może być użyte z post-incrementem, aby uzyskać krótszy program.

Ponownie zredagowano, przywrócono do 231, ponownie implementując pętlę. Edytowane ponownie, teraz do 203 ... te # definicje nie były przydatne w wersji z zapętleniem.

Dla tych, którzy zastanawiają się, w jaki sposób C ++ może uruchomić funkcję „m”, punkt wejścia można zdefiniować jako dowolną funkcję z opcją kompilatora, podobnie jak ustawienie wszystkich funkcji na stdcall; Użyłem obu przełączników podczas kompilacji powyższego. Jeśli nie podoba ci się ponownie zdefiniowany punkt wejścia, dodaj 3 do mojej liczby postaci.


Z jakiego kompilatora korzystasz? gcc (4.7.1) nie pozwala mi wywoływać funkcji głównej m(). Możesz jednak upuścić voidi zapisać 5 znaków (lub 2, jeśli main
nazwiesz

jak, u licha, zyskało to poparcie? po pierwsze napisałeś funkcję o nazwie „m”, która domyślnie się nie kompiluje, po drugie każdy kompilator pokazuje godziny w odwrotnej kolejności. wymaga to WIELKIEJ korekty
bebe

1
@HackerCow Nie mogę sprawić, by VS2013 działał bez zdefiniowanego typu zwrotu void; czy istnieje przełącznik kompilatora, który to pozwala?
Darren,

1
@bebe W mojej edycji wyjaśniam punkt wejścia m (); jeśli chodzi o godziny wyjściowe drukowane w odwrotnej kolejności, nigdy nie udało mi się tego powielić, ale udało mi się uzyskać prawidłowe drukowanie (za pierwszym razem, gdy próbowałem), a następnie po ponownym przetestowaniu wszystkich 1, 5 i 12, a następnie innego ponownie przetestował system operacyjny. Tak, technicznie rzecz biorąc, zadziałało to raz, ale poleganie na niezdefiniowanym zachowaniu jest prawdopodobnie „złym pomysłem”, więc przepisałem go :)
Darren,

1
@bebe Jestem fajny w obu kierunkach; w żaden sposób nie zamierzam „wygrać” żadnej układanki golfowej z kodem w C ++, więc dodanie 3 znaków nie jest biggie. Zgadzam się, że definicje makra przełącznika -D byłyby oszustwem, ale prawie wszystkie inne flagi kompilatora wydają mi się uzasadnione, ponieważ wydawały się również uzasadnione dla osób w wątku, który dowiązałeś. Jakakolwiek korzyść, którą wyciskasz z prostych przełączników kompilatora, nie wyrówna nawet pola gry między C ++ a Python / Bash / Perl itp.
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

Zakodowane rozwiązanie byłoby prawdopodobnie krótsze.

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 za uświadomienie sobie, że kodowanie na stałe byłoby krótsze.
Kyle Kanos

1+1+1jest o 9 znaków krótszy niż "two".length()". I jest String[] akonieczne?
Kyle Kanos

To trochę przypominało oszukiwanie i tak, String [] a jest konieczny.
Niezasłużony

To nie oszustwo, kilka osób z niego skorzystało: D
Kyle Kanos

3

Befunge-98 ( 402 268)

Teraz nieokreślony!

".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
Losowo wybrane fragmenty tekstu wstecznej, ,,:,1+, a11+/a*b1111+++-+w:,, znaków bezpańskie pod główną linię kodu ... typowy befunge. Większość internetowych tłumaczy ma problemy z długością linii (to znacznie ponad limit), czy znasz takiego, który nie ma nic przeciwko?

Nie mogłem znaleźć żadnych kompilatorów Befunge-98 online, ale możesz użyć pyfunge, który jest dostępny w PyPI.
waylon531,

3

Groovy - 140 139 znaków

Gra w golfa pod wpływem odpowiedzi Williama Barbosy :

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"

Nie golfowany:

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, myślę, że to najlepsza strategia, ale może być krótsza .

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
Chyba że moja matematyka jest do bani, użycie P(", ")zamiast Qratuje cię 2 postaci.
Kyle Kanos

2
Ni Rpojawiają się tylko raz: lepiej byłoby wstawić je niż zrobić makro.

Korzystając z powyższych komentarzy i innych, można to skondensować do 200 (nawet z przestrzeniami włączającymi i nazwami, których chce mój kompilator):#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 znaków

Jest to kompletny program działający pod wpływem odpowiedzi Williama Barbosy .

Gra w golfa:

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

Nie golfowany:

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

Nie używa nawet dozwolonej 1cyfry:

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

Testowany w konsoli Firefox.


lub 114 znaków przy użyciu xem.github.io/obfuscatweet ;)
xem.

4
@xem, wiem, że pasuje do litery prawa, ale nie jestem fanem kompresji Unicode (ani żadnych innych kompilatorów / generatorów). Moim zdaniem golf jest sprawdzianem umiejętności i cały kod powinien być wykonany ręcznie ... ale to tylko ja.
Alconja,

2

PowerShell, 123 118 109

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

Po okropnym początku (167) pozbyłem się kilku idiomów, których nawet nie potrzebowałem, a przynajmniej skróciłem je do referencji.


2

Haskell - 138 137 znaków

Jako samodzielny program:

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

Edycja: Kiedyś miałem funkcję pomocnika do definiowania s przez

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

ale okazuje się, że kosztuje 1 dodatkową postać. Czy jest jakiś sposób na skompresowanie wszystkich „o'clock” s / „rock” s / „ock”?


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)

Wykonuję ciąg typu „x, x, x godzina x godzina rock, \ n ...” Następnie zastępuję „x” cyframi.


1

PHP 150

Żadnych liczb, w tym 11, które nie byłyby dwoma zlepionymi jednościami, ale wartość jedenastki.

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

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

Nie golfowany:

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

Możesz go obniżyć do 127, używając $i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'w pętli.
Joey,

@ Indοеу Rzeczywiście, dzięki za radę!
DarkAjax,

1

Kobra - 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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.