가장 짧은 코드를 사용하여 Matrix Digital Rain 만들기 [닫기]


21

규칙 :

  • 선택한 모든 언어 (표준 라이브러리)
  • 터미널 또는 Windows 명령 프로세서 또는 원하는 다른 방법으로 출력이 표시됩니다 .
    (너비 버퍼 = 80)
  • ASCII 문자로 충분합니다. (유니 코드를 추가 할 수 있음)
  • 시작시 전체 화면을 채우지 않아야합니다 (비처럼 보일 것입니다!).
  • 색상 은 보너스 포인트를 얻습니다 (+5).
  • 효과 : 무작위 크기, 다른 가을 크기는 주기적으로 재생됩니다.

포인트 : (업데이트)

  • 시작 +32 포인트
  • ** 1024 *** 번째 * 바이트 뒤의 코드에서 모든 바이트 (문자가 아님) 에 대해 -1 점 .
  • 점수는 0과 음수에 도달 할 수 있습니다.
  • 참고 : 멀티 바이트 문자를 사용하는 언어 는 문자 가 아닌 바이트를 계산해야합니다.
  • 새로운 효과마다 +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     |              |
└-----┴------------┴------------┴-------------┴---------------┴--------------┘

참고 : 유효한 답변을 게시 한 후 누구나 스코어 보드를 업데이트 할 수 있습니다. 톱 10 자리를 초과하지 마십시오. 코드에 더 많은 효과를 추가하고 자신의 점수를 이길 수 있습니다!
초기 화면, 정리, 버그, 타사 라이브러리 등을 지우는 것은 포인트에 포함되지 않습니다. no에 대한 세부 정보를 포함하십시오. 사용 된 바이트 수 및 언어 또는 프로그램 이름

네오 : 무슨 말을하려고합니까? 총알을 피할 수 있습니까?

모르페우스 : 아니요, 네오. 준비가 되었으면 할 필요가 없다고 말하려고합니다.


도서관은 어떻습니까?
Vereos

필요한만큼의 라이브러리를 포함 또는 가져 오기 또는 필요 (표준 라이브러리)!
Renae Lider

코드가 250 자 미만인 경우 포인트를 추가 하시겠습니까? (정말 짧은 해결책은 있지만 많은 기능이 없습니다)
ThinkChaos

당신은 그것을 필요로하지 않을 것입니다; 당신은 여전히 ​​+32 포인트를 가질 것입니다! 많은 사람들이 한도를 초과하고 점수가 짧은 코드를 점수 표에서 위로 올리도록 점수를 떨어 뜨릴 수 있습니다. (또한 더 많은 규칙과 포인트를 추가하면 문제가 복잡 할 것입니다)
Renae Lider

좋아, 난 그냥 재미를 위해 골프 버전을 포함합니다!
ThinkChaos

답변:


18

HTML, 자바 스크립트 및 CSS : 1024 바이트, 47 포인트

매트릭스 비 데모

풍모:

  • 유니 코드 문자를 사용합니다 (이 점은 점수가 없다고 생각합니다)
  • 트레일이 그려지는 동안 밝고 짙은 녹색으로 변색됩니다 (*)
  • 그림이 끝나면 트레일이 진한 녹색에서 검은 색으로 바뀝니다 (*)
  • 각 트레일에서 임의의 텍스트 크기 (*)
  • 트레일은 그릴 때마다 무작위로 재배치되고 크기가 조정됩니다

(*) 나는 이것들 각각에 대해 +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
Samuel Cook

정말 멋진! 유니 코드 문자를 훔칠 수도 있습니다 :) +1
ThinkChaos

1
UglifyJS는 JavaScript 소스 코드에서 17자를 제거 할 수 있습니다. 이것이 코드 골프가 아니기 때문에 실제로 중요하지는 않습니다 (대신 최대 1024 자에게 도전하십시오).
Konrad Borowski

이것은 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

새로운 효과 :

  • 모든 것 (첫 번째 항목);)
  • 방울이 화면에서 무작위로 멈 춥니 다
  • 멋진 색상 효과 : 마지막 문자는 흰색이고 다른 문자는 녹색입니다.
  • 임의의 문자와 이스케이프 시퀀스는 콘솔에 남아 있습니다 ... 좋아요, 버그이지만 용어는 커서 이동을 따라갈 수 없기 때문입니다

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

이것은 80x40 그리드에서 작동합니다. RANDOM%80마지막 줄과 r<$2+41두 번째 줄 에서 변경할 수 있습니다 . 그리드에서 벗어난 후 방울을 지우지 않으므로 용어의 크기를 80x40으로 조정하거나 41을로 변경하십시오 $LINES+1. 정식 버전과 비교하지 않은 몇 가지 사항이 있습니다.

  • 용어 준비 또는 정리
  • 멋진 채색 (52 바이트를 차지하므로 가치가 없음)
  • 무작위로 멈추기 (여기서 드롭은 항상 아래쪽으로 내려갑니다)
  • "drops"의 최소 길이를 지정하지 않으면 174로 줄일 $[RANDOM%10+5]수 있습니다.$[RANDOM%15]

그 한계에도 불구하고 꽤 멋지다고 생각합니다!

편집 : squeamish ossifrage와 같은 유니 코드 문자를 사용해 보았지만 두 배 너비 문자이기 때문에 그리드를 매우 빠르게 채우고 이상하게 보입니다.

또한 ASCII 대신 유니 코드 코드 포인트를 사용하여 골프 버전을 줄 였으므로 문자를 가져 오기 전에 8 진수로 갈 필요가 없으므로 단계가 절약됩니다. 기본 버전에서 동일한 작업을 수행했지만 주석을 추가하여 1024 바이트로 유지했습니다.

그런 다음 int 비교를에서 [ $r -gt $2 ]로 변경 하여 (($r>$2))공백이 나를 죽이고 있지만 문자열이 아닌 정수를 비교하는 다른 방법을 찾을 수 없었습니다. 이것은 골프 버전을 176 btyes로 줄였습니다!


골프를 한 사람도 약간 폭탄 폭탄이다;)
Rob Starling

1
@RobStarling 둘 다 실제로입니다!
ThinkChaos

1
이것을 정말로 사랑합니다! 나는 그것을 조금 땜질했으며 (최소한 내 터미널에서) 로 변경 \033[하여 녹색으로 만들 수있는 것 같습니다 \033[0;32m\033[. 이것을 터미널 스크린 세이버로 설정하는 것이 얼마나 나쁜 생각입니까? : P
Dom Hastings

흠. 첫 번째는 1059 바이트, 두 번째는 190 바이트를 얻습니다.
Renae Lider

1
너희들은 기본적으로 마법사입니다! 공유해 주셔서 감사합니다!
Dom Hastings

8

자바 스크립트, 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

Q 기본 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

샘플 스크린 샷 :

Q 기본 행렬 1

기준점 32 점 + 색상 5 점 그러나 공백 자르기 또는 최적화가 없어도 1024 바이트 아래로 행복하게 떠 다니기 때문에 몇 가지 점을 추가하여 몇 가지 점을 훔쳐 봅시다.

Q 기본 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

샘플 스크린 샷 (색상 효과 활성화) :

Q 기본 매트릭스 2

첫 번째 기능과 동일한 기능입니다. 또한 다음이 있습니다.

  • 색상 (+5)
  • 추가 기능을 활성화하기위한 비밀번호입니다. (이 기능에 대해 +5를 새로운 기능으로 주장하고 있습니다.)
  • 암호는 팔레트 페이드 및 사운드 효과를 활성화합니다. (소리는 +15입니다.)

암호로 활성화 된 색상 효과 및 사운드 효과를 포함하여 작동중인 비디오 :

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


5

GTB , 42 포인트

약 100 바이트의 TI-84 계산기에서 실행 :

"  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에서 완벽하게 작동합니다! 대단해
Renae Lider

@ user3058846 나는 당신이 그것을 좋아해서 기쁘다 :) GTB가 TI-92에서 실행될 수 있다는 것을 몰랐다.
Timtech

실제로 TI-92 Plus.
Renae Lider

@ user3058846 컴파일러 eh를 다운로드 했습니까? 좋은 일 :)
Timtech

4

루비 : 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의 임의 문자열 – 어두운 색으로 표시
  • 런을 표시하는 동안 하단 색상은 흰색, 다른 색상은 녹색
  • 실행이 완전히 표시된 후에는 문자별로 제거됩니다.

샘플 실행 :

매트릭스 비


문자가 아닌 몇 바이트입니까?
Renae Lider

1
단일 바이트 문자 만 사용되므로 374 바이트입니다.
manatwork

당신의 버전을 정말 좋아했습니다! 좋은 일을 계속하십시오.
Renae Lider
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.