Wykonaj Matrix Digital Rain przy użyciu jak najkrótszej ilości kodu [zamknięty]

21

Zasady:

  • Dowolny wybrany język (biblioteki standardowe).
  • Dane wyjściowe wyświetlane w Terminalu lub w Windows Command Processor lub w dowolny inny sposób .
    (bufor szerokości = 80)
  • Wystarczy znaki ASCII . (może dodać Unicode)
  • Nie powinien wypełniać całego ekranu podczas uruchamiania (powinien wyglądać jak deszcz, duh!).
  • Kolory otrzymują punkty bonusowe (+5).
  • Efekty : Losowe postacie, różne rozmiary upadków, okresowo się regenerują.

Punkty: (aktualizacja)

  • +32 punktów na początek.
  • -1 punkt za każdy bajt (nie znaki) w kodzie po bajcie ** 1024 *** th *.
  • Punkty mogą osiągnąć zero i ujemne.
  • Uwaga: Języki używające znaków wielobajtowych powinny liczyć bajty, a nie znaki.
  • +5 za każdy nowy efekt. (nie opublikowane przez innych)
  • +15 za dowolny z tych efektów:
    1. Wiatr (wysadza postacie w bok)
    2. Dopasowywanie liczb (wprowadzane przez użytkownika, np .: 90210):
      Liczba jest losowo umieszczana w macierzy
      wprowadź opis zdjęcia tutaj
    3. Dźwięk
    4. Zaszyfrowana wiadomość (dane wprowadzone przez użytkownika):
      Znaki reprezentują tajną zaszyfrowaną wiadomość
    5. Tryb Galaga:
      Wystrzeliwuje ^, aby zniszczyć postacie
      wprowadź opis zdjęcia tutaj

Tablica wyników:

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

Uwaga: Tablica wyników będzie / może być aktualizowana przez każdego po opublikowaniu prawidłowej odpowiedzi. Nie przekraczaj dziesięciu najlepszych pozycji. Dodaj więcej efektów do swojego kodu i pobij swój własny wynik!
Wyczyszczenie ekranu początkowego, czyszczenia, błędów, bibliotek stron trzecich itp. Nie będzie się liczyło do punktów Pamiętaj, aby podać szczegółowe informacje na temat nie. używanych bajtów i nazwy języka lub programu.

Neo: Co chcesz mi powiedzieć? Że mogę unikać pocisków?

Morfeusz: Nie, Neo. Próbuję ci powiedzieć, że kiedy będziesz gotowy, nie będziesz musiał.

Renae Lider
źródło
Co z bibliotekami?
Vereos
Dołącz lub importuj lub wymagaj tyle bibliotek, ile potrzebujesz (biblioteki standardowe)!
Renae Lider
Czy dodałbyś punkty, jeśli kod ma mniej niż 250 znaków? (Mam naprawdę krótkie rozwiązanie, ale nie ma ono wielu funkcji)
ThinkChaos
Nie będziesz tego potrzebować; nadal będziesz miał +32 punktów! Są szanse, że wiele przekroczy limit i zacznie upuszczać punkty, co powoduje, że krótkie kody podnoszą się do góry na tablicy wyników. (również dodanie większej liczby zasad i punktów skomplikowałoby sprawę)
Renae Lider
W porządku, dla zabawy dołączę wersję w golfa!
ThinkChaos

Odpowiedzi:

18

HTML, JavaScript i CSS: 1024 bajty, 47 punktów

Demo deszczu Matrix

Cechy:

  • Używa znaków Unicode (nie sądzę, że to daje punkty)
  • Podczas rysowania ślady zmieniają kolor z jasnego na ciemnozielony (*)
  • Po zakończeniu rysowania ślady zmieniają kolor z ciemnozielonego na czarny (*)
  • Losowy rozmiar tekstu na każdej ścieżce (*)
  • Szlaki są losowo zmieniane i zmieniane za każdym razem, gdy są rysowane

(*) Zażądam +5 punktów za każdy z nich, ale daj mi znać, jeśli się nie zgadzasz :-)

Próbny:

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

Kod źródłowy:

Dokładnie 1024 bajty. Obawiam się, że to trochę brzydkie.

<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()>
piskliwy kostuch
źródło
2
Wygląda dobrze jak zrzut ekranu, ale zjada bzdury z moich zasobów. +1 ode mnie
Samuel Cook
Bardzo fajny! Mogę ukraść twoje znaki Unicode :) +1
ThinkChaos
1
UglifyJS może usunąć 17 znaków z kodu źródłowego JavaScript. Nie, że to naprawdę ma znaczenie, ponieważ nie jest to golf golfowy (raczej wyzwanie to maksymalnie 1024 znaki).
Konrad Borowski
To zdecydowanie najlepsza wersja, jaką znalazłem na pierwszych dwóch stronach wyników Google. Naprawdę chciałbym, żebyś miał trochę miejsca na usunięcie niektórych dodawanych węzłów :) Naprawdę zabija mój komputer, aby pozostawić to otwarte
RustyToms
10

Grzmotnąć

1024 bajty (w tym komentarze)

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

Nowe efekty:

  • wszystko (pierwszy wpis);)
  • krople zatrzymają się losowo na ekranie
  • fajne efekty kolorystyczne: ostatni znak jest biały, a pozostałe są zielone
  • losowe znaki i sekwencje specjalne pozostają na konsoli ... Ok, to błąd, ale dlatego, że termin nie nadąża za ruchem kursora

Gra w golfa @ 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

Działa to w siatce 80x40. Możesz to zmienić w RANDOM%80ostatniej linii i r<$2+41w drugiej linii. Nie usuwam kropli po wyjściu z siatki, więc albo zmień rozmiar swojego terminu na 80x40, albo zmień 41 na $LINES+1. Jest kilka rzeczy, których nie ma w porównaniu do pełnej wersji:

  • przygotowanie terminu lub porządek
  • fantazyjne kolorowanie (zajmuje 52 bajty, więc nie warto)
  • zatrzymując się losowo (tutaj krople zawsze schodzą na dół)
  • Mógłbym obniżyć to do 174, nie określając minimalnej długości „kropli”: $[RANDOM%10+5]stałoby się$[RANDOM%15]

Mimo tych ograniczeń myślę, że to całkiem fajne!

Edycja: Próbowałem używać znaków Unicode, takich jak skrzypiące ossifrage, ale ponieważ są to znaki o podwójnej szerokości, dość szybko wypełniają siatkę i wygląda to dziwnie.

Zmniejszyłem również wersję golfa, używając punktów kodu Unicode zamiast ASCII, więc nie muszę iść ósemkowo przed uzyskaniem postaci, oszczędzając krok. Zrobiłem to samo w głównej wersji, ale dodałem komentarze, aby zachować 1024 bajty.

A potem zmieniłem porównanie int z [ $r -gt $2 ]na (($r>$2)), ta biała przestrzeń mnie zabijała, ale nie mogłem znaleźć innej metody, która porównywałaby inty, a nie łańcuchy. Dzięki temu wersja z golfem spadła do 176 bajtów!

ThinkChaos
źródło
ten golfowy jest też trochę widelec-bomba;)
Rob Starling
1
@RobStarling oboje są w rzeczywistości!
ThinkChaos
1
Naprawdę to kocham! Trochę majstrowałem przy nim i wydaje się, że można go zmienić \033[na zielony, zmieniając na \033[0;32m\033[(przynajmniej w moim terminalu). Jak źle jest spróbować ustawić to jako wygaszacz ekranu terminala? : P
Dom Hastings
Hmm Dostaję 1059 bajtów dla pierwszego i 190 bajtów dla drugiego.
Renae Lider,
1
Jesteście w zasadzie czarodziejami! Dzięki za udostępnienie!
Dom Hastings
8

JavaScript, 830 bajtów

Posiada wszystkie klasyczne funkcje, takie jak:

  1. czarne tło
  2. zielony tekst
  3. biały tekst podczas upadku
  4. losowe postacie
  5. puste dziury
  6. nieskończone zapętlenie

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

Podoba mi się, ponieważ jest niesamowicie lekki, płynny w ruchu i prosty. cieszyć się!

Samuel Cook
źródło
6

QBasic 1, 587 bajtów, 32 + 5 = 37 punktów

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

Przykładowy zrzut ekranu:

QBasic matrix 1

32 punkty bazowe + 5 punktów za kolor. Ale ponieważ pływam szczęśliwie znacznie poniżej 1024 bajtów, nawet bez przycinania i optymalizacji białych znaków, dodajmy jeszcze kilka rzeczy, aby ukraść niektóre punkty:

QBasic 2, 913 bajtów, 32 + 5 + 15 + 5 = 57 punktów

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

Przykładowy zrzut ekranu (aktywowany efekt koloru):

Matryca Qbasic 2

Te same funkcje, co pierwsza. Dodatkowo ma:

  • Kolor (+5)
  • Hasło do aktywacji dodatkowych funkcji. (Żądam +5 za to jako nową funkcję).
  • Hasło aktywuje zanikanie palety i efekty dźwiękowe. (+15 za dźwięk.)

Film pokazujący to w akcji, w tym efekt kolorystyczny i dźwiękowy aktywowany hasłem:

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

nitro2k01
źródło
5

GTB , 42 punkty

Wykonane z kalkulatora TI-84, około 100 bajtów:

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

Ruchomości

Ponieważ na początku kalkulator jest czarny + biały, niewiele można na nim zrobić ...

  • Parasol - Naciśnięcie klawisza w górę usuwa deszcz i zapewnia suchość, dopóki nie naciśnieszEnter
  • Run Inside - Naciśnięcie ONprzerywa program i daje ładny dach, abyś był suchy (możesz wrócić do deszczu, naciskając Enterdwukrotnie
Timtech
źródło
działa doskonale na moim TI-92! Niesamowite.
Renae Lider
@ user3058846 Cieszę się, że ci się podoba :) Nie wiedziałem jednak, że GTB może działać na TI-92.
Timtech
Właściwie TI-92 Plus.
Renae Lider,
@ user3058846 Więc pobrałeś kompilator?
Dobra
4

Rubin: 374 znaków

$><<"^[[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}

(Uwaga: ^[są pojedynczymi znakami.)

Opis:

  • 25 jednoczesnych przebiegów (utrzymywanych na niskim poziomie, aby wstępnie zdefiniowane teksty były czytelne)
  • każdy bieg ma 50% / 50% szansy na jedno z nich
    • predefiniowane słowo - wyświetlane w jasnych kolorach
    • losowy ciąg 5..15 małych liter - wyświetlany w ciemnych kolorach
  • podczas wyświetlania biegu dolny kolor jest biały, pozostałe zielone
  • po pełnym wyświetleniu przebiegu jest on usuwany znak po znaku

Przykładowy przebieg:

deszcz matrycowy

człowiek w pracy
źródło
Ile bajtów (nie znaków)?
Renae Lider
1
Użyto tylko znaków jednobajtowych, czyli 374 bajtów.
manatwork
Naprawdę podobała Ci się Twoja wersja! Tak trzymaj.
Renae Lider