Зробіть Matrix Digital Rain, використовуючи найменшу кількість коду [закрито]


21

Правила:

  • Будь-яку мову, яку ви вибрали (Стандартні бібліотеки).
  • Виведення відображається в терміналі або процесорі команд Windows або будь-яким іншим способом .
    (ширина буфера = 80)
  • ASCII символів вистачає. (може додати Unicode)
  • Не повинен заповнювати весь екран при запуску (повинен виглядати як дощ, так!).
  • Кольори отримують бонусні бали (+5).
  • Ефекти : Випадкові символи, різного розміру падіння, періодично відновлюються.

Бали: (оновлення)

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

Табло:

┌-----┬------------┬------------┬-------------┬---------------┬--------------┐
| 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     |              |
└-----┴------------┴------------┴-------------┴---------------┴--------------┘

Примітка: Таблиця обміну буде / могла бути оновлена ​​будь-хто після публікації дійсної відповіді. Не перевищуйте десятку позицій. Додайте більше ефектів до свого коду та побийте власний рахунок!
Очищення початкового екрана, очищення, помилок, сторонніх бібліотек тощо не зараховуватиметься до пунктів. Не забудьте включити подробиці про "ні". використовуваних байтів та назви мови чи програми.

Нео: Що ти намагаєшся сказати мені? Що я можу ухилитися від куль?

Морфей: Ні, Нео. Я намагаюся сказати вам, що коли будете готові, вам не доведеться.


Що з бібліотеками?
Вереос

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

Чи додали б ви балів, якщо код має менше 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

Нові ефекти:

  • все (перший запис);)
  • краплі зупиняються випадковим чином на екрані
  • круті кольорові ефекти: останній кольоровий знак - білий, а інші - зелений
  • випадкові символи та послідовності втечі залишаються на консолі ... Добре, це помилка, але це тому, що термін не може йти в ногу з рухом курсору

Гольф @ 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

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

  • термін підготовки або очищення
  • фантазійне забарвлення (займає 52 байти, тому не варто)
  • зупиняючись випадковим чином (тут краплі завжди спускаються на дно)
  • Я міг би звести його до 174, не вказавши мінімальної довжини для "крапель": $[RANDOM%10+5]став би$[RANDOM%15]

Навіть з тими обмеженнями, я думаю, це досить круто!

Редагувати: Я спробував використовувати символи unicode, такі як кричущі коси, але оскільки вони мають подвійну ширину, вони заповнюють сітку досить швидко, і це виглядає дивним чином.

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

А потім змінив між собою порівняння з [ $r -gt $2 ]на (($r>$2)), що білий простір вбив мене, але я не міг знайти іншого методу, який би порівнював ints, а не рядки. Це призвело до версії для гольфу до 176 btyes!


гольф теж трохи бомбардуркою-бомбою;)
Роб Старлінг

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 матриця 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 матриця 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
  • Запустити всередину - натискання ONперерви програму і дає вам гарний дах, щоб ви залишалися сухими (ви можете повернутися назад у дощ, натиснувши Enterдвічі

прекрасно працює на моєму TI-92! Дивовижно.
Рена Лідер

@ user3058846 Я радий, що вам це подобається :) Я не знав, що GTB може виконувати на TI-92, хоча.
Timtech

Фактично TI-92 Plus.
Рена Лідер

@ user3058846 Отже, ви завантажили компілятор, а? Приємна робота :)
Timtech

4

Ruby: 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 байти.
манантська робота

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