Créez la Matrix Digital Rain en utilisant le minimum de code [fermé]

21

Règles:

  • N'importe quelle langue que vous choisissez (bibliothèques standard).
  • Sortie affichée dans Terminal ou Windows Command Processor ou de toute autre manière que vous préférez.
    (tampon de largeur = 80)
  • Les caractères ASCII suffisent. (peut ajouter Unicode)
  • Ne devrait pas remplir tout l'écran au démarrage (devrait ressembler à une pluie, duh!).
  • Les couleurs obtiennent des points bonus (+5).
  • Effets : Des personnages aléatoires, différentes tailles de chute, se régénèrent périodiquement.

Points: (mise à jour)

  • +32 points pour commencer.
  • -1 point pour chaque octet (pas les caractères) dans le code après le ** 1024 *** ème * octet.
  • Les points pourraient atteindre zéro et négatifs.
  • Remarque: les langues utilisant des caractères multi-octets doivent compter les octets et non les caractères.
  • +5 pour chaque nouvel effet. (non publié par d'autres)
  • +15 pour l'un de ces effets:
    1. Vent (souffle des personnages sur le côté)
    2. Correspondance des nombres (entrée utilisateur, par exemple: 90210): le
      nombre est situé de manière aléatoire dans la matrice
      entrez la description de l'image ici
    3. Du son
    4. Msg crypté (entrée utilisateur): les
      caractères représentent un message crypté secret
    5. Mode Galaga:
      tire ^ pour détruire les personnages
      entrez la description de l'image ici

Tableau d'affichage:

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

Remarque: Le tableau de bord sera / pourrait être mis à jour par quiconque après avoir publié une réponse valide. Ne dépassez pas les dix premières positions. Ajoutez plus d'effets à votre code et battez votre propre score!
Effacer l'écran initial, le nettoyage, les bogues, les bibliothèques tierces, etc. ne compterait pas pour les points N'oubliez pas d'inclure des détails sur non. d'octets utilisés et le nom de la langue ou du programme.

Neo: Qu'est-ce que tu essaies de me dire? Que je peux esquiver les balles?

Morpheus: Non, Neo. J'essaye de te dire que quand tu seras prêt, tu n'auras pas à le faire.

Renae Lider
la source
Et les bibliothèques?
Vereos
Inclure ou importer ou exiger autant de bibliothèques que vous le souhaitez (bibliothèques standard)!
Renae Lider
Souhaitez-vous ajouter des points si le code est inférieur à 250 caractères? (J'ai une solution vraiment courte mais elle n'a pas une tonne de fonctionnalités)
ThinkChaos
Vous n'en aurez pas besoin; vous auriez encore +32 points! Il y a de fortes chances que beaucoup dépassent la limite et commencent à baisser des points, faisant monter les codes courts au sommet du tableau de bord. (aussi, ajouter plus de règles et de points compliquerait les choses)
Renae Lider
D'accord, je vais inclure une version golfée juste pour le plaisir!
ThinkChaos

Réponses:

18

HTML, Javascript et CSS: 1024 octets, 47 points

Démo pluie Matrix

Fonctionnalités:

  • Utilise des caractères Unicode (ne pense pas que cela marque des points cependant)
  • Les traînées passent du brillant au vert foncé pendant qu'elles sont dessinées (*)
  • Les traînées passent également du vert foncé au noir une fois le dessin terminé (*)
  • Taille de texte aléatoire dans chaque piste (*)
  • Les pistes sont repositionnées et redimensionnées au hasard à chaque fois qu'elles sont dessinées

(*) Je réclamerai +5 points pour chacun d'entre eux, mais faites-moi savoir si vous n'êtes pas d'accord :-)

Démo:

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

Code source:

Exactement 1024 octets. C'est un peu moche, j'ai peur.

<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()>
ossifrage délicat
la source
2
Cela ressemble bien à une capture d'écran, mais ça mange la merde de mes ressources. +1 de moi
Samuel Cook
Vraiment cool! Je pourrais voler vos personnages Unicode :) +1
ThinkChaos
1
UglifyJS peut supprimer 17 caractères du code source JavaScript. Ce n'est pas vraiment important, car ce n'est pas du golf de code (plutôt, un défi de 1024 caractères maximum).
Konrad Borowski
C'est de loin la meilleure version que j'ai trouvée sur les deux premières pages des résultats de Google. Je souhaite vraiment que vous ayez eu de la place pour supprimer certains des nœuds que vous ajoutez :) tue vraiment mon ordinateur pour le laisser ouvert
RustyToms
10

Frapper

1024 octets (y compris les commentaires)

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

Nouveaux effets:

  • tout (première entrée);)
  • les gouttes s'arrêteront au hasard sur l'écran
  • effets de couleurs froides: le dernier caractère est blanc tandis que les autres sont verts
  • les caractères aléatoires et les séquences d'échappement restent sur la console ... D'accord, c'est un bug mais c'est parce que le terme ne peut pas suivre le mouvement du curseur

@ 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

Cela fonctionne dans une grille 80x40. Vous pouvez changer cela RANDOM%80sur la dernière ligne et r<$2+41sur la 2ème. Je ne supprime pas les gouttes après leur sortie de la grille, alors redimensionnez votre terme à 80x40 ou remplacez 41 par $LINES+1. Il y a quelques choses qu'il n'a pas par rapport à la version complète:

  • préparation du terme ou nettoyage
  • coloration fantaisie (prend 52 octets, donc ça ne vaut pas le coup)
  • s'arrêter au hasard (ici les gouttes descendent toujours vers le bas)
  • Je pourrais le ramener à 174 en ne spécifiant pas une longueur minimale pour les "gouttes": $[RANDOM%10+5]deviendrait$[RANDOM%15]

Même avec ces limitations, je pense que c'est plutôt cool!

Edit: J'ai essayé d'utiliser des caractères unicode comme l'ossifrage squeamish, mais parce qu'ils sont des caractères double largeur, ils remplissent la grille assez rapidement et cela finit par paraître étrange.

J'ai également réduit la version golfée en utilisant des points de code unicode au lieu d'ASCII, donc je n'ai pas à passer à l'octal avant d'obtenir un personnage, en enregistrant une étape. J'ai fait la même chose dans la version principale, mais j'ai ajouté des commentaires pour le garder à 1024 octets.

Et puis changé la comparaison int de [ $r -gt $2 ]à (($r>$2)), cet espace blanc me tuer mais je ne pouvais pas trouver une autre méthode qui ints par rapport et non des chaînes. Cela a réduit la version golfée à 176 btyes!

ThinkChaos
la source
celui qui a joué au golf est aussi un peu une bombe à fourche;)
Rob Starling
1
@RobStarling, ils sont tous les deux en fait!
ThinkChaos
1
J'adore vraiment ça! Je l'ai un peu bricolé et il semble que vous puissiez le rendre vert en passant \033[à \033[0;32m\033[(au moins dans mon terminal). À quel point est-ce une mauvaise idée d'essayer de le configurer comme économiseur d'écran de terminal? : P
Dom Hastings
Hmm. J'obtiens 1059 octets pour le premier et 190 octets pour le second.
Renae Lider
1
Vous êtes essentiellement des sorciers! Merci d'avoir partagé!
Dom Hastings
8

JavaScript, 830 octets

Il a toutes les fonctionnalités classiques comme:

  1. fond noir
  2. texte vert
  3. texte blanc en tombant
  4. caractères aléatoires
  5. trous vides
  6. boucle infinie

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

Je l'aime parce qu'il est incroyablement léger, fluide en mouvement et simple. prendre plaisir!

Samuel Cook
la source
6

QBasic 1, 587 octets, 32 + 5 = 37 points

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

Exemple de capture d'écran:

Matrice QBasic 1

32 points de base + 5 points pour la couleur. Mais comme je flotte heureusement bien en dessous de 1024 octets, même sans ajustement ou optimisation des espaces blancs, ajoutons quelques éléments supplémentaires pour voler certains points:

QBasic 2, 913 octets, 32 + 5 + 15 + 5 = 57 points

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

Exemple de capture d'écran (effet de couleur activé):

Matrice Qbasic 2

Mêmes caractéristiques que la première. De plus, il a:

  • Couleur (+5)
  • Un mot de passe pour activer des fonctionnalités supplémentaires. (Je réclame +5 pour cela en tant que nouvelle fonctionnalité.)
  • Le mot de passe active un fondu de palette et des effets sonores. (+15 pour le son.)

Vidéo le montrant en action, y compris l'effet de couleur et l'effet sonore activés par le mot de passe:

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

nitro2k01
la source
5

GTB , 42 points

Exécuté à partir d'une calculatrice TI-84, environ 100 octets:

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

Effets

Étant donné que la calculatrice est en noir + blanc pour commencer, ne peut pas faire grand-chose là-bas ...

  • Parapluie - Appuyez sur la touche haut pour éliminer la pluie et vous garder au sec jusqu'à ce que vous appuyiezEnter
  • Run Inside - Pressing ONinterrompt le programme et vous offre un joli toit pour vous garder au sec (vous pouvez retourner sous la pluie en appuyant Enterdeux fois sur
Timtech
la source
fonctionne parfaitement sur ma TI-92! Impressionnant.
Renae Lider
@ user3058846 Je suis content que vous l'aimiez :) Je ne savais pas que GTB pourrait s'exécuter sur les TI-92.
Timtech
TI-92 Plus en fait.
Renae Lider
@ user3058846 Vous avez donc téléchargé le compilateur hein? Beau travail :)
Timtech
4

Ruby: 374 caractères

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

(Remarque: ^[sont des caractères simples.)

La description:

  • 25 exécutions simultanées (maintenues basses pour que les textes prédéfinis restent lisibles)
  • chaque course a 50% / 50% de chances d'être soit
    • un mot prédéfini - affiché dans des couleurs vives
    • une chaîne aléatoire de 5..15 lettres minuscules - affichée en couleurs sombres
  • lors de l'affichage de la course, la couleur du bas est blanche, les autres vertes
  • une fois la course entièrement affichée, elle est supprimée caractère par caractère

Exemple d'exécution:

pluie de matrice

homme au travail
la source
Combien d'octets (pas de caractères)?
Renae Lider
1
Seuls les caractères à un octet sont utilisés, donc 374 octets.
manatwork
Vraiment aimé votre version! Continuez votre bon travail.
Renae Lider