24 saat


46

Mümkün olduğunca az Unicode karakterde aşağıdakileri yazdırın (144 karakter):

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.

Rakam dışında kodunuzda herhangi bir sayı kullanmamalısınız 1.


1
İlk 3 satırın sonunda boşluklar var, bunlar sayılıyor mu?
aditsu

@aditsu: Bunlar m.buettner'ın bir kod bloğunu düzenlerken kaldırmayı unuttuğu gibi düzenlemeden kaynaklanıyor. Bunu değiştirirdim, ancak düzenlemenin çok küçük olduğu kabul edildi.
Wrzlprmft

1
Onları şimdi kaldırdım
aditsu

4
Birkaç cevap kullanır 11. Talimat yalnızca kullanabilirsiniz anlamına mı numara 1 veya rakamı 1?
mfvonh

10
@mfvonh Kullanabileceğinizi söyledim 1. Kaç kez belirtmedim, bu yüzden insanların kullandığı 11gerçek akıllıca bir boşluktur ve ben de hepsi için.
rybo111

Yanıtlar:


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

Aslında, bu 11 ikiden 1'inden oluşuyor sanırım kuralları geçmeme izin veriyor.

açıklama

K +++ s, (k ++) + s değerine eşittir, bu nedenle önce x'e k, sonra k artışına ve sonra x'e x eklenir. Bu işlem son cümleyi eklemeye başlamadan önce üç kez yapılacaktır.


Neden {}? Bu süre için gerekli değil, sadece 1 talimatınız var. Ama ";" kullanmanız gerektiği gibi sadece 1 karakter kazanacaksınız. ^^
Antoine Esteve

3
Ne yapar k+++s? Öyle mi (k++) + syoksa k + (++s)yoksa (k++) + (++s)?
seequ,

31
Bu saçmalık için +1:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher

2
@ trlkly genellikle JS'de golf oynamak için bir çıktı ifadesi kullanmanız gerekir ve alertbundan daha kısadır console.log. Konsolda son hesaplamanın otomatik gösterimini kullanmak hile yapmak gibidir.
edc65

15
Brainfuck olmadığından emin misin?
Michael Hampton

37

C # - 186

En iyi golf dili veya en iyi golf dili?

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

Neden bu kadar çok oy aldığını merak ediyorum. Golf dostu olmayan arkadaşlar girişleri gibi insanlar, belki
William Barbosa,

7
C ++ 'da yapmak için bana ilham verdi, bu yüzden oy aldı. Gerçek Erkekler (tm) kod golf için woosy yorumlanmış dilleri kullanmaz!
Darren,

aslında i++ +bitlerdeki boşluklara ihtiyacınız yok
DLeh

Dotnetfiddle üzerine yazdım ve boşluklar olmadan derlemedi. Gösterdiğin için teşekkürler.
William Barbosa

WriteLine-> Writekullanarak \nve dizenin sonundaki değişmezi kullanarak birkaç tane daha tıraş edebilirsiniz .
Alconja

27

Brainfuck (1574)

Ciddi bir başvuru değil, kuralları takip eder.

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

Burada test edilebilir .


12
Brainfuck cevapları her zaman saygıyı hak eder.
Pharap

1
Belki de ona "en uzun cevap" ödülünü vermeliyiz? #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
Başka bir kaç karakter daha kaydedebilirsiniz s="%i, %i#{", %i o'clock"*-~1} rock,\n"( \ndeğişmez bir satır sonu ile değiştirin ). Kullanmak için harika bir fikir $$!
Ventero

3
Önceki yorumuma genişletme: r=-~1Satır içi atarsanız , atamayı bırakmanıza izin vermek "..."*-~ryerine bunun yerine kullanabilirsiniz . s+s+ss
Ventero

Çok hoş, bu düzenlemeleri yapacak.
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

Düzenli ifade maçları (, )ve *. Ben ASCII kodunun (40, )41 ve *42 olduğu gerçeğini kullandım .

rNormal ifadenin bayrak "yer yerine" olanak ve ebayrak (benzer kod değerlendirmesini sağlayan x.replace(/.../, function(m){...})JavaScript).

(clock,rock)iki "çıplak kelime" dizisidir. $&normal ifadenin şimdiki eşleşmesi ve ord$&ASCII değeri.

3 ile maskelenmiş veya 1+1+1ASCII değerleri şimdi 0, 1 ve 2'dir, bu yüzden karşılık gelen dizi elemanını almak için bunları kullanabilirim. 2 dizinin dışında olduğu için "kısa devre" operatörü ||değerlendirir ++$i. İlk maçta $io undefkadar artar ki 1, sonra 2 ve daha ...

Basit bir deyişle. Bu *, şu anki haliyle, ("saat" ve )"rock" ile yer değiştirir.


1
Does. Değil. Compute. Açıklama lütfen?
seequ

1
@ TheRare Açıklama eklendi;)
core1024

6
Bu kara büyü. +1
seequ

Bu, Perl’in yaptığı türden bir şey.
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 kodlanmış Unicode sürümü (unicode oluşturma işlemlerinin berbat olması durumunda):

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, fonksiyon bildiriminin kapanış ayracından sonraki noktalı virgül olarak gerekli değildir.
Manatwork

@ manatwork Hata! İyi yakalama - Oraya nasıl gizlice girdiğini bilmiyorum. Teşekkürler!
Dijital Travma,

1
Artık Windows üzerinde değilim, ama kullanmak sebebi nedir evaliçin pipeing yerine bashya sh?
core1024,

@ core1024 Olasılığı unutmak benden başka hiçbir neden ;-) İpucu için teşekkürler!
Dijital Travma

1
Oops, $rs saymadı!
Shahbaz

13

Brainfuck, 1299

Bleuuuurgh . Berbattı. Bunu neden yaptığımı bilmiyorum, başlangıçta oldukça kolay görünüyordu. İlk ve muhtemelen son Brainfuck betiği. Burada dene.

Otomatik bir kod oluşturucunun yardımıyla, her birini sıfırdan oluşturmak yerine karakterlerin çoğunu yeniden kullanan bir komut dosyası yazabildim. Bu yayınlanmıştır otomatik olarak oluşturulan birine göre sadece 275 karakter daha kısa burada .

Çıktı yeni satır sonlandırılmadı.

Daha sonra biraz açıklama yapabilirim. Temel olarak, bir şey gibi olmayan >>>>>>>ya <<<<<<<da >>.>>.>>.>>.bir karakter olmayan uzun bir çizgi .

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

10

Lua - 217 164 154 151 149 143

Bir döngü kullanmak için eskisi değiştirilmiş, yerine tekne yükü karakter kaydeder. TeunPronk'a 10 karakter daha tıraş etmeme yardım ettiğin için ve diğer 3 karakter tıraş için WilliamBarbosa'ya teşekkür ederim. Değişken kullanılarak 2 karakter daha kaydedilebilir k. r=" rock,"Bir kez kullanıldığı için değişkeni ortadan kaldırarak 6 karakter daha kaydedilir .

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

Eğer yerine bir döngü kullanırsanız daha kısa olabilir acaba jve k.
Teun Pronk

@TeunPronk: haha, yorumunuzu bana
attığı

1
157'ye indirebilirsin. Her 3 numaradan sonra virgül gerekmez. Uzay Infront koyun Okaldır, Ogelen R, içinde bir boşluk yerleştirmek Rve değiştirme Rile O,Rsizin de io.write:)
Teun PRONK

1
@TeunPronk: Güncelleme. Yardımınız için teşekkürler!
Kyle Kanos,

1
io.writeBir değişkende saklayabilirsiniz ( f=io.write) ve bunu daha da azaltabilirsiniz
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~

Onları http://cjam.aditsu.net/ adresinde deneyin


Unico'nuz ... "Bu cevap değiştirildi." Oh boşver.
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

burada test edin: ideone.com/Wi9ftB

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

söz verdiğim gibi, işte daha iyi bir sürüm. beynim gibi hissediyor .. ooh bu yüzden ismin geldiği yer orası.

açıklama: (çünkü sürdürülemez ve nasıl çalıştığını unutmak istemiyorum)

öncelikle bu zorluk için en iyi veri düzenini seçmelisiniz. ile geldim

-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

Çok fazla vardiya olmadıkça, bunun en uygun olduğuna inanmalıyız (bu durumda düzeni yeniden ayarlamanız gerekir)

Ondan sonra, yeni satır, sayı, iki küçük harf ve virgül için başlangıç ​​değerlerini ayarlamak üzere 4x9x3 bir döngü kullandım. (tüm küçük ascii kodları 4x9 = 36 ve iki küçük harf de 4x9x3 = 108, sonra da gerçek değerlerini elde etmek için bazılarını ekledim ve çıkardım)

Ön ayar yapıldığında, kod 3 kez dönen en dıştaki döngüye girer. Bunu sahte kodla açıklıyorum.

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'

Bu bölüm tamamlandığında, sadece son satırı yazdırmak zorundayım. Fakat çok fazla karakter kullanmadan üretilmesi gereken büyük bir W harfimiz var. Bu noktada biz buradayız:

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

bu yüzden [-3] 'i 4 kez [-1]' e ve alt çıktısını 3 'ü 87 (W)' ye getirdim: >[>>++++<<-]>>---.
daha sonra silin [-]
ve [-2] 'yi bu konuma [-1] getirerek boşluk küçük harflere yakın olacaktır.<[>+<-]

Bundan sonra sadece harfleri yazdırır. küçük harf # 1, küçük parça 97-107 için ve küçük harf # 2 ise yukarıdaki bölge içindir.


2
BF yanıtlarından 300 karakter daha kısa olduğu için +1
durron597

daha da aşağı gitmeyi düşünüyordum. koşullar iyi bir eğitim olmadan oluşturmak çok kötü (eşyalar yetersiz) ancak ~ 200 karakter daha kısa olabilir
bebe

6

JavaScript, 111 107 karakter, hiçbir numara kullanmadan.

Bu snippet'leri tarayıcınızın JS konsolunda yürütün:

107 ( http://xem.github.io/obfuscatweet/ ve diğer JS cevaplarından ilham alınmıştır ):

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

111 (yalnızca tüm dizgiyi paketleyerek ve eval'ün etrafını kaldırarak):

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

4
orada kaplumbağa gören başka biri var mı? wtf
Dunno

hehe, evet, obfuscatweet tarafından oluşturulan "rasgele" Unicode karakterler bazen
emojiye

5

C - 145 - dene beni

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 - dene beni

#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
Çok fazla C programcısı değilim, bu yüzden saf olduğum için affedin ama #include <stdio.h>kullanmanıza gerek yok printfmu?
Kyle Kanos

1
varsayılan kitaplıklar vc ++ ve gcc'deki kaynakla bağlantılıdır (bu nedenle özel bir şeye ihtiyacınız yoksa, serbestçe yazarak bir golf oynamaya başlayabilirsinizmain(){...
bebe

Ah, anlıyorum. Varsayılan olarak kabul edilirse bir uyarı vermesi çok garip (sadece gcc & icc ile, test edilecek vc ++ ile kontrol edilmedi).
Kyle Kanos

ayrıca sıra noktası uyarısı da veriyor, böylece ...- w :)
bebe,

@Kyle dosya içerme harici fonksiyonların nasıl çalıştığını tanımlar (dönüş tipi ve parametreler). Kütüphaneleri bağlamakla ilgisi yok. Standart bir C derleyicisi, herhangi bir işleve istediğiniz parametreleri (uyarılarla) iletir ve dönüş değerleri genellikle göz ardı edilir, bu nedenle yine de çalışır.
edc65

5

PHP - 125 129

Sürüm 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";

Sürüm 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";

Temiz versiyon:

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

İlk denememi düzenledi; ilk test ettiğimde çalıştı, ama bu bir şansa benziyor; Bir akıştaki artma sonrası "tanımsız davranış" dır ve yeniden çalıştırmayı denediğimde garip şeyler yaptı (mavi ekran Windows 7! dahil)! Std :: cout yerine printf komutunun kullanılmasının, daha kısa bir program elde etmek için artım sonrası kullanılabileceğini düşünüyorum.

Tekrar düzenlendi, döngüyü tekrar uygulayarak 231'e indirdi. Yine bir kez daha düzenlendi, şimdi 203'e kadar ... Bu #defines döngü sürümünde pek kullanışlı değildi.

C ++ 'nın "m" fonksiyonunu nasıl çalıştırabileceğini merak edenler için, giriş noktası tüm fonksiyonların stdcall olarak ayarlanması gibi sadece bir derleyici seçeneğiyle herhangi bir fonksiyon olarak tanımlanabilir; Yukarıdakileri derlerken her iki anahtarı da kullandım. Yeniden tanımlanmış giriş noktasını beğenmiyorsanız, karakter sayıma 3 ekleyin.


Hangi derleyiciyi kullanıyorsun? gcc (4.7.1) ana işlevi çağırmama izin vermiyor m(). Ancak, voidkarakteri bırakıp 5 karakter kaydedebilirsiniz (veya yöntemi adlandırırsanız 2 main)
Christoph Böhmwalder

Nasıl dünya üzerinde herhangi bir artı aldın? ilk önce 'm' adlı bir işlevi yazdınız, varsayılan olarak derlenmeyecek, ikincisi her derleyici saati ters sırayla gösterecektir. Bunun BÜYÜK bir düzeltmeye ihtiyacı var
bebe,

1
@HackerCow VS2013'ü tanımlanmış geçersiz iade türü olmadan çalışmasını sağlayamıyorum; buna izin verecek bir derleyici anahtarı var mı?
Darren,

1
@bebe Düzenlememdeki m () giriş noktasını açıklarım; Çıkış saatlerinin ters sırayla basılmasıyla ilgili olarak, hiçbir zaman bunu çoğaltmayı başaramadım, ancak doğru bir şekilde yazdırmayı (ilk denediğimde), sonra 1, 5 ve 12'lerin hepsini tekrar test etmeyi başardım. yeniden test işletim sistemi çöktü. Bu yüzden, teknik olarak bir kez koştu, ancak tanımsız davranışa güvenmek muhtemelen 'kötü bir fikir', bu yüzden yeniden yazdım :)
Darren

1
@bebe Ben de harikayım; hiçbir şekilde C ++ ile herhangi bir kod golf bulmacasını "kazanmayacağım", bu yüzden 3 karakter eklemek biggie değil. -D switch makro tanımlarının hile yapacağına katılıyorum, ancak hemen hemen diğer derleyici bayraklarının tümü bana bağlı gibi görünüyor, çünkü bağladığınız konudaki insanlara okunaklı görünüyorlardı. Basit derleyici anahtarlarından sıktığınız herhangi bir avantaj C ++ ile Python / Bash / Perl vb. Arasındaki oyun alanını tam olarak eşitlemeyecektir.
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

Kodlanmış bir çözüm muhtemelen daha kısa olurdu.

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
Sabit kodlamanın daha kısa olacağının farkına varılması için +1.
Kyle Kanos

1+1+19 karakterden kısa "two".length()". Ve String[] agerekli mi?
Kyle Kanos

Bu tür hile gibi hissettim ve evet, String [] a gereklidir.
Hak edilmemiş

Hile yapmıyor, birkaç kişi kullandı: D
Kyle Kanos

3

Befunge-98 ( 402 268)

Şimdi bir 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
Geriye metnin Rastgele bitleri, ,,:,1+, a11+/a*b1111+++-+w:,, başıboş karakterler kodun ana hattı ... tipik Befunge altında. Çevrimiçi tercümanların çoğu, satır uzunluğu ile ilgili sorun yaşıyor (sınırın üzerinde bir yol), umrunda olmayan bir şey biliyor musunuz?

Befunge-98 derleyicilerini çevrimiçi ortamda bulamadım, ancak PyPI'de bulunan pyfunge'yi kullanabilirsiniz.
waylon531,

3

Groovy - 140 139 karakter

Golf, William Barbosa'nın cevabından etkilendi :

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, bence en iyi strateji bu ancak daha kısa olabilir .

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
Matematiğim berbat olmadığı sürece, P(", ")yerine Q2 karakter kullanırsınız.
Kyle Kanos

2
Nve Rsadece bir kez görünürler: onları satır içi yapmak makro yapmaktan daha iyidir.

Yukarıdaki yorumları ve daha fazlasını kullanmak, 200’e çıkarılabilir (derleyicimin istediği ad alanı ve ad alanları olsa bile):#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 karakter

Bu, William Barbosa'nın cevabından etkilenen tam bir koşu programıdır .

golfed:

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

İzin verilen 1basamağı bile kullanmıyor :

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

Firefox konsolunda test edilmiştir.


veya xem.github.io/obfuscatweet ;) kullanarak 114 karakter ;)
xem

4
@xem, kanun mektubuna uyduğunu biliyorum, ancak Unicode sıkıştırmasının (veya diğer derleyicilerin / jeneratörlerin) hayranı değilim. Aklımda, golf bir beceri testi ve tüm kod el yapımı olmalı ... ama bu sadece benim.
Alconja

2

PowerShell, 123 118 109

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

Korkunç bir başlangıçtan sonra (167) ihtiyacım olmayan birkaç deyimden kurtuldum ve en azından referanstan daha kısa sürdüm.


2

Haskell - 138 137 karakter

Bağımsız bir program olarak:

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

Düzenleme: o s tarafından tanımlamak için kullanılan bir yardımcı işlevi olması için kullanılır

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

ancak 1 ekstra karaktere mal oldu. Tüm "saat" ler / "rock" lar / "ock" lar için sıkıştırmanın bir yolu var mı?


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)

"X, x, x saat, x saat rock, \ n ..." gibi bir dize yapıyorum. Sonra "x'ler" i rakamlarla değiştiriyorum.


1

PHP 150

İki tane 1 olmayan, 11'i de içeren hiçbir numara birbirine yapışmamış, ancak onbir sayı.

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

Son durakta eksik.
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." 

$i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', 'Döngü içinde kullanarak bunu 127'ye indirgeyebilirsiniz.
Joey,

@ Јοеу Gerçekten, tavsiyeler için teşekkürler!
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"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.