Це дощовий день


42

Контекст

Це День Святого Валентина Єдиний, кого ти коли-небудь любив, залишив тебе вчора для цього хлопця, якого вона завжди вважала "дурною і нецікавою" . По дорозі додому ви застрягли в дорожньому русі, слухаючи старі пісні по радіо, дощ, який ударяє про вітрове скло, розхитує вас. Через деякий час у вашій машині ви опиняєтесь у самоті у своїй маленькій квартирі, не маючи змоги придумати щось інше, крім неї. Немає світла, і ви дивитесь крізь вікно, нехай вас оточує темрява. Нема з ким розмовляти, ваші друзі вже давно пішли після того, як попередили вас про цю нову дівчину, що переслідує ваш розум. Ви запускаєте комп’ютер, оскільки це єдине, що ви можете зробити, відкрийте веб-переглядач і опублікуйте нову головоломку програмування для stackexchange, намагаючись змінити свою думку.

Виклик

Напишіть програму на обрану вами мову, що імітує дощ, який падає на землю. Вихід може складатися з ASCII символів або 2D / 3D візуалізації. Камера виправлена: ви зверху дивитесь прямо на землю. Ваша програма повинна включати якусь анімацію, як оновлення консолі чи сторінки щоразу, коли ви створюєте новий "кадр". Це повинно бути реалістичним, я знаю, що це трохи суб'єктивно, але скажімо, ви не можете просто заповнити всю землю лише однією великою краплею.

Вихідні дані не повинні бути зображеннями, але якщо ви використовуєте криптовалюту, краще надати .gif, щоб проілюструвати, як це виглядає в дії (але, звичайно, це не вплине на ваш рахунок, якщо ви цього не зробите).

Правила

  • Ваш бал - це загальна кількість використаних байтів
  • -20 балів, якщо ви використовуєте кольори
  • -50, якщо ви досягнете вітру
  • Виграє найнижчий рахунок

Приклад

Дуже базовий приклад того, що слід надати:

Я сподіваюся, що ви зробите краще і сподобаєтеся цьому виклику.

Вибачте за мою англійську мову, не соромтесь редагувати мою публікацію, якщо ви хочете виправити деякі помилки

Рада лідерів

Якщо ваше ім’я не вказано, це тому, що ваша спроба була визнана невідповідною правилам.

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

Вітаємо Тобію!


51
Я щиро сподіваюся, що перший абзац не є справжньою історією.
Кендалл Фрей

1
@DavidCarraher так, ніби ти в небі дивишся в підлогу.

8
Я не думаю, що це повинно бути кодом-гольф, оскільки надто велика поблажливість на потенційні результати
Cruncher

4
Перший абзац разом із положенням камери для цього рендерінгу є досить чудернацьким.
Тобія

Відповіді:


26

APL, 105 символів / байт * - 20 - 50 = 35 балів

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

*: Більшість реалізацій APL підтримують певну форму (застарілого) однобайтового набору, яка відображає символи APL до верхніх значень 128 байт. Тому для гри в гольф програма, яка використовує лише символи ASCII та символи APL, може бути оцінена як символи = байти.

Я перевірив це на останньому apl.js Ніка на Node.js в терміналі OS X. Але я не використовував нічого конкретного на його діалект, тому він повинен працювати на будь-який сучасний APL , який може бути запущений на терміналі ANSI і підтримує D-потех {...}, пасма поступки (a b)←...і комутують , такі як Dyalog для Linux або для Raspberry PI ( з ⎕IO←0)

У рядку 1 є буквальним екранує символ (який дорівнює 1 байт). Ви можете ввести його за Ctrl-V Escдопомогою терміналу Linux або Vim, або нібито щось на зразок Alt-027Windows. Крім того, я не зміг знайти надійний спосіб виявити розмір терміналу, тому ви, можливо, захочете відредагувати кількість рядків і стовпців в кінці останнього рядка.

Я захищаю 50 бонусів тим, що кожна крапля дощу проходить через такі форми: ⍟∘.які створюють враження легкого вітру вниз, враховуючи, що сцену дивляться зверху. Насправді, дивлячись на gif внизу, ви повинні скласти враження, що кожна крапля акуратно рухається вниз і вліво, перш ніж зникати на землі.

Негольована версія:

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

Вихід:

введіть тут опис зображення


APL, інший стиль

Поза конкуренцією.

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

Тут моя мета полягала в тому, щоб створити враження, що краплі дощу падають з нахилом і накопичуються на землі, намагаючись утримувати в середньому кількість видимих ​​крапель (або падаючих, або бризок) постійних. Хитрість полягала в тому, щоб створити кількість нових крапель, що падають /на кожному циклі, а краплі, що падають, "витирають" будь-які бризки, які вони подорожують.

Результат дивним чином нагадує код Матриці.

Вихід
(ривок кожні 5 секунд - це циклічне передавання gif)

введіть тут опис зображення


Це добре, але я не думаю, що символ ESC друкується правильно. i.stack.imgur.com/vLERQ.png Я також спробував вставити код за допомогою gedit, не вийшло.
Рікінг

Ви неправильно оцінили свій рахунок. Питання говорить "байти", а не "символи".
джазпі

1
@Riking я відредагував цю частину. Якщо ви спробуєте ще раз, це має спрацювати.
Тобія

@Tobia Покажіть мені, як ви сидите за своїм IBM 5100, і я куплю аргумент chars = bytes.
примо


42

Баш: 111 байт - 20 = 91 бал!

Споглядальний ніжний дощ у вашому терміналі. Відрегулюйте числа 819 та 41 для різної висоти та ширини відповідно.

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

Знімок екрана

Приємним бонусом є те, як курсор стукає по дощовій зоні.

Редагувати: скорочення від 140 байт до 129 байт завдяки пропозиціям @ manatwork. Друга редакція: скорочення від 129 байт до 111 байт завдяки пропозиціям @ manatwork та @ Tobia, а також додаткові натхнення - дивіться коментарі.

.


1
Ви можете пощадити: 2 символи, приєднавшись echoдо параметрів; 2 символи, використовуючи \eзамість \033; 3 символи, використовуючи :замість true; 5 символів за допомогою арифметичної оцінки ( ((…))): 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.
манатура

1
Вам не потрібно сигіл всередині арифметичної оцінки. І в кінці вашого коду повинен бути останній новий рядок. Має бути лише 127 символів.
манатура

1
Я вважаю, що @manatwork означає, що вам не потрібно використовувати знак долара у подвійних дужках: ((RANDOM<9))працює так само добре. Крім того, ви можете спробувати зменшити свій код, поєднавши два "за" {0..19}і " {0..40}єдине" для {0..819}, використовуючи щось на зразок $((i%41))всередині нього.
Тобія

1
Хтось зупинить мене !! e='printf \e'на 2 знаки коротше, ніж e='echo -ne \e'!
Тобія

1
І обріжте ще один заклик, використовуючи$e[C
Tobia

39

Пітон, 312 байт - 50 (вітер) = 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

Вибірка зразка (цикл на 50 кадрів):

Фактичний відтворення значно швидше, ніж дозволяють gifs.


3
@ChristianCareaga Я міг би, але я думаю, що білий виглядає краще.
примо

8
Єдина проблема в моїх очах: ​​ви переглядаєте дощ збоку, в той час як правила встановлюють нерухому камеру, яка дивиться прямо вниз.
Йоганнес Х.

7
@JohannesH. Або це дуже-дуже вітряний день.
примо

20
Мені подобаються випадкові спалахи блискавки! : P
Хлопець із Шапкою

3
Один символ зберігається, використовуючи R=__import__("random").randintзамість from random...рядка.
SimonT

35

HTML / JS, 170 символів - 20 = 150 балів

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

(сторонне позначення: далі гольф, передаючи рядок до setInterval, withімена змінних автоматичних ідентифікаторів ... це так неправильно! тремтить )

Він просто малює випадкові сині прямокутники.

HTML / JS, 309 знаків - 20 - 50 = 239 балів

Тепер з вітром!

<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 байти: <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! Я використовував with! Я відчуваю себе бруднішим, ніж передавати рядок на setInterval: p
Niet the Dark Absol

@NiettheDarkAbsol Спасибі;) Схоже, що (принаймні на Chrome) canvasне можна автоматично закрити, але крім того, що працює ідеально! (Також, використовуючи автоматичні імена змінних ідентифікаторів, так само брудно: D)
Doorknob

Деякі браузери здаються більш м'якими в цій галузі ... Але це уникає необхідності користуватися onload. Треба сказати, що мені подобається @ Florent уникнути дублікатуMath.random()
Niet the Dark Absol

@Doorknob автоматично закриється canvasв Chrome! Моя відповідь була розроблена / перевірена в цьому браузері.
Флорент

1
Оновіть другу, при цьому крапельки занурюються в землю / калюжу.
GreenAsJade

34

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

Скопіюйте / вставте цей рядок у консоль браузера (зазвичай натисніть клавішу F12):

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)

На день Святого Валентина ожили червоні серця з дощем!

введіть тут опис зображення


1
ну це не реально. Серця надходять з верхньої частини екрана і дотримуються випадкових позицій сторінки. Це насправді не відповідає умові точки зору.

10
AUGGGGHH! Як мені це зупинити ?!
Хлопець з капелюхом

1
@ user2509848 Але чи є інший спосіб?
Хлопець із Шапочкою

3
@TheGuywithTheHat, перезавантажте сторінку
Майкл М.

19
Блискуче! Я думаю, що це захоплює серце питання.
andrewb

26

Математика

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


3D

Форма краплі дощу робиться через обертову ділянку навколо осі z.

Спочатку дощ утворюється для регіону, який простягається значно вище області відображення. Поява падаючого дощу досягається переміщенням точки огляду вгору по осі z. (Це більш ефективно, ніж перерахувати положення кожної краплі дощу.)

дощ

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]

З Вітром

Є великі накладні витрати, щоб зробити дощ падіння вітром. Але я все одно включаюсь сюди.

Блакитний підлогу в значній мірі зберігає область {x, y} зону, приурочену до цікавої області. Є деякі збої, але, ну добре,

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]

з вітром


Від прямо зверху

Найближчі краплі дощу обрізані, але я це не помічу.

зверху 3D

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 символів, і ви знизите свій рахунок. :)
Алі Каглаян

1
Мені подобається цей

+1 для останнього, з правильним кутом камери, Але ви забули, що камера блокує частину дощу ....;)
GreenAsJade

@GreenAsJade, Відсікання точки зору 3D (зверху) тепер виправлено.
DavidC

Солодке, але я був більш легковажним, ніж ти думав. Я мав на увазі, що на це дивиться фізична камера, тому вона повинна блокувати деякі краплі дощу:%)
GreenAsJade

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>

Позначена версія:

<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

Smalltalk (Smalltalk / X)

з випадковим вітром ;-)

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

вихід у поле зору: введіть тут опис зображення


6
Це не кваліфікується, оскільки це вид збоку на дощ, який падає, а не дощ, що впадає в землю. Ще приємний ефект вітру.

6

Обробка, 94 - 20 = 74

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

(Додано новий рядок для читабельності.)

Клацніть тут для демонстрації в Інтернеті.


1
Обробка справді хороша для таких проблем.
cjfaure

Неможливо переглянути його у Firefox, налаштування безпеки за замовчуванням блокують аплет Java, і це не підказує мені, як перевизначити. AFAIK є порт Processing.js до JavaScript, якщо ви можете перетворити його на JS та опублікувати посилання, я буду вдячний.
marczellm

@marczellm Я використовую Firefox 27.0 в Ubuntu, і він працює чудово. Ви впевнені, що немає запитів, щоб запитати, чи дозволити чи заблокувати плагін? Я також погляну на версію JS.
ace_HongKongIndependence

@ace Після того, як я скажу всі запити "дозволити", повідомлення про безпеку все одно блокує його. Дякую за версію JS
marczellm

1
@marczellm додав версію javascript у відповідь, насолоджуйтесь :) і лише сліпе здогадування, можливо, ваша поточна версія плагіну Java застаріла і має проблеми з безпекою
ace_HongKongIndependence

5

Баш

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

Я не впевнений, що це повинен бути кодовий гольф, оскільки немає суворої вимоги щодо того, як повинен виглядати "дощ".

EDIT: Якщо ви хочете, щоб вона виглядала так, що камера спрямована вниз, скористайтеся цим:

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

7
"Камера виправлена: ви вище дивитесь прямо на землю." Це, здається, перегляд дощу з боку?
підземниймонорельс

2
Збережіть 9 символів: while echo \ / / / / /;do echo / / / / /;done(або ще декілька за допомогою рекурсивної функції, але це швидко підірве стек). @undergroundmonorail Сильний вітер, діагональний щодо камери.
Жил "ТАК - перестань бути злим"

@Gilles У такому випадку ми можемо це зробити while echo -e '\e[0;34m / / / / /';do echo / / / / /;doneі знизити його до -13 з бонусами :)
undergroundmonorail

4
це однозначно не схоже на дощ: D
Kiwy

5
Я не думаю, що це слід розглядати як відповідь. Якщо коротко: це не реально. Детальний аргумент: Якщо я правильно трактував питання, дощ повинен випадати випадковим чином (або принаймні псевдовипадково), і протягом тривалого періоду часу розподіл повинен бути подібним на одиницю площі. (Ось як працює дощ, правда?) Однак у цій відповіді гарантується, що крапель дощу не буде поруч із жодною краплею дощу, тож якщо ми візьмемо площу одиниці площею одного символу, ми побачимо, що розподіл нерівномірний.
ace_HongKongIndependence

3

Пітон 2,7: 195 - 20 = 175

Я впевнений, що тут можна зробити більше, але ось що я зараз маю:

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)

Я опублікую подарунок на подарунок, коли згадаю, як це зробити.

Це працює на Linux. Якщо замінити 'clear'на 'cls'нього, він працює на вікнах, але тоді кольори ANSI не працюють, і я втрачаю бонус.

У мене є 2D масив з односимвольних рядків, ініціалізований в . Кожні 0,05 секунди один з них вибирається випадковим чином ., а екран перемальовується.

from random import*зберігає два символи import os,time,randomта використовує їх random.randint()двічі, хоча я не переконаний, що це найкращий спосіб вибрати клітинку. Я хотів використати, random.choice()але я не міг придумати спосіб навколо непорушних рядків, які б не витрачали більше символів, ніж це врятувало.


3
l=[i[:]for i in[[' ']*100]*50], відповідно до stackoverflow.com/a/6688361/1114687 . 198 - 20 = 178
п.

О, ух, я ніколи цього не бачив. Якщо я читаю його правильно, позначення фрагментів нічого не робить, крім того, щоб це був унікальний список, а не інша посилання на той самий, правильно? Це справді круто! Дякую!
підземниймонорельс

Я спочатку намагався l=[[' ']*100]*50, але це просто створює 50 посилань на той самий 100-елементний список, тому я шукав найкоротший можливий спосіб обійти це питання і знайшов відповідь на переповнення стека, пов'язану вище.
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

Демонстрація: http://jsfiddle.net/kelunik/5WC87/4/embedded/result/


Це збоку, це не відповідає на даний момент.

@BenH Ти маєш рацію, пропустив цю точку, в моїй відповіді зараз є нова версія.
kelunik

Здається, нічого не відбувається при спробі коду в консолі firefox: /

@BenH Ось чому є jsfiddle-demo.
kelunik

не бачив. спасибі


1

Processing.js, 86 - 20 = 66

... але він також повільно згасає (природно земля поглинає дощ). Бали за це?

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

Особливості бонусу включають різницю між зеленуватим і синюватим (це очевидно брудний "міський" дощ).

Крім того, я був дуже радий, що мені тут довелося використовувати хак JavaScript; Зауважте, що це обробка. js , ви можете вписати такі речі, як безтипове оголошення g = 99 або псевдонім rfor random(міжмовний псевдонім!).

Будь-які інші ідеї для вдосконалення?

Читаема версія:

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
}

Все це можна подивитися тут .

... плюс ще одна версія без згасання: 58 - 20 = 38

Якщо ви не любите вицвітання і не заперечуєте проти сірого бруду:

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

1

Tcl / Tk, 139 - 20 = 119

Повторне використання власної відповіді http://codegolf.stackexchange.com/a/143018/29325

Потрібно запустити в інтерактивній оболонці

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}

На жаль, перетворення expr int(rand()*в макет procробить сценарій на один байт більше!

введіть тут опис зображення

Для зупинки потрібно просто натиснути неефективну кнопку "X".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.