Jadikan Matrix Digital Rain menggunakan kode dengan jumlah terpendek [ditutup]

21

Aturan:

  • Bahasa apa pun yang Anda pilih (Perpustakaan Standar).
  • Output ditampilkan di Terminal atau Windows Command Processor atau cara lain yang Anda inginkan.
    (penyangga lebar = 80)
  • Karakter ASCII sudah cukup. (dapat menambahkan Unicode)
  • Seharusnya tidak mengisi seluruh layar saat start-up (Seharusnya terlihat seperti hujan, ya!).
  • Warna mendapat poin bonus (+5).
  • Efek : Karakter acak, ukuran jatuh yang berbeda, diperbarui secara berkala.

Poin: (perbarui)

  • +32 poin untuk memulai.
  • -1 titik untuk setiap byte (bukan karakter) dalam kode setelah ** 1024 *** th * byte.
  • Poin bisa mencapai nol dan negatif.
  • Catatan: Bahasa yang menggunakan karakter multibyte harus menghitung byte bukan karakter.
  • +5 untuk setiap efek baru. (tidak diposting oleh orang lain)
  • +15 untuk semua efek ini:
    1. Wind (meniup karakter ke samping)
    2. Pencocokan Angka (input pengguna, misalnya: 90210):
      Angka terletak secara acak di dalam matriks
      masukkan deskripsi gambar di sini
    3. Suara
    4. Pesan terenkripsi (input pengguna):
      Karakter mewakili pesan terenkripsi rahasia
    5. Mode Galaga:
      Fires ^ untuk menghancurkan karakter
      masukkan deskripsi gambar di sini

Papan angka:

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

Catatan: Papan Skor akan / dapat diperbarui oleh siapa pun setelah memposting jawaban yang valid. Jangan melebihi posisi sepuluh besar. Tambahkan lebih banyak efek ke kode Anda dan kalahkan skor Anda sendiri!
Menghapus layar awal, pembersihan, bug, perpustakaan pihak ketiga, dll. Tidak akan dihitung pada poin Ingatlah untuk menyertakan detail tentang tidak. byte yang digunakan dan nama bahasa atau program.

Neo: Apa yang ingin kamu katakan padaku? Bahwa aku bisa menghindari peluru?

Morpheus: Tidak, Neo. Saya mencoba memberi tahu Anda bahwa ketika Anda siap, Anda tidak perlu melakukannya.

Renae Lider
sumber
Bagaimana dengan perpustakaan?
Vereos
Sertakan atau Impor atau Wajibkan perpustakaan sebanyak yang Anda butuhkan (perpustakaan standar)!
Renae Lider
Apakah Anda menambahkan poin jika kode di bawah 250 karakter? (Saya punya solusi yang sangat singkat tetapi tidak memiliki banyak fitur)
ThinkChaos
Anda tidak akan membutuhkannya; Anda masih memiliki +32 poin! Kemungkinannya adalah, banyak yang akan melampaui batas dan mulai menjatuhkan poin sehingga kode pendek naik ke atas di papan skor. (juga, menambahkan lebih banyak aturan dan poin akan menyulitkan hal-hal)
Renae Lider
Baiklah, saya akan memasukkan versi golf hanya untuk bersenang-senang!
ThinkChaos

Jawaban:

18

HTML, Javascript, dan CSS: 1024 byte, 47 poin

Demo hujan matriks

Fitur:

  • Menggunakan karakter Unicode (tidak berpikir ini skor poin apa pun)
  • Jalur memudar dari hijau terang ke gelap saat sedang digambar (*)
  • Jejak juga memudar dari hijau gelap ke hitam setelah gambar selesai (*)
  • Ukuran teks acak di setiap jejak (*)
  • Jejak direposisi dan diubah ukurannya secara acak setiap kali digambar

(*) Saya akan mengklaim 5 poin untuk masing-masing poin ini, tetapi beri tahu saya jika Anda tidak setuju :-)

Demo:

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

Kode sumber:

Tepatnya 1024 byte. Agak jelek, kurasa.

<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()>
osifrque melengking
sumber
2
Ini terlihat bagus sebagai tangkapan layar tetapi memakan sumber daya saya. +1 dari saya
Samuel Cook
Benar-benar keren! Saya mungkin mencuri karakter unicode Anda :) +1
ThinkChaos
1
UglifyJS dapat menghapus 17 karakter dari kode sumber JavaScript. Bukan berarti itu penting, karena ini bukan kode golf (lebih tepatnya, maks 1024 karakter tantangan).
Konrad Borowski
Sejauh ini, ini adalah versi terbaik dari ini yang saya temukan di dua halaman pertama hasil Google. Saya benar-benar berharap Anda memiliki ruang untuk benar-benar menghapus beberapa node yang Anda tambahkan :) benar-benar membunuh komputer saya untuk membiarkannya terbuka
RustyToms
10

Pesta

1024 byte (termasuk komentar)

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

Efek baru:

  • semuanya (entri pertama);)
  • tetes akan berhenti secara acak di layar
  • efek warna sejuk: arang terakhir berwarna putih sedangkan arang lainnya berwarna hijau
  • karakter acak dan urutan pelarian tetap ada di konsol ... Oke, itu bug tapi itu karena istilahnya tidak bisa mengikuti pergerakan kursor

Golf @ 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

Ini berfungsi di kisi 80x40. Anda dapat mengubahnya di RANDOM%80pada baris terakhir, dan r<$2+41pada baris ke-2. Saya tidak menghapus tetesan setelah keluar dari kotak sehingga mengubah ukuran istilah Anda menjadi 80x40 atau mengubah 41 menjadi $LINES+1. Ada beberapa hal yang tidak dibandingkan dengan versi lengkap:

  • persiapan istilah atau pembersihan
  • pewarnaan mewah (membutuhkan 52 byte, jadi tidak sepadan)
  • berhenti secara acak (di sini tetes selalu turun ke bawah)
  • Saya bisa menurunkannya ke 174 dengan tidak menentukan panjang minimum untuk "tetes": $[RANDOM%10+5]akan menjadi$[RANDOM%15]

Bahkan dengan keterbatasan itu saya pikir itu cukup keren!

Sunting: Saya mencoba menggunakan unicode chars seperti osifrque melengking, tetapi karena mereka chars lebar ganda mereka mengisi grid cukup cepat dan akhirnya tampak aneh.

Saya juga mengurangi versi golf dengan menggunakan poin kode unicode, bukan ASCII, jadi saya tidak harus pergi oktal sebelum mendapatkan karakter, menyimpan langkah. Saya melakukan hal yang sama di versi utama, tetapi menambahkan komentar agar tetap pada 1024 byte.

Dan kemudian mengubah perbandingan int dari [ $r -gt $2 ]menjadi (($r>$2)), ruang putih itu membunuh saya, tetapi saya tidak bisa menemukan metode lain yang membandingkan int dan bukan string. Ini membuat versi golf turun menjadi 176 btyes!

ThinkChaos
sumber
yang golf juga sedikit bom fork;)
Rob Starling
1
@RobStarling mereka berdua sebenarnya!
ThinkChaos
1
Sangat mencintai ini! Saya sudah bermain-main sedikit dan sepertinya Anda bisa membuatnya hijau dengan mengubah \033[ke \033[0;32m\033[(setidaknya di terminal saya). Seberapa buruk ide itu untuk mencoba dan mengatur ini sebagai screensaver terminal? : P
Dom Hastings
Hmm. Saya mendapatkan 1059 byte untuk yang pertama dan 190 byte untuk yang kedua.
Renae Lider
1
Kalian pada dasarnya penyihir! Terima kasih telah berbagi!
Dom Hastings
8

JavaScript, 830 byte

Ini memiliki semua fitur klasik seperti:

  1. latar belakang hitam
  2. teks hijau
  3. teks putih saat jatuh
  4. karakter acak
  5. lubang kosong
  6. perulangan tak terbatas

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

Saya suka karena beratnya sangat ringan, bergerak lancar, dan sederhana. Nikmati!

Samuel Cook
sumber
6

QBasic 1, 587 byte, 32 + 5 = 37 poin

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

Contoh tangkapan layar:

QBasic matrix 1

32 poin dasar + 5 poin untuk warna. Tetapi karena saya mengapung dengan senang hati jauh di bawah 1024 byte bahkan tanpa pemotongan atau optimasi spasi, mari tambahkan beberapa hal lagi untuk mencuri beberapa poin:

QBasic 2, 913 bytes, 32 + 5 + 15 + 5 = 57 poin

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

Tangkapan layar sampel (efek warna diaktifkan):

Matriks Qbasic 2

Fitur yang sama dengan yang pertama. Selain itu ia memiliki:

  • Warna (+5)
  • Kata sandi untuk mengaktifkan fitur tambahan. (Saya mengklaim +5 untuk ini sebagai fitur baru.)
  • Kata sandi mengaktifkan efek palet pudar dan suara. (+15 untuk suara.)

Video menunjukkannya dalam aksi, termasuk efek warna dan efek suara yang diaktifkan oleh kata sandi:

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

nitro2k01
sumber
5

GTB , 42 poin

Dieksekusi dari kalkulator TI-84, sekitar 100 byte:

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

Efek

Karena kalkulator hitam + putih untuk memulai, tidak dapat berbuat banyak di sana ...

  • Payung - Menekan tombol atas membersihkan hujan dan membuat Anda tetap kering sampai Anda menekanEnter
  • Jalankan Di Dalam - Menekan ONmemecah program dan memberi Anda atap yang bagus untuk membuat Anda tetap kering (Anda dapat kembali keluar ke hujan dengan menekan Enterdua kali
Timtech
sumber
bekerja dengan baik pada TI-92 saya! Luar biasa.
Renae Lider
@ user3058846 Saya senang Anda menyukainya :) Saya tidak tahu bahwa GTB dapat mengeksekusi pada TI-92.
Timtech
Sebenarnya TI-92 Plus.
Renae Lider
@ user3058846 Jadi Anda mengunduh kompiler eh? Kerja bagus :)
Timtech
4

Ruby: 374 karakter

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

(Catatan: ^[adalah karakter tunggal.)

Deskripsi:

  • 25 run simultan (tetap rendah agar teks yang telah ditetapkan tetap dapat dibaca)
  • setiap proses memiliki peluang 50% / 50% untuk menjadi keduanya
    • kata yang sudah ditentukan sebelumnya - ditampilkan dalam warna-warna cerah
    • string acak 5.15 huruf kecil - ditampilkan dalam warna gelap
  • saat menampilkan proses, warna dasarnya putih, yang lain hijau
  • setelah dijalankan sepenuhnya ditampilkan, itu dihapus karakter demi karakter

Contoh dijalankan:

matriks hujan

manatwork
sumber
Berapa banyak byte (bukan karakter)?
Renae Lider
1
Hanya karakter byte tunggal yang digunakan, jadi 374 byte.
manatwork
Sangat menyukai versi Anda! Terus bekerja dengan baik.
Renae Lider