Это дождливый день


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
Первый абзац вместе с положением камеры для этого рендеринга довольно жуткий.
Tobia

Ответы:


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, может быть оценена как chars = bytes.

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

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

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

Безголовая версия:

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

Здесь моя цель состояла в том, чтобы создать впечатление, что капли дождя падают с уклоном и накапливаются на земле, в то же время пытаясь поддерживать постоянное количество видимых капель (падающих или разбрызгиваемых) в среднем. Хитрость заключалась в том, чтобы создавать несколько новых падающих капель /в каждом цикле, а падающие капли «стирали» брызги, через которые они попадают.

Результат странным образом напоминает код Matrix.

Вывод
(рывок каждые 5 секунд - это цикл gif)

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


Это хорошо, но я не думаю, что символ ESC печатается правильно. i.stack.imgur.com/vLERQ.png Я тоже попытался вставить код с помощью gedit, но это не сработало.
Riking

Вы ошиблись. Вопрос говорит «байты», а не «символы».
Jazzpi

1
@Riking Я редактировал эту часть. Если вы попробуете это снова, это должно сработать.
Tobia

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


42

Bash: 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. 2-е редактирование: сокращение от 129 байтов до 111 байтов благодаря предложениям @ manatwork's и @ 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.
manatwork

1
Вам не нужен символ внутри арифметической оценки. И в конце вашего кода должен быть завершающий перевод строки. Должно быть только 127 символов.
manatwork

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

1
Кто-то остановит меня! e='printf \e'на 2 символа короче e='echo -ne \e'!
Tobia

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 кадров):

Фактический плейпак значительно быстрее, чем позволяют картинки.


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>

(Sidenote: golfed дальше, передавая строку setInterval, with, имена переменных автоматического ID ... он чувствует себя так неправильно! вздрагивает )

Он просто рисует случайные синие прямоугольники.

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невозможно автоматически закрыться, но кроме этого он работает отлично! (Кроме того, использование автоматических имен переменных ID также выглядит грязно: D)
Ручка двери

Некоторые браузеры кажутся более снисходительными в этой области ... Но он избегает необходимости использовать onload. Должен сказать, мне нравится, как @ Florent избегает дубликатовMath.random()
Niet the Dark Absol

@ Doorknob canvasautoclose в 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
Brilliant! Я думаю, что это захватывает суть вопроса.
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


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

Я не уверен, что это должен быть кодовый гольф, потому что нет строгих требований к тому, как должен выглядеть «дождь».

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы камера выглядела так, будто камера направлена ​​прямо вниз, используйте это:

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

7
«Камера исправлена: вы выше, смотрите прямо на землю». Это, кажется, смотрит на дождь со стороны?
подземный

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

@ Жиль В этом случае, мы можем сделать while echo -e '\e[0;34m / / / / /';do echo / / / / /;doneи снизить его до -13 с бонусами :)
подземный

4
это определенно не похоже на дождь: D
Kiwy

5
Я не думаю, что это следует рассматривать как ответ. Короче говоря: это не реально. Подробный аргумент: если я правильно истолковал вопрос, дождь должен выпадать случайно (или, по крайней мере, псевдослучайно), и в течение длительного периода времени распределение должно быть одинаковым на единицу площади. (Вот как работает дождь, верно?) Однако в этом ответе гарантируется, что рядом с любой каплей дождя не будет никаких капель дождя, поэтому, если мы возьмем область юнита за область одного персонажа, мы увидим, что Распределение неравномерно.
ace_HongKongIndependence

3

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

Я выложу gif результата, когда вспомню, как это сделать.

Это работает на 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.
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()*в a procделает скрипт на один байт больше!

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

Чтобы остановиться, нужно просто нажать невыразимую кнопку «Х».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.