最短のコードを使用してマトリックスデジタルレインを作成する[終了]


21

ルール:

  • 選択した言語(標準ライブラリ)。
  • ターミナルまたはWindowsコマンドプロセッサ、またはその他の方法で表示される出力。
    (幅バッファ= 80)
  • ASCII文字で十分です。(Unicodeを追加できます)
  • 起動時に画面全体を埋めてはいけません(雨のように見えるはずです!)。
  • はボーナスポイント(+5)を獲得します。
  • 効果:ランダムなキャラクター、さまざまな落下サイズ、定期的に再生します。

ポイント:(更新)

  • +32ポイントから始めます。
  • ** 1024 *** th *バイトの後のコード内のすべてのバイト(charsではない)に対して-1ポイント。
  • ポイントはゼロおよびマイナスに達する可能性があります。
  • 注:マルチバイト文字を使用する言語は、文字ではなくバイトをカウントする必要があります。
  • 新しいエフェクトごとに+5。(他の人によって投稿されていない)
  • これらの効果のいずれかで+15
    1. 風(キャラクターを横に吹く)
    2. Number Matching(ユーザー入力、例:90210):
      数値はマトリックス内でランダムに配置されます
      ここに画像の説明を入力してください
    3. Encrypted msg(user input):
      文字は、暗号化された秘密のメッセージを表します
    4. ガラガモード:
      キャラクターを破壊するために^を発射
      ここに画像の説明を入力してください

スコアボード:

┌-----┬------------┬------------┬-------------┬---------------┬--------------┐
| 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位を超えないでください。コードにエフェクトを追加して、独自のスコアを破りましょう!
初期画面、クリーンアップ、バグ、サードパーティのライブラリなどをクリアしても、ポイントにはカウントされません。使用されたバイト数と言語またはプログラムの名前。

ネオ:何を言っているの?弾丸をかわすことができますか?

モーフィアス:いいえ、ネオ。私はあなたが準備ができているとき、あなたがする必要がないことをあなたに伝えようとしています。


ライブラリはどうですか?
ヴェレオ14年

必要な数のライブラリ(標準ライブラリ)を含めるか、インポートするか、必要とします!
レナエライダー14年

コードが250文字未満の場合、ポイントを追加しますか?(私は本当に短いソリューションを持っているが、それは機能のトンを持っていません)
ThinkChaos

あなたはそれを必要としません。あなたはまだ+32ポイントを持っているでしょう!多くの場合、制限を超えてポイントを落とし始め、短いコードがスコアボードのトップに上がります。(また、ルールとポイントを追加すると問題が複雑になります)
Renae Lider

さて、楽しみのためにゴルフバージョンを含めます!
ThinkChaos 14年

回答:


18

HTML、Javascript、CSS:1024バイト、47ポイント

マトリックス雨デモ

特徴:

  • Unicode文字を使用します(ただし、これはポイントを獲得するとは思わないでください)
  • トレイルは描画中に明るい緑色から暗い緑色にフェードします(*)
  • 描画が終了すると、トレイルも濃い緑から黒にフェードします(*)
  • 各証跡のランダムテキストサイズ(*)
  • トレイルは、描画されるたびにランダムに再配置およびサイズ変更されます

(*)これらのそれぞれについて+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
サミュエルクック14年

すごくかっこいい!あなたのユニコード文字を盗むかもしれません:) +1
ThinkChaos 14年

1
UglifyJSは、JavaScriptソースコードから17文字を削除できます。これはコードゴルフではないので、実際には重要ではありません(むしろ、最大1024文字のチャレンジ)。
コンラッドボロスキー14年

これは、Googleの結果の最初の2ページで見つけた、これまでで最高のバージョンです。私は本当にあなたが実際にあなたが追加されているノードの一部を削除するには、いくつかの部屋を持っていた希望:)本当にオープンのままに自分のコンピュータを殺す
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

新しい効果:

  • すべて(最初のエントリ);)
  • ドロップは画面上でランダムに停止します
  • クールな色の効果:最後の文字は白で、他の文字は緑です
  • ランダムな文字とエスケープシーケンスはコンソールに残ります... OK、それはバグですが、それは用語がカーソルの動きに追いつかないからです

ゴルフ@ 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+412 行目で変更できます。グリッドから出た後はドロップをクリアしないので、用語のサイズを80x40に変更するか、41をに変更し$LINES+1ます。フルバージョンと比較していないものがいくつかあります:

  • 期間の準備またはクリーンアップ
  • 派手なカラーリング(52バイトかかるため、価値はありません)
  • ランダムに停止します(ここでは、ドロップは常に最下部まで下がります)
  • 私は「ドロップ」のための最小の長さを指定しないことにより、174にそれをダウンさせることができます:$[RANDOM%10+5]なります$[RANDOM%15]

それらの制限があっても、私はそれがかなりクールだと思います!

編集:squeamish ossifrageのようなUnicode文字を使用してみましたが、それらは2倍の幅の文字であるため、グリッドを非常に急速に埋めてしまい、奇妙に見えます。

また、ASCIIの代わりにUnicodeコードポイントを使用してゴルフバージョンを減らしたため、文字を取得する前に8進数に移動してステップを節約する必要はありません。メインバージョンでも同じことを行いましたが、コメントを追加して1024バイトに維持しました。

そして、intの比較をから[ $r -gt $2 ]に変更しました(($r>$2))。その空白が私を殺していましたが、文字列ではなくintを比較する別の方法が見つかりませんでした。これにより、ゴルフバージョンが176バイトになりました!


ゴルフされたものもちょっとしたフォーク爆弾です;)
ロブスターリング14年

1
@RobStarling彼らは両方とも実際です!
ThinkChaos 14年

1
本当にこれが大好き!私はそれに少し手を加えてきたし、あなたが変更することで、それは緑作ることができると思われる\033[\033[0;32m\033[(少なくとも私の端末で)。これを端末のスクリーンセーバーとして設定しようとするのはどれほど悪い考えですか?:P
ドムヘイスティングス14年

うーん 最初のものは1059バイト、2番目のものは190バイトを取得しています。
レナエライダー14年

1
あなたたちは基本的にウィザードです!共有してくれてありがとう!
ドムヘイスティングス14年

8

JavaScript、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

QBasic 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

サンプルのスクリーンショット:

QBasicマトリックス1

32基点+色の5点。しかし、ホワイトスペースのトリミングや最適化がなくても1024バイトをかなり下回って浮かんでいるので、いくつかのポイントを盗むためにさらにいくつか追加します。

QBasic 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

サンプルのスクリーンショット(色効果が有効):

Qbasicマトリックス2

最初のものと同じ機能。さらに、次のものがあります。

  • カラー(+5)
  • 追加機能を有効にするパスワード。(これについては新機能として+5を要求しています。)
  • パスワードは、パレットのフェードと効果音を有効にします。(音声の場合は+15)。

パスワードによってアクティブにされる色効果や効果音など、動作中のビデオ:

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


5

GTB、42ポイント

TI-84計算機から実行、約100バイト:

"  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プログラムが中断され、乾燥した状態を保つための素敵な屋根が得られます(Enter2回押すと雨の中に戻ることができます)

TI-92で完全に動作します!驚くばかり。
レナエライダー14年

@ user3058846気に入ってくれてうれしいです:) GTBがTI-92で実行できることを知りませんでした。
ティムテック14年

実際にはTI-92 Plus。
レナエライダー14年

@ user3058846コンパイラーをダウンロードしましたか?良い仕事:)
ティムテック14年

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小文字のランダムな文字列–暗い色で表示
  • ランを表示している間、下の色は白、他の色は緑です
  • 実行が完全に表示された後、文字ごとに削除されます

サンプル実行:

マトリックス雨


バイト数(文字ではない)
レナエライダー14年

1
単一バイト文字のみが使用されるため、374バイト。
マナトワーク14年

あなたのバージョンが本当に気に入りました!良い仕事を続けてください。
レナエライダー14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.