Mes beaux-parents ont un étang à poissons dans leur cour, rempli de koi. Cela ne m'a pas vraiment traversé l'esprit jusqu'à ce que je remarque l'extrait suivant de mon code.
',') & '_'
... J'avais des visages de poisson me regardant depuis mon écran ...
Ce qui m'a donné une bonne idée ...
Ma quête pour vous, mes chers golfeurs, est de créer un aquarium ASCII en ligne, avec les règles suivantes:
- La taille de l'aquarium d'un côté du réservoir à l'autre côté du réservoir ne doit pas être inférieure à 60 caractères et pas plus de 80 caractères. Les côtés du réservoir doivent être indiqués en utilisant le caractère pipe / bar (
|
). - Les poissons doivent pouvoir «nager» de gauche à droite entre les côtés du réservoir. Comme ils vont tourner, une vue de face est nécessaire pour la transition d'une direction à l'autre.
Le poisson doit ressembler à ceci:
}}< }} ',')
Poissons nageant à droite(',' {{ >{{
Poissons nageant à gauche}}('_'){{
Poissons face à l'avant
Lorsqu'un poisson se tourne pour changer de direction (30% de chances), il doit partir d'une direction, faire face à l'avant, puis faire face à l'autre direction ... Assurez-vous qu'il y a suffisamment d'espace pour que le poisson puisse tourner, c'est-à-dire qu'il nécessite six espaces avant la bord du réservoir minimum ...
- À moins qu'un poisson ne souffle une bulle ou ne change de direction, il continuera dans la direction à laquelle il fait face, s'il se trouve à moins de six cases du côté du réservoir, il changera de direction.
- Le poisson (face à gauche ou à droite) peut parfois (10% de chances) s'arrêter pour faire des bulles successivement (
.oO*
), de sorte que le poisson doit avoir un espace disponible à côté d'eux pour que la bulle existe, donc un poisson peut nagez seulement aussi près des côtés, économisez un espace. La bulle doit disparaître avant que le poisson ne puisse avancer ...
Une série d'exemples de lignes du comportement du poisson, avec des -
caractères indiquant les espaces, car la fonction d'affichage du code ici est un peu stricte ... Je m'attendrai à ce que ces tirets soient remplacés par des espaces lorsque vous coderez ceci ...
Chaque ligne ici pourrait être considérée comme une trame en time-lapse.
|-}}< }} ',')----------|
|--}}< }} ',')---------|
|---}}< }} ',')--------|
|----}}< }} ',')-------|
|-----}}< }} ',')------|
|-----}}< }} ',').-----|
|-----}}< }} ',')o-----|
|-----}}< }} ',')O-----|
|-----}}< }} ',')*-----|
|---------}}('_'){{----|
|-----------(',' {{ >{{|
|----------(',' {{ >{{-|
|---------(',' {{ >{{--|
|--------.(',' {{ >{{--|
|--------o(',' {{ >{{--|
|--------O(',' {{ >{{--|
|--------*(',' {{ >{{--|
|--------(',' {{ >{{---|
|-------(',' {{ >{{----|
|------(',' {{ >{{-----|
etc. L'exemple ci-dessus est, comme je l'ai dit, petit, mais vous avez l'idée générale ...
Le code le plus court gagne ...
Je m'attends à ce que la sortie sur la même ligne (si possible), sinon, afficher image par image successivement est très bien ... Que vous alliez une ligne ou plusieurs lignes, c'est à vous. Si vous effectuez plusieurs lignes, elles doivent être séparées par une nouvelle ligne.
Un temporisateur est également imposé entre les images, 2000 ms. C'est obligatoire .
Voyons voir ce que tu as!
la source
Réponses:
Python 3 (278)
Auparavant: 334, 332, 325, 302, 300, 299, 291, 286, 284, 281
Jouer au golf en Python est toujours difficile en raison des exigences d'indentation des déclarations, mais malgré cela, cela s'est incroyablement bien passé!
Un grand merci à Volatility et DSM pour m'avoir aidé à jouer au golf encore plus loin.
Version propre
la source
Rubis,
291289Le poisson fait onze caractères de long, ce qui fait que l'aquarium 6 * 9 + 11 + 2 = 67 caractères de large, ce qui correspond parfaitement à la tolérance requise.
La
f
fonction lambda fait le gros du travail: elle accepte une substitution comme paire d'arguments, puis tente d'appliquer la substitution sur l'aquarium. S'il réussit, il peint une image de l'animation. Il signale ensuite la valeur de réussite comme2
(le délai pris) ounil
(délai non exécuté).Les poissons ne souffleront pas de bulles deux fois de suite. (Correction:
...while rand>0.1
- 4 caractères)Les poissons peuvent faire des bulles avant même un virage forcé. (Correction: réorganiser la structure de ramification)
Il y a un cadre où la bulle a complètement disparu (y compris le
*
) mais le poisson ne s'est pas déplacé dans le vide résultant. Cela suit la lettre, mais pas l'exemple. (Correctif: remplacerf[?*,w]
parq[?*]=w
- gratuit)N'efface pas la console. Correction: ajoutez
`clear`
(Unix) ousystem 'cls'
(console Windows) avantputs q
de corriger ( Réf. ) Ou utilisez à laprint
place deputs
et ajoutez\r
à l'aquarium ( suggéré par @manatwork ).Version lisible:
la source
\r
au début de q:q="\r|#{r+s*9}|"
. Utilisez ensuite$><<q
au lieu deputs q
. Est 1 caractère plus long, mais semble mieux sans utiliser de commandes externes.\r
efface l'écran? Ce n'est pas le cas dans mon cas. Ou pourquoi tu n'aimes pasputs
?\r
c'est le retour chariot. En utilisant$><<q
pour la sortie, le curseur restera sur la même ligne (puts
force a\n
après la sortie), donc le démarrage de la sortie suivante avec\r
retournera au début de la ligne actuelle et commencera à sortir de là. Remplace ainsi «l'image» précédente de la ligne d'aquarium.\r
.R, 451 caractères
Une première tentative:
Dentelé:
Il imprime l'aquarium en stdout sur une seule ligne (puis pause de 2 s et retour en chariot avant l'impression de l'aquarium à t + 1).
la source
Perl, 281
ou plus clairement
Le poisson tourne correctement. Des bulles soufflent.
285 - si vous aimez la véritable sensation d'aquarium et non la version à défilement:
la source
$d=0
dans le cas "tournage requis".sleep2
(sans espace) ne fonctionne pas pour moi; également lorsque vous tournez, vous ne gardez pas la face du poisson alignée. Et les bulles semblent ne jamais apparaître.C,
400394373 caractèresAvec espace:
la source
i==l?(c=r):(c=l)
être raccourcic=i==l?r:l
?#define p printf(