Description du défi
Vous devez montrer une simulation de pluie dans le terminal.
Dans l'exemple ci-dessous, l'ajout de 100 gouttes de pluie au hasard (utilisez la fonction aléatoire par défaut que votre langue propose) coordonne, attend 0,2 seconde puis redessine jusqu'à ce que le temps imparti expire. N'importe quel caractère peut être utilisé pour représenter la goutte de pluie.
Paramètres
- Temps d'attente entre redessiner en secondes.
- Temps pendant lequel la pluie sera visible. Il s'agit simplement d'un entier représentant le nombre d'itérations. [Donc, le temps net pendant lequel la pluie sera visible est cet entier multiplié par le temps d'attente]
- Message à afficher à la fin de la pluie. (Cela doit être centré)
- Nombre de gouttes de pluie à afficher à l'écran.
Règles
- Un seul octet doit être utilisé pour représenter une goutte de pluie, et cela peut être n'importe quoi, même des chats et des chiens.
- Il ne doit pas être sensible à la taille du terminal, ce qui signifie que vous n'avez pas à gérer le bogue pour des tailles de terminal variées. Vous pouvez définir vous-même la largeur et la hauteur du terminal.
- Les règles standards du golf s'appliquent.
Échantillon de code et sortie
Il s'agit d'une version non golfée écrite en python 2.7 utilisant ncurses.
import curses
import random
import time
myscreen = curses.initscr()
curses.curs_set(0) # no cursor please
HEIGHT, WIDTH = myscreen.getmaxyx()
RAIN = '/' # this is what my rain drop looks like
TIME = 10
def make_it_rain(window, tot_time, msg, wait_time, num_drops):
"""
window :: curses window
time :: Total time for which it rains
msg :: Message displayed when it stops raining
wait_time :: Time between redrawing scene
num_drops :: Number of rain drops in the scene
"""
for _ in range(tot_time):
for i in range(num_drops):
x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)
window.addstr(x,y,RAIN)
window.refresh()
time.sleep(wait_time)
window.erase()
window.refresh()
window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)
if __name__ == '__main__':
make_it_rain(myscreen, TIME, 'IT HAS STOPPED RAINING!', 0.2, 100)
myscreen.getch()
curses.endwin()
Sortie -
Réponses:
MATL , 52 octets
Les entrées sont, dans cet ordre: pause entre les mises à jour, nombre de suppressions, message, nombre de répétitions. Le moniteur a une taille de 80 × 25 caractères (codés en dur).
GIF ou ça n'est pas arrivé! (Exemple avec entrées
0.2
,100
,'THE END'
,30
)Ou essayez-le sur MATL Online .
Explication
la source
why
:)JavaScript (ES6),
268261 octetsAu moins sur mon navigateur, la sortie est conçue pour s'intégrer dans la zone d'extrait de pile sans avoir à passer en «pleine page», donc si vous demandez plus de 702 gouttes de pluie, elle se bloquera.
Edit: enregistré 7 octets en utilisant un nœud de texte comme zone de sortie.
la source
setInterval
. Aussi, pourquoi utilisez-voustextContent
au lieu deinnerHTML
?R,
196 192185 185 octetsJuste une version simulée que j'ai écrite sur la base de la description. J'espère que c'est un peu ce que OP recherchait.
Enregistré quelques octets grâce à @plannapus.
Les arguments:
w
: Temps d'attente entre les imagest
: Nombre total d'imagesm
: Message personnalisén
: Nombre de gouttes de pluieExemple
Pourquoi semble-t-il qu'il pleut vers le haut?
Edit: je dois mentionner qu'il s'agit de ma console R-studio de 23x100 caractères personnalisée. Les dimensions sont codées en dur dans la fonction mais on pourrait en principe l'utiliser
getOption("width")
pour la rendre flexible à la taille de la console.Non golfé et expliqué
la source
rep()
automatiquement, l'times
argument se pose donc pas besoin non plus. Enregistré encore 7 octets!runif
plutôt qu'ensample
remplissant aléatoirement la matrice. Comme ça:f=function(w,t,m,n,x,y){for(i in 1:t){r=matrix(" ",x,y);r[runif(n)*x*y]="/";cat("\f",rbind(r,"\n"),sep="");Sys.sleep(w)};cat("\f",g<-rep("\n",y/2),rep(" ",(x-nchar(m))/2),m,g,sep="")}
C 160 octets
Version non golfée:
la source
R, 163 caractères
Avec des retraits et des nouvelles lignes:
Il est adapté à une taille de terminal de 24 lignes par 80 colonnes.
w
est le temps d'attente,t
le nombre d'images,n
le nombre de gouttes de pluie etm
le message final.Elle diffère de la réponse de @ billywob par l'utilisation différente de
sample
: si la taille de sortie est omise,sample
donne une permutation du vecteur d'entrée (ici un vecteur contenant le nombre nécessaire de gouttes de pluie et le nombre d'espaces correspondant, grâce au fait que l'argumenttimes
de fonctionrep
est vectorisé). Comme la taille du vecteur correspond exactement à la taille de l'écran, il n'est pas nécessaire d'ajouter de nouvelles lignes ou de le forcer à former une matrice.la source
NodeJS:
691158148 Octetsmodifier
Comme demandé, les fonctionnalités supplémentaires ont été supprimées et jouées au golf.
Les règles spécifient le non-respect de la taille, mais cette version inclut un problème pour les premières images. C'est 129 octets.
Réponse précédente
Peut-être pas le meilleur golf, mais je me suis un peu emporté. Il a la direction du vent et le facteur de pluie en option.
node rain.js 0 0.3
Voir le webm de cela fonctionne ici
la source
Noodel , non 44 octets
J'avais centré le texte sur ma liste de choses à faire depuis que j'ai fait le langage ... Mais, j'étais paresseux et je n'ai pas ajouté avant ce défi. Donc, ici, je ne suis pas en compétition, mais je me suis amusé avec le défi :)
La taille de la console est codée en dur à 25x50, ce qui ne semble pas bien dans l'éditeur en ligne, mais le fait pour l'extrait de code.
Essayez-le :)
Comment ça marche
la source
Ruby + GNU Core Utils, 169 octets
Les paramètres de la fonction sont le temps d'attente, le nombre d'itérations, le message et le nombre de gouttes de pluie, dans cet ordre. De nouvelles lignes pour la lisibilité.
Core Utils était nécessaire pour
tput
etclear
.la source
Python 2.7,
254251 octetsCeci est mon propre essai sans utiliser ncurses.
Merci à @ErikTheOutgolfer pour la correction et la sauvegarde de mes octets.
la source
for
boucle sur une seule ligne (comme vous l'avez fait dans40)];for i in u(
). Vous avez également besoin d'un caractère ESC dans'[2J'
je pense. De plus, il y avait un espace supplémentaire à l'intérieuru(n): r[y
. Je ne sais pas comment vous en avez compté 249. Tous les problèmes que j'ai trouvés ont été corrigés ici .<esc>
dénote un octet ESC littéral 0x1B. Le nombre d'octets est 242 , pas 246.SmileBASIC, 114 octets
La taille de la console est toujours de 50 * 30.
la source
Perl 5, 156 octets
154 octets code + 2 pour
-pl
.Utilise une taille fixe de 160x50.
Voyez-le en ligne!
Perl 5, 203 octets
201 octets code + 2 pour
-pl
.Utilise
tput
pour déterminer la taille du terminal.la source