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


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

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!


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


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


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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.