Yağmurlu bir gün


42

bağlam

Sevgililer Günü. Sevdiğin tek kişi dün seni terk etti bu adam için her zaman "aptal ve ilgisiz" buldu . Eve giderken, trafikte sıkışıp kaldınız, radyoda eski şarkıları dinlediniz, ön cama çarpan yağmur sizi sallıyor. Arabanızda bir süre sonra, kendinizi küçük dairenizde, kendisinden başka bir şey düşünemeyen tek başınıza bulabilirsiniz. Işık yok ve karanlığın etrafını saran, pencereden bakıp duruyorsun. Konuşacak kimse yok, arkadaşların şimdi aklına takılan bu yeni kız hakkında seni uyardıktan sonra çoktan gitmişler. Bilgisayarınızı başlatabilirsiniz, yapabileceğiniz tek şey budur, tarayıcınızı açın ve fikrinizi değiştirmek için stackexchange'e yeni bir programlama bulmacası gönderin.

Meydan okuma

Seçtiğiniz dilde, yere düşen yağmuru simüle eden bir program yazın. Çıktı, ASCII karakterlerinden veya oluşturulmuş 2D / 3D'den oluşabilir. Kamera sabittir: doğrudan yere bakıyorsunuz. Programınız, her yeni bir "kare" oluşturduğunuzda konsolu veya sayfayı yenilemek gibi bir tür animasyon içermelidir. Gerçekçi olmalı, biraz öznel olduğunu biliyorum ama diyelim ki tüm alanı sadece bir büyük düşüşle dolduramazsınız.

Çıktı bir görüntü olmak zorunda değildir, ancak şifreli bir dil kullanıyorsanız, nasıl bir etki yarattığını göstermek için bir .gif sağlamak daha iyidir (ancak elbette eğer yapmazsanız puanınızı etkilemeyecektir).

kurallar

  • Puanınız kullanılan baytların toplamıdır
  • -20 renk kullanırsanız puan
  • -50 Eğer bir çeşit rüzgâr elde etmeyi başarırsan
  • En düşük puan kazanır

Örnek

Ne yapılması gerektiğine dair çok temel bir örnek:

Umarım daha iyisini yapar ve bu zorluğun tadını çıkarırsın.

İngilizcem için üzgünüm, bazı hataları düzeltmek istiyorsanız yayınımı düzenlemek için çekinmeyin

Liderler Sıralaması

Adınız listelenmemişse, girişiminiz kurallara uymuyor olarak kabul edilir.

Tobia - APL - 35  
j6m8 - Processing.js - 38
The Guy with The Hat - Processing - 42  
ace - Processing - 74  
kelunik - JS/CSS - 89  
Riot - Bash - 91  
Michael - JS/jQuery - 105  
Florent - HTML/JS - 123  
David Carraher - Mathematica - 134  
Doorknob - HTML/JS - 150  
undergroundmonorail - Python - 175

Tobia'yı tebrik ederim!


51
Umarım ilk paragraf gerçek bir hikaye değildir.
Kendall Frey

1
@DavidCarraher evet, gökyüzündeki zemine bakıyormuş gibi.

8
Potansiyel çıktılarda çok fazla esneklik olduğu için bunun kod-golf olması gerektiğini düşünmüyorum
Cruncher

4
Bu görüntülemenin kamera pozisyonu ile birlikte ilk paragrafı oldukça kaba.
Tobia,

Yanıtlar:


26

APL, 105 karakter / bayt * - 20 - 50 = 35 puan

e←{⍞←∊'␛['⍵}
e¨'36m' '?25l' '2J'
{⍵←3⌊⍵+3×0=?t⍴50
⍵{(⍵c)←⍕¨⍵+1
e⍵';'c'H',' .∘⍟'[⍺]}¨⍳t
∇0⌈⍵-1}0⍴⍨t←24 80

*: Çoğu APL uygulaması, APL sembollerini 128 baytlık değerlerle eşleştiren (eski) tek baytlık karakter kümesi biçimini destekler. Bu nedenle, golf oynamak amacıyla, yalnızca ASCII karakterlerini ve APL sembollerini kullanan bir program chars = bayt olarak puanlanabilir.

Nick'in OS X terminalindeki Node.js'deki en son apl.js dosyasını test ettim . Ancak lehçesine özgü hiçbir şey kullanmadım, bu yüzden bir ANSI terminalinde çalıştırılabilen herhangi bir modern APL üzerinde çalışmalı ve d-funs {...}, strand ataması (a b)←...ve Commute (örneğin Linux için veya Raspberry PI için) ile ⎕IO←0)

Hat 1 'de (1 bayt olan) bir sabit çıkış karakteridir. Bunu Ctrl-V Escbir Linux terminalinde veya Vim'de veya Alt-027Windows'taki gibi bir şey kullanarak girebilirsiniz . Ayrıca, terminal boyutunu bulmak için güvenilir bir yol bulamadım, bu nedenle son satırın sonundaki satır ve sütun sayısını düzenlemek isteyebilirsiniz.

50 bonusu, her yağmur damlasının aşağıdaki şekillerden geçtiği gerçeğiyle savunuyorum: ⍟∘.Bu, manzaraya yukarıdan bakıldığı sürece hafif bir rüzgâr izlenimi veriyor. Aslında, aşağıdaki gif'e bakıldığında, yere düşmeden önce her damlanın yavaşça aşağı ve sola doğru hareket ettiği izlenimini edinmelisiniz.

Ungolfed versiyonu:

e←{⍞←∊"␛["⍵}                  # utility to print escape sequence
e¨'36m' '?25l' '2J'            # set cyan, hide the cursor and clear screen
{                              # repeat (⍵=current board of raindrops)
  ⍵←3⌊⍵+3×0=?t⍴50              #   add some new drops (=3) in random places
  ⍵{                           #   print the drops (⍺=drop value, ⍵=coords)
    (r c)←⍕¨⍵+1                #     convert the coordinates to string
    e r';'c'H',' .∘⍟'[⍺]       #     print or clear the drop
  }¨⍳t                         #   ..
  ∇0⌈⍵-1                       #   remove 1 from every drop and repeat
}0⍴⍨t←24 80                    # ..starting with an empty board

Çıktı:

görüntü tanımını buraya girin


APL, farklı tarz

Rekabet dışı.

m←×/t←1+(ζη)←2×(βγ)←24 80
e←{⍞←∊(⎕UCS 27)'['⍵}
s←{⍵[β-1-⍳β;1+⍳γ]}
p←{⍺{e'H'⍺,⍨{⍺,';',⍵}/⍕¨⍵}¨(,s⍵)/,1+⍳βγ}
e¨'2J' '36m' '?25l'
{'/'p⍵←(200<m÷?t⍴m)∨0⍪⍵[⍳ζ;1+⍳η],0
' 'p(~⍵)∧0,⍵[1+⍳ζ;⍳η]⍪0
'.∘°'[?(+/,sδ)/3]pδ←⍵∧~d←.2<m÷⍨?t⍴m
∇⍵∧d}t⍴0

Buradaki amacım, gözle görülebilir damla sayısını (düşen veya sıçrayan) ortalama olarak sabit tutmaya çalışırken, eğimli bir şekilde düşen ve yere düşen yağmur damlalarının izlenimini vermekti. İşin püf noktası /, her döngüde birkaç yeni düşme damlası oluşturmak ve düşen damlacıkların seyahat ettikleri sıçramış olanları "yok etmesini" sağlamaktı.

Sonuç garip bir şekilde Matrix kodunu andırıyor.

Çıktı
(her 5 saniyede bir sarsıntı gif döngüsüdür)

görüntü tanımını buraya girin


Bu hoş, ama ESC karakterinin doğru yazdırıldığını sanmıyorum. i.stack.imgur.com/vLERQ.png Kodu gedit ile de yapıştırmayı denedim, işe yaramadı.
Riking

Skorunu yanlış aldın. Soru "bayt" diyor, "karakter" değil.
jazzpi

1
@Riking Bu bölümü düzenledim. Tekrar denerseniz, çalışması gerekir.
Tobia,

@ Tobia Bana IBM 5100'ünüzde otururken resminizi gösterin, ben chars = bytes argümanını satın alacağım.
primo


42

Bash: 111 bayt - 20 = 91 puan!

Terminalinde düşünceli, yumuşak bir çiseleme. 819 ve 41 sayılarını sırasıyla farklı yükseklik ve genişlik için ayarlayın.

e='printf \e';while :;do for i in {0..819};do((RANDOM<9))&&$e[1\;36m.||$e[1C;((i%41<1))&&$e'
';done;$e[20A;done

Ekran görüntüsü

Hoş bir ikramiye, imlecin yağmurlu alana atma şeklidir.

Düzenleme: @ manatwork'ün önerileri sayesinde 140 byte'tan 129 byte'a kısalma. 2. düzenleme: @ manatwork ve @ Tobia'nın önerileri ve ek ilham sayesinde 129 byte'tan 111 byte'a kadar kısalma - yorumlara bakınız.

(Not: ekran görüntüsü, kodun işlevsel olarak aynı olan daha az golf oynamış halini gösterir)


1
Yedekleyebilirsiniz: echoseçeneklerine katılarak 2 karakter ; Kullanılarak 2 karakter \eyerine \033; İle 3 karakter :yerine true; Aritmetik değerlendirme (kullanarak 5 karakter ((…))): e='echo -ne \e';while :;do for i in {0..19};do for i in {0..40};do ((RANDOM<9))&&$e"[1;36m".||$e[1C;done;$e' ';done;$e[20A;done.
Manatwork

1
Aritmetik değerlendirme için sigil'e ihtiyacınız yoktur. Ve kodunuzun sonunda takip eden bir yeni satır olmalı. Sadece 127 karakter olmalı.
Manatwork

1
@Manatwork öğesinin ne anlama geldiğine inanıyorum, dolar işaretini çift parantez içinde kullanmanıza gerek yok: aynı şekilde ((RANDOM<9))çalışıyor. Ayrıca, için ikisini birleştirerek kodunuzu küçülen deneyebilirsiniz {0..19}ve {0..40}bir tek içine {0..819}böyle bir şey kullanarak, $((i%41))onun içinde.
Tobia,

1
Biri beni durduracak !! e='printf \e'2 karakterden daha kısa e='echo -ne \e'!
Tobia,

1
Ve başka bir karakter kullanarak$e[C
Tobia

39

Python, 312 bayt - 50 (rüzgar) = 262

from pygame import*
R=__import__('random').randint
t,u=640,480;init();d=display;s=d.set_mode((t,u))
w=[255]*3;r=range(t)
a=[[R(0,t),R(0,u),R(3,6)]for i in r]
while time.wait(9):
 d.flip();event.get();s.fill(R(0,99)<1and w)
 for i in r:x,y,z=a[i];draw.line(s,w,(x,y),(x+z,y+2*z));a[i][0]=(x+z)%t;a[i][1]=(y+z*2)%u

Örnek çıktı (50 kare döngü):

Gerçek oyun paketi, giflerin izin verdiğinden çok daha hızlıdır.


3
@HristiyanCareaga Yapabilirim, ama bence beyaz daha iyi görünüyor.
primo

8
Gözlerimdeki tek sorun: Yandan gelen yağmuru görüyorsunuz, kurallar sabit bir kameranın aşağıya bakıyor olduğunu gösteriyor.
Johannes H.

7
@JohannesH. Veya, çok, çok rüzgarlı bir gün.
primo

20
Ara sıra şimşek çakması hoşuma gidiyor! : P
Şapkalı Adam

3
Satır R=__import__("random").randintyerine bir karakter kullanılır from random....
SimonT

35

HTML / JS, 170 karakter - 20 = 150 puan

<canvas id=c></canvas><script>d=400;with(c)width=height=d,t=getContext('2d');t.fillStyle='blue';setInterval("t.fillRect(Math.random()*d,Math.random()*d,5,5)",50)</script>

(sidenote: bir dize ileterek daha da golfed setInterval, with!, otomatik kimlik değişkeni isimlerinin ... o kadar yanlış geliyor shudders )

Sadece rastgele mavi dikdörtgenler çizer.

HTML / JS, 309 karakter - 20 - 50 = 239 puan

Şimdi rüzgarla!

<canvas id=c></canvas><script>s=400;r=Math.random;with(c)width=height=s,t=getContext('2d');t.fillStyle='blue';o=[];setInterval("t.clearRect(0,0,s,s);for(i=0;++i<o.length;)d=o[i],t.fillRect(d[0],d[1],d[2],d[2]),d[0]+=1,d[1]+=2,d[2]-=1,d[2]<0?o.splice(i,1):0;if(r()<.6)o.push([r()*400,r()*400,20])",50)</script>


163 bayt: <canvas id=c /><script>d=400;with(c)width=height=d,t=getContext('2d');t.fillStyle='blue';setInterval("t.fillRect(Math.random()*d,Math.random()*d,5,5)",50)</script>AAAHHH! Ben kullandım with! Bir dize iletmekten daha kirli hissediyorum setInterval: p
Karanlık Absol Niet

@NiettheDarkAbsol Teşekkürler;) Görünüşe göre (en azından Chrome'da) canvasotomatik olarak kapatamıyor , ama bunun dışında mükemmel çalışıyor! (Ayrıca, otomatik kimlik değişkeni adlarını kullanmak da çok kirli hissettiriyor: D)
Doorknob

Bazı tarayıcılar bu alanda daha yumuşak görünüyor ... Ama kullanmak zorunda kalmıyor onload. @ Florent'in Math.random()
kopyadan

@Doorknob canvasChrome'da otomatik kapanma ! Cevabım bu tarayıcıda geliştirildi / test edildi.
Florent

1
İkincisi için oy verin, damlar toprağa / su birikintisine batıyor.
GreenAsJade

34

JS + jQuery (172-20-50 = 102)

Tarayıcı konsolunda bu satırı Kopyala / Yapıştır (genellikle F12 tuşuna basın):

r=Math.random;w=$(window);setInterval("$('<b>♥</b>').css({color:'red',position:'fixed',top:r()*w.height(),left:r()*w.width()}).appendTo('body').animate({fontSize:0},3e3)",9)

Animasyonlu kırmızı kalpler Sevgililer günü için yağmur!

görüntü tanımını buraya girin


1
peki, gerçekçi değil. Ekranın üstünden kalpler geliyor ve sayfanın rasgele konumlarına yapışıyor. Bu gerçekten bakış açısı koşuluyla eşleşmiyor.

10
AUGGGGHH! Nasıl durdurabilirim?
Şapkalı Adam

1
@ user2509848 Ama başka bir yolu var mı?
Şapkalı Adam

3
@TheGuywithTheHat, sayfayı tekrar yükle
Michael M.

19
Parlak! Sanırım bu sorunun kalbi.
andrewb

26

Mathematica

134 - 20 = 114

2D

n = 99; m = Array[0 &, {n, n}]; r := RandomInteger[{1, n}, {2}]
Table[ArrayPlot[m = ReplacePart[m, r ->  1], ColorRules -> {1 -> Blue}], {k, 250}];
Export["d.gif", d]

2D


3 boyutlu

Yağmur damlası şekli, z ekseni etrafındaki bir devir parseliyle yapılır.

İlk olarak, teşhir bölgesinin çok üstünde uzanan bir bölge için yağmur meydana gelir. Yağan yağmur görünümü, Bakış Açısı z ekseni boyunca yukarı kaydırılarak elde edilir. (Her yağmur damlasının konumunu yeniden hesaplamaktan daha etkilidir.)

yağmur

r = RandomInteger; z = Table[{r@30, r@30, r@160}, {100}];
w = RevolutionPlot3D[{.7 Sin[x] Cos[x], 0,   1.4 Sin[x] }, {x, 0, -Pi/2}, 
PerformanceGoal -> "Speed"][[1]];
c = Map[Translate[w, #] &, z]; 
p = Table[Graphics3D[c, PlotRange -> {k, k + 50}], {k, 1, 100}]
Export["p.gif", p]

Rüzgar ile

Yağmurun rüzgârla yağmasına neden olacak önemli bir yük var. Ama yine de buraya dahil ediyorum.

Mavi zemin, {x, y} görünüm bölgesini ilgilenilen alanla sınırlı tutuyor. Bazı aksaklıklar var, ama, peki,

r = RandomInteger;
z = Table[{r@120, r@30, r@180}, {800}];
w = RevolutionPlot3D[{.7 Sin[x] Cos[x], 0,   1.4 Sin[x] }, {x, 
     0, -Pi/2}, PerformanceGoal -> "Speed"][[1]];
c = Map[Translate[w, #] &, z];
g[k_, z1_, w_, c1_] :=
 Module[{z2},
  z2 = Cases[z, {x_, _, _} /; 0 + k < x < 30 + k];
  c = Map[Translate[w, #] &, z2];
  Graphics3D[{Polygon[{{0 + k, 0, 1 + k}, {30 + k, 0, 1 + k}, {30 + k,
        30, 1 + k}, {0 + k, 30, 1 + k}}], c}, 
   PlotRange -> {k, k + 50}]]

p = Table[g[k, z, w, c], {k, 1, 100, 1}];
Export["p.gif", p]

rüzgarla


Doğrudan Yukarıdan

En yakın yağmur damlaları kırpıldı, ancak bunu görmezden geleceğim.

Yukarıdaki 3B

m=40;
r=RandomInteger;
positions=Table[{r@m,r@m,r@1000},{800}];
g[lowZ_,pos_]:=
Module[{hiZ=lowZ+103},
Graphics3D[{PointSize[Small],White,Point[{{0,0,lowZ},{0,m,lowZ},{m,0,lowZ},{m,m,lowZ},{0,0,hiZ},{0,m,hiZ},{m,0,hiZ},{m,m,hiZ}}],
ImageSize-> 350,Sphere/@Cases[pos,{_,_,z1_}/;lowZ<z1<hiZ-2]},PlotRange->{lowZ,hiZ}, 
ViewPoint-> {0,0,1},ImagePadding->5]]

50 karakterin altında bir kenara kaydırın ve puanınızı düşürün. :)
Ali Çağlayan

1
Bunu seviyorum

Sonuncusu için +1, doğru kamera açısı ile birlikte, kameranın yağmurun bir kısmını engellediğini unutmuşsun ....;)
GreenAsJade

@GreenAsJade, 3D (yukarıdan) bakış açısının kırpması şimdi düzeltildi.
DavidC

Tatlı ama düşündüğünden daha anlamsız davranıyordum. Buna bakarak fiziksel bir kamera olduğu anlamına
geliyordu

10

HTML / JavaScript, 156 123 (143 - 20)

<body bgcolor=0 onload="t=c.getContext('2d');t.fillStyle='#07d';setInterval('n=Math.random()*4e4;t.fillRect(n%270,n/150,1,1)',1)"><canvas id=c>

Açıklamalı sürüm:

<body bgcolor="#000">
<canvas id="c"></canvas>
<script>
  onload = function() {
    // Retrieve the rendering context
    t=c.getContext('2d');
    // Set rain color
    t.fillStyle='#07d';
    // Render whenever it is possible
    setInterval(function() {
      // Generate a number between 0 and 40,000
      // 40,000 ~= 270 * 150
      n=Math.random()*4e4;
      // Draw a raindrop.
      // Since x and y are not rounded, the raindrop looks blurry!
      t.fillRect(n%270,n/150,1,1)
    }, 1);
  };
</script>
</body>

7

Küçük konuşma (Küçük konuşma / X)

rastgele rüzgarla ;-)

|BG CLR N1 H W v WIND drops gen newDrops draw remove move buffer|


BG := Color black.
CLR := Color blue lightened.
H := 100.
W := 100.
N1 := 10.
WIND := 0.
drops := OrderedCollection new.

gen := [:n | ((1 to:n) collect:[:i | Random nextIntegerBetween:1 and:W] as:Set) collect:[:x | x@0]].
newDrops := [drops addAll:(gen value:N1)].
draw := [buffer fill:BG; paint:CLR. drops do:[:d | buffer displayPoint:d]].
remove := [drops := drops reject:[:d | d y > H]].
move := [:wind | drops := drops collect:[:d| (d x + wind)\\W @ (d y + 1)]].
v := View new openAndWait.
buffer := Form extent:(v extent) depth:24 onDevice:v device.

[
    [v shown] whileTrue:[
        draw value.
        v displayForm:buffer.
        move value:WIND.
        remove value.
        newDrops value.
        WIND := (WIND+(Random nextBetween:-1 and:1)) clampBetween:-5 and:5.
        Delay waitForSeconds:0.1.
    ]
] fork.

görünümdeki çıktı: görüntü tanımını buraya girin


6
Yeterince yağmur yağmaz, zemine çarpan yağmur değil yandan bir görünümdür. Hala güzel bir rüzgar efekti.

6

İşleme, 94 - 20 = 74

void setup(){background(0);fill(0,0,255);}
void draw(){ellipse(random(0,99),random(0,99),3,3);}

(Okunabilirlik için yeni satır eklendi.)

Online demo için burayı tıklayın .


1
İşleme, bu gibi problemler için gerçekten iyidir.
cjfaure

Firefox'ta görülemiyor, varsayılan güvenlik ayarları Java uygulamasını engelliyor ve nasıl geçersiz kılıldığını anlatmıyor. AFAIK, JavaScript'e bir Processing.js bağlantı noktası var, eğer onu JS'ye dönüştürebilir ve bir bağlantı gönderebilirseniz minnettar olurum.
marczellm

@marczellm Ubuntu'da Firefox 27.0 kullanıyorum ve iyi çalışıyor. Eklentiye izin verip vermeyeceğinizi soran herhangi bir bilgi olmadığından emin misiniz? JS versiyonuna da bir göz atacağım.
ace_HongKongIndependence

@ as Tüm istemlerin "izin ver" olduğunu söyledikten sonra, bir güvenlik mesajı yine de onu engelliyor. JS sürümü için teşekkürler.
marczellm

1
cevap içine javascript sürümü eklendi @marczellm, zevk :) ve körlemesine bir tahmin, belki sürümü eklentisi mevcut java modası geçmiş ve güvenlik sorunları tanıdığı
ace_HongKongIndependence

5

darbe

while true;do echo " / / / / /";echo "/ / / / / ";done

Bunun bir golf kodu olması gerektiğinden emin değilim çünkü "yağmur" un neye benzemesi gerektiği konusunda kesin bir gereklilik yok.

EDIT: Kameranın aşağıya doğru bakıyor gibi görünmesini istiyorsanız, şunu kullanın:

while true;do echo " . . . . .";echo ". . . . . ";done

7
"Kamera sabit: doğrudan yere bakıyorsun." Bu yağmuru yandan görüyor gibi mi görünüyor?
undergroundmonorail

2
9 karakterden tasarruf edin: while echo \ / / / / /;do echo / / / / /;done(ya da özyinelemeli bir işlevle ancak birkaç yığını hızlıca patlatır). @ undergroundmonorail Güçlü rüzgar, kameraya göre çapraz.
Gilles 'SO- kötü olmayı bırak'

@Gilles Bu durumda, bonuslarla -13'e kadar yapabiliriz while echo -e '\e[0;34m / / / / /';do echo / / / / /;doneve alabiliriz :)
undergroundmonorail

4
kesinlikle yağmur gibi
görünmüyor

5
Bunun bir cevap olarak düşünülmesi gerektiğini düşünmüyorum. Kısacası: Gerçekçi değil. Detaylı tartışma: Eğer soruyu doğru yorumladıysam, yağmurun rastgele (veya en azından sözde rastgele) düşmesi ve uzun bir süre boyunca dağılımın birim alan başına benzer olması gerekir. (Bu nasıl yağmur çalışır, değil mi?) Ancak bu cevabın içinde, herhangi bir yağmur damlasının yanında yağmur damlası olmayacağı garanti edilir, bu nedenle ünite alanını bir karakterin alanı olarak alırsak, dağıtım dengesiz.
ace_HongKongIndependence

3

Python 2.7: 195 - 20 = 175

Burada yapılabilecek daha çok iş olduğuna eminim, ama şimdilik elimde bu var:

import os,time
from random import*
l=[i[:]for i in[[' ']*100]*50]
while 1:
 os.system('clear')
 l[randint(0,49)][randint(0,99)]='.'
 print'\033[94m\n'.join(''.join(r)for r in l)
 time.sleep(.05)

Nasıl yapılacağını hatırladığımda çıktıdan bir gif göndereceğim.

Bu Linux üzerinde çalışıyor. Değiştirme 'clear'ile 'cls'bu pencerelerin üzerinde çalışmak yapar, ama sonra ANSI renkler işi yok ve ben ikramiye kaybederler.

İlklendirilen bir karakterli dizelerin 2D dizisi var . Her 0,05 saniyede bir tanesi rasgele ayarlanmış olarak seçilir .ve ekran yeniden çizilir.

from random import*İki karakteri üzerine kaydeder import os,time,randomve random.randint()iki kere kullanır , yine de bir hücreyi seçmenin en iyi yolunun bu olduğuna inanmıyorum. Kullanmak istedim random.choice()ama değiştirilemeyen dizelerin etrafında, kaydettiğinden daha fazla karakter israf etmeyecek bir yol düşünemedim.


3
l=[i[:]for i in[[' ']*100]*50], stackoverflow.com/a/6688361/1114687 uyarınca . 198 - 20 = 178
n.st,

Vay, bunu daha önce hiç görmedim. Doğru okuyorsam, dilim gösterimi benzersiz bir liste olduğundan emin olmak dışında hiçbir şey yapmaz, aynı listeye başka bir referans değil, doğru mu? Bu gerçekten havalı! Teşekkür ederim!
undergroundmonorail

Başlangıçta denedim l=[[' ']*100]*50, ancak bu aynı 100 element listesine sadece 50 referans oluşturuyor, bu yüzden bunu aşmanın en kısa yolunu aradım ve yukarıda bağlantılı Yığın Taşması cevabını buldum.
n.st

2

132 + 27 - 20 - 50 = 89

Javascript (132)

r=Math.random;setInterval("$('body').append($('<i>∘</i>').css({left:r()*2e3,top:r()*2e3}).animate({left:'+=70',fontSize:0},500))",1)

CSS (27)

i{color:blue;position:fixed

Gösteri: http://jsfiddle.net/kelunik/5WC87/4/embedded/result/


Yan görünümden, şu an için uygun değil.

@BenH Haklısınız, bu noktayı kaçırdınız, yeni sürüm şimdi cevabımda.
kelunik

kodunuzu firefox konsolunda denediğinizde hiçbir şey olmuyor gibi görünüyor: /

@BenH Bu yüzden bir jsfiddle-demo var.
kelunik

görmedim teşekkürler


1

Processing.js, 86 - 20 = 66

... ama aynı zamanda yavaş yavaş kayboluyor (yer yer doğal olarak yağmuru emer). Bunun için puan?

g=99;r=random;void draw(){fill(0,9);rect(0,0,g,g);fill(0,g,r(g));rect(r(g),r(g),2,2);}

Bonus özellikleri yeşilimsi ve mavimsi arasında değişen (açıkça kirli 'şehir' yağmuru) içerir.

Ayrıca, burada bir JavaScript hack kullanmamdan çok memnundum; Buna dikkat edin, çünkü bu işleniyor. js , g = 99'un tipsiz bildirimi veya (diğer diller riçin diğer adlar random!

Küçültmek için başka bir fikir?

Okunabilir sürüm:

g = 99;
r = random;                  // Javascript trickery
void draw() {
    fill(0, 9);
    rect(0, 0, g, g);        // Fade the background
    fill(0, r(g), r);
    rect(r(g), r(g), 2, 2);  // Add a new drop
}

Her şey burada görülebilir .

... artı solmadan başka bir sürüm: 58 - 20 = 38

Solmayı sevmiyorsanız ve gri kirlere aldırış etmiyorsanız:

r=random;void draw(){fill(0,0,255);rect(r(99),r(99),2,2);}

1

Tcl / Tk, 139 - 20 = 119

Kendi cevabımı tekrar kullanmak http://codegolf.stackexchange.com/a/143018/29325

Etkileşimli kabukta çalıştırılmalıdır

gri [can .c -w 40 -he 40]
set x 0
wh 1 {.c cr o $x [set y [exp int(rand()*40)]] $x [set x $y] -f #[form %06x [exp int(rand()*255**3)]]
upd}

Ne yazık ki, expr int(rand()*bir procbetiğe dönüştürme , betiğin bir byte'a sahip olmasını sağlar!

görüntü tanımını buraya girin

Durdurmak için, sadece etkisiz "X" düğmesini tıklamanız gerekir.

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.