Tạo cơn mưa kỹ thuật số ma trận bằng cách sử dụng số lượng mã ngắn nhất [đã đóng]


21

Quy tắc:

  • Bất kỳ ngôn ngữ nào bạn chọn (Thư viện chuẩn).
  • Đầu ra được hiển thị trong Terminal hoặc Windows Command Processor hoặc bất kỳ cách nào khác bạn thích.
    (bộ đệm chiều rộng = 80)
  • Nhân vật ASCII là đủ. (có thể thêm Unicode)
  • Không nên lấp đầy toàn bộ màn hình khi khởi động (Nên trông giống như một cơn mưa, duh!).
  • Màu sắc được điểm thưởng (+5).
  • Tác dụng : Ký tự ngẫu nhiên, kích cỡ mùa thu khác nhau, tái sinh định kỳ.

Điểm: (cập nhật)

  • +32 điểm để bắt đầu.
  • -1 điểm cho mỗi byte (không phải ký tự) trong mã sau byte ** 1024 *** th *.
  • Điểm có thể đạt đến không và âm.
  • Lưu ý: Các ngôn ngữ sử dụng các ký tự đa dòng nên đếm byte không phải ký tự.
  • +5 cho mỗi hiệu ứng mới. (không được đăng bởi người khác)
  • +15 cho bất kỳ hiệu ứng nào trong số này:
    1. Gió (thổi nhân vật sang một bên)
    2. Kết hợp số (đầu vào của người dùng, ví dụ: 90210):
      Số được đặt ngẫu nhiên trong ma trận
      nhập mô tả hình ảnh ở đây
    3. Âm thanh
    4. Tin nhắn được mã hóa (đầu vào của người dùng):
      Ký tự đại diện cho một tin nhắn được mã hóa bí mật
    5. Chế độ Galaga:
      Bắn ^ để tiêu diệt nhân vật
      nhập mô tả hình ảnh ở đây

Bảng điểm:

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

Lưu ý: Bảng điểm sẽ / có thể được cập nhật bởi bất cứ ai sau khi đăng câu trả lời hợp lệ. Không vượt quá mười vị trí hàng đầu. Thêm nhiều hiệu ứng vào mã của bạn và đánh bại số điểm của riêng bạn!
Xóa màn hình ban đầu, dọn dẹp, lỗi, thư viện của bên thứ ba, v.v. sẽ không được tính vào các điểm Hãy nhớ bao gồm các chi tiết về không. byte được sử dụng và tên của ngôn ngữ hoặc chương trình.

Neo: Bạn đang cố nói gì với tôi? Rằng tôi có thể né đạn?

Morpheus: Không, Neo. Tôi đang cố nói với bạn rằng khi bạn sẵn sàng, bạn sẽ không phải làm thế.


Thư viện thì sao?
Vereos

Bao gồm hoặc Nhập hoặc Yêu cầu nhiều thư viện bạn cần (thư viện chuẩn)!
Renae Lider

Bạn sẽ thêm điểm nếu mã dưới 250 ký tự? (Tôi có một giải pháp thực sự ngắn nhưng nó không có nhiều tính năng)
ThinkChaos

Bạn sẽ không cần nó; bạn vẫn có +32 điểm! Rất có thể, nhiều người sẽ vượt quá giới hạn và bắt đầu giảm điểm khiến các mã ngắn được nâng lên hàng đầu trên bảng điểm. (đồng thời, thêm nhiều quy tắc và điểm sẽ làm phức tạp công cụ)
Renae Lider

Được rồi, tôi sẽ bao gồm một phiên bản chơi golf chỉ để cho vui!
ThinkChaos

Câu trả lời:


18

HTML, Javascript và CSS: 1024 byte, 47 điểm

Ma trận mưa demo

Tính năng, đặc điểm:

  • Sử dụng các ký tự Unicode (mặc dù không nghĩ rằng điểm này đạt được bất kỳ điểm nào)
  • Các đường mòn mờ dần từ sáng đến xanh đậm khi chúng đang được vẽ (*)
  • Các đường nhỏ cũng mờ dần từ màu xanh đậm sang màu đen sau khi bản vẽ kết thúc (*)
  • Kích thước văn bản ngẫu nhiên trong mỗi dấu vết (*)
  • Các đường nhỏ được định vị lại ngẫu nhiên và thay đổi kích thước mỗi lần chúng được rút ra

(*) Tôi sẽ yêu cầu +5 điểm cho mỗi trong số này, nhưng hãy cho tôi biết nếu bạn không đồng ý :-)

Bản giới thiệu:

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

Mã nguồn:

Chính xác là 1024 byte. Nó hơi xấu xí, tôi sợ.

<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
Nó trông đẹp như một tấm ảnh chụp màn hình nhưng nó ăn hết tài nguyên của tôi. +1 từ tôi
Samuel Cook

Thật tuyệt! Tôi có thể đánh cắp các ký tự unicode của bạn :) +1
ThinkChaos

1
UglifyJS có thể xóa 17 ký tự khỏi mã nguồn JavaScript. Không phải là nó thực sự quan trọng, vì đây không phải là mã golf (thay vào đó, thử thách tối đa 1024 ký tự).
Konrad Borowski

Đây là phiên bản tốt nhất mà tôi đã tìm thấy trên hai trang đầu tiên của kết quả Google. Tôi thực sự mong bạn có một số chỗ để thực sự loại bỏ một số nút bạn đang thêm :) thực sự giết chết máy tính của tôi để mở nó
RustyToms 23/2/2017

10

Bash

1024 byte (bao gồm cả ý kiến)

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

Hiệu ứng mới:

  • mọi thứ (mục đầu tiên);)
  • giọt sẽ dừng ngẫu nhiên trên màn hình
  • hiệu ứng màu sắc mát mẻ: char cuối cùng có màu trắng trong khi các hiệu ứng khác có màu xanh lá cây
  • ký tự ngẫu nhiên và các chuỗi thoát vẫn ở trên bảng điều khiển ... Ok, đó là một lỗi nhưng đó là vì thuật ngữ này không theo kịp chuyển động của con trỏ

Chơi gôn @ 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

Điều này hoạt động trong một lưới 80x40. Bạn có thể thay đổi điều đó ở RANDOM%80dòng cuối cùng và r<$2+41trên dòng thứ hai. Tôi không xóa các giọt sau khi chúng ra khỏi lưới để thay đổi kích thước của bạn thành 80x40 hoặc thay đổi 41 thành $LINES+1. Có một vài điều mà nó không có so với phiên bản đầy đủ:

  • chuẩn bị hạn hoặc dọn dẹp
  • màu sắc ưa thích (mất 52 byte, vì vậy không đáng)
  • dừng ngẫu nhiên (ở đây giọt luôn rơi xuống đáy)
  • Tôi có thể hạ nó xuống còn 174 bằng cách không chỉ định độ dài tối thiểu cho "giọt": $[RANDOM%10+5]sẽ trở thành$[RANDOM%15]

Ngay cả với những hạn chế đó, tôi nghĩ nó khá tuyệt!

Chỉnh sửa: Tôi đã thử sử dụng các ký tự unicode như ossifrage vuông, nhưng vì chúng là các ký tự có chiều rộng gấp đôi, chúng lấp đầy lưới khá nhanh và cuối cùng trông rất lạ.

Tôi cũng đã giảm phiên bản chơi gôn bằng cách sử dụng các điểm mã unicode thay vì ASCII, vì vậy tôi không phải đi bát phân trước khi nhận được một ký tự, tiết kiệm một bước. Tôi đã làm điều tương tự trong phiên bản chính, nhưng đã thêm nhận xét để giữ nó ở mức 1024 byte.

Và sau đó thay đổi so sánh int từ [ $r -gt $2 ]sang (($r>$2)), khoảng trắng đó đang giết chết tôi nhưng tôi không thể tìm thấy một phương pháp khác so sánh ints và không phải chuỗi. Điều này có phiên bản golf xuống tới 176 btyes!


người chơi golf cũng là một chút của một quả bom ngã ba;)
Rob Starling

1
@RobStarling cả hai đều thực sự!
ThinkChaos

1
Thực sự yêu thương này! Tôi đã sửa lại nó một chút và dường như bạn có thể làm cho nó xanh hơn bằng cách thay đổi \033[thành \033[0;32m\033[(ít nhất là trong thiết bị đầu cuối của tôi). Làm thế nào xấu một ý tưởng để thử và thiết lập nó như là một trình bảo vệ màn hình đầu cuối? : P
Dom Hastings

Hừm. Tôi nhận được 1059 byte cho cái đầu tiên và 190 byte cho cái thứ hai.
Renae Lider

1
Các bạn về cơ bản là các pháp sư! Cám ơn vì đã chia sẻ!
Dom Hastings

8

JavaScript, 830 byte

Nó có tất cả các tính năng cổ điển như:

  1. phông nền màu đen
  2. văn bản màu xanh lá cây
  3. chữ trắng khi rơi
  4. nhân vật ngẫu nhiên
  5. lỗ trống
  6. vòng lặp vô hạn

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

Tôi thích nó bởi vì nó có trọng lượng cực kỳ nhẹ, chất lỏng trong chuyển động, và đơn giản. thưởng thức!


6

QBasic 1, 587 byte, 32 + 5 = 37 điểm

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

Ảnh chụp màn hình mẫu:

Ma trận QBasic 1

32 điểm cơ bản + 5 điểm cho màu sắc. Nhưng vì tôi đang trôi nổi hạnh phúc dưới 1024 byte ngay cả khi không cắt xén hoặc tối ưu hóa khoảng trắng, chúng ta hãy thêm một vài điều nữa để lấy cắp một số điểm:

QBasic 2, 913 byte, 32 + 5 + 15 + 5 = 57 điểm

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

Ảnh chụp màn hình mẫu (hiệu ứng màu được kích hoạt):

Ma trận Qbasic 2

Các tính năng tương tự như cái đầu tiên. Ngoài ra, nó có:

  • Màu (+5)
  • Một mật khẩu để kích hoạt các tính năng bổ sung. (Tôi đang khẳng định +5 cho điều này như một tính năng mới.)
  • Mật khẩu kích hoạt một bảng màu mờ dần và hiệu ứng âm thanh. (+15 cho âm thanh.)

Video hiển thị nó hoạt động, bao gồm hiệu ứng màu sắc và hiệu ứng âm thanh được kích hoạt bằng mật khẩu:

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


5

GTB , 42 điểm

Được thực hiện từ máy tính TI-84, khoảng 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&:&]

Hiệu ứng

Vì máy tính có màu đen + trắng để bắt đầu, không thể làm gì nhiều ở đó ...

  • Ô dù - Bấm phím lên sẽ làm sạch cơn mưa và giữ cho bạn khô ráo cho đến khi bạn nhấnEnter
  • Chạy bên trong - Nhấn để ONphá vỡ chương trình và cung cấp cho bạn một mái nhà đẹp để giữ cho bạn khô ráo (bạn có thể quay trở lại cơn mưa bằng cách nhấn Enterhai lần

hoạt động hoàn hảo trên TI-92 của tôi! Tuyệt vời.
Renae Lider

@ user3058846 Tôi rất vui vì bạn thích nó :) Tôi không biết rằng GTB có thể thực thi trên TI-92.
TimTech

TI-92 Plus thực sự.
Renae Lider

@ user3058846 Vậy bạn đã tải xuống trình biên dịch hả? Làm tốt lắm :)
Timtech

4

Ruby: 374 ký tự

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

(Lưu ý: ^[là các ký tự đơn.)

Sự miêu tả:

  • 25 lần chạy đồng thời (giữ ở mức thấp để các văn bản được xác định trước vẫn có thể đọc được)
  • mỗi lần chạy có 50% / 50% cơ hội là một trong hai
    • một từ được xác định trước - hiển thị bằng màu sáng
    • một chuỗi ngẫu nhiên gồm 5..15 chữ cái viết thường - hiển thị màu tối
  • Trong khi hiển thị màu chạy phía dưới là màu trắng, các màu khác màu xanh lá cây
  • sau khi chạy được hiển thị đầy đủ, nó được loại bỏ từng ký tự

Chạy mẫu:

ma trận mưa


Có bao nhiêu byte (không phải ký tự)?
Renae Lider

1
Chỉ các ký tự byte đơn được sử dụng, vì vậy 374 byte.
thao tác

Thực sự thích phiên bản của bạn! Hãy tiếp tục phát huy.
Renae Lider
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.