Сделайте Matrix Digital Rain, используя самый короткий код [закрыто]


21

Правила:

  • Любой язык, который вы выберете (Стандартные библиотеки).
  • Вывод отображается в терминале или командном процессоре Windows или любым другим способом, который вы предпочитаете.
    (ширина буфера = 80)
  • ASCII символов достаточно. (может добавить Юникод)
  • Не должен заполнять весь экран при запуске (Должно быть похоже на дождь, да!).
  • Цвета получают бонусные очки (+5).
  • Эффекты : случайные символы, разный размер падения, периодически восстанавливаются.

Очки: (обновление)

  • +32 балла для начала.
  • -1 балл за каждый байт (не символ) в коде после ** 1024 ***-го * байта.
  • Точки могут доходить до нуля и минус.
  • Примечание: языки, использующие многобайтовые символы, должны считать байты, а не символы.
  • +5 за каждый новый эффект. (не опубликовано другими)
  • +15 за любой из этих эффектов:
    1. Ветер (дует символы в сторону)
    2. Подбор номера (пользовательский ввод, например: 90210):
      номер случайно расположен в матрице
      введите описание изображения здесь
    3. Звук
    4. Зашифрованное сообщение (пользовательский ввод):
      символы представляют секретное зашифрованное сообщение
    5. Режим Galaga:
      стреляет ^ чтобы уничтожить персонажей
      введите описание изображения здесь

Табло:

┌-----┬------------┬------------┬-------------┬---------------┬--------------┐
| pos |    name    |    type    |    bytes    |    effects    |    points  ^ |
|-----|------------|------------|-------------|---------------|--------------|
|1    |nitro2k01   |QBasic      |913          |Colours        |+57           |
|     |            |            |             |Colour Fade    |              |
|     |            |            |             |Sound (+15)    |              |
|-----|------------|------------|-------------|---------------|--------------|
|2    |squeamish   |HTML, Java- |1024         |Colours        |+47           |
|     |ossifrage   |Script, CSS |             |Transition     |              |
|     |            |            |             |Size Variation |              |
|-----|------------|------------|-------------|---------------|--------------|
|3    |manatwork   |Ruby        |374          |Colours        |+47           |
|     |            |            |             |Actual Words   |              |
|     |            |            |             |Character -    |              |
|     |            |            |             |      Disperse |              |
|-----|------------|------------|-------------|---------------|--------------|
|4    |plg         |Bash        |1024         |Colours        |+42           |
|     |            |            |             |Random Pause   |              |
|-----|------------|------------|-------------|---------------|--------------|
|5    |Timtech     |TI-84 calc  |120          |Umbrella       |+42           |
|     |            |            |             |Run Inside     |              |
|-----|------------|------------|-------------|---------------|--------------|
|6    |Samuel Cook |JavaScript  |830          |Colours        |+42           |
|     |            |            |             |Transition     |              |
└-----┴------------┴------------┴-------------┴---------------┴--------------┘

Примечание. Табло будет / может обновляться кем угодно после публикации правильного ответа. Не превышайте десятку лучших позиций. Добавьте больше эффектов в свой код и побейте свой собственный счет!
Очистка начального экрана, очистка, ошибки, сторонние библиотеки и т. Д. Не будут учитываться при подсчете очков. Не забудьте указать подробности о нет. используемых байтов и название языка или программы.

Нео: Что ты пытаешься мне сказать? Что я могу увернуться от пуль?

Морфеус: Нет, Нео. Я пытаюсь сказать вам, что когда вы будете готовы, вам не придется.


А как насчет библиотек?
— Vereos

Включите или импортируйте или потребуйте столько библиотек, сколько вам нужно (стандартные библиотеки)!
— Рене Лидер

Вы бы добавили баллы, если код меньше 250 символов? (У меня очень короткое решение, но у него нет тонны функций)
— ThinkChaos

Вам это не понадобится; у вас все равно будет +32 балла! Скорее всего, многие превысят лимит и начнут сбрасывать очки, заставляя короткие коды подниматься до верха на табло. (также, добавление большего количества правил и пунктов усложнило бы вещи)
— Рене Лидер

Хорошо, я включу версию для гольфа просто для удовольствия!
— ThinkChaos

Ответы:


18

HTML, Javascript и CSS: 1024 байта, 47 баллов

Матрица дождя демо

Функции:

  • Использует символы Unicode (не думайте, что это приносит очки)
  • Трассы исчезают от ярких до темно-зеленых, пока они рисуются (*)
  • Следы также исчезают от темно-зеленого до черного после того, как рисунок закончен (*)
  • Случайный размер текста в каждом следе (*)
  • Трассы случайным образом перемещаются и меняются каждый раз, когда они нарисованы

(*) Я буду требовать +5 баллов за каждый из них, но дайте мне знать, если вы не согласны :-)

Демо-версия:

http://ruletheweb.co.uk/matrix.html

Исходный код:

Ровно 1024 байта. Боюсь, это немного некрасиво.

<head><style>*{margin:0;padding:0;line-height:1;overflow:hidden;}div{width:1em;position:absolute;}</style><script>
w=window;n=w.innerWidth;m=w.innerHeight;d=document;q="px";function z(a,b){return Math.floor(Math.random()*(b-a)+a)}f=" 0123456789";for(i=0;i<45;i++)f+=String.fromCharCode(i+65393);function g(){for(i=0;i<90;i++){r=d.createElement("div");for(j=z(20,50);j;j--){x=d.createElement("pre");y=d.createTextNode(f[z(0,56)]);x.appendChild(y);x.style.opacity=0;r.appendChild(x)}r.id="r"+i;r.t=z(-99,0);with(r.style){left=z(0,n)+q;top=z(-m,0)+q;fontSize=z(10,25)+q}d.body.appendChild(r);setInterval("u("+i+")",z(60,120))}}function u(j){e=d.getElementById("r"+j);c=e.childNodes;t=e.t+1;if((v=t-c.length-50)>0){if((e.style.opacity=1-v/32)==0){for(f in c)if(c[f].style)c[f].style.opacity=0;with(e.style){left=z(0,n)+q;top=z(-m/2,m/2)+q;opacity=1}t=-50}}e.t=t;if(t<0||t>c.length+12)return;for(f=t;f&&f>t-12;f--){s=1-(t-f)/16;if(f<c.length&&c[f].style){c[f].style.opacity=s;}}}
</script><body text=#0f0 bgcolor=#000 onload=g()>

2
Это выглядит хорошо как снимок экрана, но это съедает дерьмо из моих ресурсов. +1 от меня
— Сэмюэль Кук

Очень круто! Я мог бы украсть ваши символы Unicode :) +1
— ThinkChaos

1
UglifyJS может удалить 17 символов из исходного кода JavaScript. Не то, чтобы это действительно имело значение, так как это не кодовый гольф (скорее, не более 1024 символов).
— Конрад Боровски

На данный момент это лучшая версия, которую я нашел на первых двух страницах результатов Google. Я просто очень хотел бы, чтобы у вас было место для удаления некоторых узлов, которые вы добавляете :) действительно убивает мой компьютер, оставляя его открытым
— RustyToms

10

удар

1024 байта (включая комментарии)

COL=80
ROW=$(tput lines)

cleanup() {
  wait # wait for background jobs (the drops)
  # clear; move cursor to (1,1); show cursor
  # reset color
  printf '\033[2J\033[1;1H\033[?25h\033[0;0m'
}

drop() { # $1=column ; $2=row to end on ; $3 = drop size (ranges from 5 to 15)
  for ((r=1; r<$2+$3+1; r++)); do
    # if before drop's end point : print lowest char in white
    [ $r -lt $2 ] && printf "\033[$r;$1H\033[0;0m\u$[RANDOM % 59 + 21]"

    # if before or on drop's end point : replace older white char with a green one
    [ $r -le $2 ] && printf "\033[$[r-1];$1H\033[0;32m\u$[RANDOM % 59 + 21]"

    # if drop's longer than it's size : erase last char
    [ $r -gt $3 ] && printf "\033[$[r-$3];$1H "

    # wait before moving drop down
    sleep .1
  done
}

# cleanup on exit
trap cleanup EXIT
# clear screen; hide cursor
printf '\033[2J\033[?25l'

# loop with delay
while sleep .1; do
  # start a drop in background : column; ending row; size
  drop $[RANDOM % COL] $[RANDOM % ROW + ROW/3] $[RANDOM % 10 + 5] &
done

Новые эффекты:

  • все (первая запись);)
  • капли будут останавливаться случайно на экране
  • классные цветовые эффекты: последний символ белый, а остальные зеленые
  • случайные символы и escape-последовательности остаются на консоли ... Хорошо, это ошибка, но это потому, что термин не успевает за движением курсора

Гольф @ 188 186 176 :

d(){ for((r=1;r<$2+41;r++));do $4"$3$r;$1H\u$[RANDOM%59+21]";(($r>$2))&&$4"$3$[r-$2];$1H ";$s;done;}
s=sleep\ .1;while $s;do d $[RANDOM%80] $[RANDOM%10+5] '\033[' printf\ &done

Это работает в сетке 80x40. Вы можете изменить это в RANDOM%80последней строке и r<$2+41во второй. Я не очищаю капли после того, как они выходят из сетки, поэтому либо измените свой термин до 80x40 или измените 41 на $LINES+1. Есть пара вещей, которых нет по сравнению с полной версией:

  • срок подготовки или очистки
  • причудливая окраска (занимает 52 байта, поэтому не стоит)
  • останавливается случайно (здесь капли всегда опускаются на дно)
  • Я мог бы уменьшить его до 174, не указав минимальную длину для «капель»: $[RANDOM%10+5]станет$[RANDOM%15]

Даже с этими ограничениями я думаю, что это круто!

Редактировать: я пытался использовать символы Юникода, такие как брезгливое оссиффраж, но поскольку они представляют собой символы двойной ширины, они заполняют сетку довольно быстро, и в итоге это выглядит странно.

Я также сократил версию для гольфа, используя кодовые символы Юникода вместо ASCII, так что мне не нужно идти восьмерично, чтобы получить символ, сохраняя шаг. Я сделал то же самое в основной версии, но добавил комментарии, чтобы сохранить его на 1024 байта.

А затем изменил сравнение int с [ $r -gt $2 ]на то (($r>$2)), что пробел убил меня, но я не смог найти другой метод, который сравнивал бы целые, а не строки. Это дало гольф-версию до 176 байт!


игра в гольф тоже немного бомба;)
— Роб Старлинг

1
@RobStarling они оба на самом деле!
— ThinkChaos

1
Очень люблю это! Я возился с ним немного , и кажется , что вы могли бы сделать его зеленым, изменяя \033[к \033[0;32m\033[(по крайней мере , в моем терминале). Насколько плоха идея, чтобы попытаться установить это как заставку терминала? : P
— Дом Гастингс

Хм. Я получаю 1059 байтов для первого и 190 байтов для второго.
— Рене Лидер

1
Вы, ребята, в основном волшебники! Спасибо, что поделился!
— Дом Гастингс

8

JavaScript, 830 байт

Он имеет все классические функции, такие как:

  1. черный фон
  2. зеленый текст
  3. белый текст при падении
  4. случайные символы
  5. пустые отверстия
  6. бесконечный цикл

window.onload=function(){
    var tbl=document.createElement('table'),
	body=document.body;
	body.style.backgroundColor='#000';
	body.style.color='#060';
	body.style.fontFamily='Lucida Console';

    for(var i = 0; i <= 30; i++){
        var tr = tbl.insertRow();
        for(var j = 0; j <= 50; j++){
            var td = tr.insertCell();
			td.style.width="2%";
        }
    }
    body.appendChild(tbl);
	setInterval(function(){
		rain(Math.floor((Math.random()*50)),0)
	},20);
}
function rain(n,i) {          
   setTimeout(function (){
	  var e=document.getElementsByTagName('tr')[i].childNodes[n];
	  e.style.color='#fff';
      e.innerHTML = '&#'+Math.floor((Math.random()*127)+1)+';';
	  setTimeout(function(){e.style.color=''},200)
	  
      if (i++ < 30) rain(n,i);
   },20);
};

Мне это нравится, потому что он невероятно легкий, подвижный и простой. наслаждаться!


6

QBasic 1, 587 байт, 32 + 5 = 37 баллов

DECLARE SUB d (p!, s!, x!, y!)
DIM t(80)
FOR i = 1 TO 80
    t(i) = INT(-50 * RND)
NEXT
s = TIMER

CLS
WHILE 1
    FOR i = 1 TO 80
        IF t(i) > 28 THEN t(i) = 0
        t(i) = t(i) + 1
        y = t(i)
        d 0, 0, i, y - 6
        d 2, 0, i, y - 5
        d 2, 0, i, y - 4
        d 10, 0, i, y - 3
        d 10, 0, i, y - 2
        d 11, 0, i, y - 1
        d 0, 2, i, y
    NEXT

    l = TIMER
    WHILE l = TIMER
    WEND
WEND

SUB d (p, s, x, y)
COLOR p, s
IF y > 0 AND y < 24 THEN LOCATE y, x: PRINT CHR$(33 + (x * y) MOD 200);
END SUB

Пример скриншота:

QBasic matrix 1

32 базовых пункта + 5 баллов за цвет. Но так как я плаваю значительно ниже 1024 байт, даже без обрезки или оптимизации пробелов, давайте добавим еще несколько вещей, чтобы украсть некоторые моменты:

QBasic 2, 913 байт, 32 + 5 + 15 + 5 = 57 баллов

DECLARE SUB d (p!, s!, x!, y!)
DIM t(80)
FOR i = 1 TO 80
    t(i) = INT(-50 * RND)
NEXT
s = TIMER
f = 0
w$ = "bullet"
o = 1
CLS
WHILE 1
    FOR i = 1 TO 80
        IF t(i) > 28 THEN t(i) = 0: IF f THEN SOUND 100 * i, 1
        t(i) = t(i) + 1
        y = t(i)
        d 0, 0, i, y - 6
        d 2 + x, 0, i, y - 5
        d 2 + x, 0, i, y - 4
        d 10 + x, 0, i, y - 3
        d 10 + x, 0, i, y - 2
        d 11 + x, 0, i, y - 1
        d 0, 2 + x, i, y
    NEXT
    k$ = INKEY$
    IF k$ <> "" THEN
        IF MID$(w$, o, 1) = k$ THEN
            o = o + 1
            IF o = LEN(w$) + 1 THEN z = 1: f = 100
        ELSE
            o = 1
        END IF

    END IF
    x = x + z
    l = TIMER
    WHILE l = TIMER
    WEND

WEND

SUB d (p, s, x, y)
COLOR p MOD 16, s MOD 16
IF y > 0 AND y < 24 THEN LOCATE y, x: PRINT CHR$(33 + (x * y) MOD 200);
END SUB

Пример скриншота (активирован цветовой эффект):

Qbasic Matrix 2

Те же функции, что и первый. Дополнительно имеет:

  • Цвет (+5)
  • Пароль для активации дополнительных функций. (Я требую +5 за это как новую функцию.)
  • Пароль активирует палитру затухания и звуковые эффекты. (+15 за звук.)

Видео, показывающее его в действии, включая цветовой эффект и звуковой эффект, активируемый паролем:

http://www.youtube.com/watch?v=MQc-FDl_AZ8


5

GTB , 42 балла

Выполнено из калькулятора TI-84, около 100 байт:

"  O O    O O   O"→Str1:"O  O   O O  O O "→Str2:0→X[@getkey=25$~""~""~""~""~""~""~""p;&@round(r;$~""#@round(r;$~Str1#~Str2&:&]

Последствия

Так как калькулятор чёрный + белый, для начала ничего не могу поделать ...

  • Зонт - Нажатие клавиши «вверх» удаляет дождь и сохраняет вас сухим, пока вы не нажметеEnter
  • Run Inside - Нажатие ONнарушает программу и дает вам хорошую крышу, чтобы держать вас сухим (вы можете вернуться в дождь, нажав Enterдважды

отлично работает на моем TI-92! Потрясающе.
— Рене Лидер

@ user3058846 Я рад, что тебе понравилось :) Я не знал, что GTB может работать на TI-92.
— Timtech

ТИ-92 Плюс на самом деле.
— Рене Лидер

@ user3058846 Так ты скачал компилятор, а? Отличная работа :)
— Timtech

4

Рубин: 374 персонажа

$><<"^[[2J"
w=->c,d,m{$><<"^[[0;3%d;%dm^[[%d;%dH%s"%[c,d[4],d[3]+d[1]-m,d[2],d[0][d[1]-m]]}
t=%w{Stack Exchange Programming Puzzle Code Golf}
r=[]
loop{r.map{|o|w[2,o,1]if o[1]>0
w[7,o,0]
o[1]+=1
o[0][0]==" "?r.delete(o):(o[0]=" "*o[1])*o[1]=0if o[1]>o[0].size}
sleep 0.1
r<<[(k=rand(10)%2)==0 ?t.sample: [*?a..?z].sample(rand(10)+5)*"",0,rand(80),rand(20),k+1]while r.size<25}

(Примечание: ^[одиночные символы.)

Описание:

  • 25 одновременных прогонов (поддерживается на низком уровне, поэтому предопределенные тексты остаются читаемыми)
  • каждый проход имеет 50% / 50% шанс быть либо
    • предопределенное слово - отображается яркими цветами
    • случайная строка из 5..15 строчных букв - отображается темными цветами
  • при отображении бега нижний цвет - белый, остальные - зеленый
  • после того, как пробег полностью отображается, он удаляется символ за символом

Образец прогона:

матричный дождь


Сколько байт (не символов)?
— Рене Лидер

1
Используются только однобайтовые символы, поэтому 374 байта.
— manatwork

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