Mis suegros tienen un estanque de peces en su patio, lleno de koi. Realmente no se me pasó por la cabeza hasta que noté el siguiente extracto de mi código.
',') & '_'
... Tenía caras de pez mirándome desde la pantalla ...
Lo que me ha dado una gran idea ...
Mi búsqueda para ustedes, mis queridos golfistas, es crear un acuario ASCII de una línea, con las siguientes reglas:
- El tamaño del acuario desde el lado del tanque hasta el otro lado del tanque no debe ser menor de 60 caracteres ni mayor de 80 caracteres. Los lados del tanque deben indicarse utilizando el carácter de tubería / barra (
|
). - Los peces deben poder "nadar" de izquierda a derecha entre los lados del tanque. A medida que giren, se requiere una vista frontal para la transición de una dirección a otra.
El pez debe tener el siguiente aspecto:
}}< }} ',')
Peces nadando a la derecha(',' {{ >{{
Peces nadando a la izquierda}}('_'){{
Pescado de frente
Cuando un pez gira para cambiar de dirección (30% de probabilidad), debe comenzar desde una dirección, mirar hacia el frente, luego mirar hacia la otra dirección ... Asegúrese de que haya suficiente espacio para que el pez gire, es decir, requiere seis espacios antes del borde del tanque mínimo ...
- A menos que un pez esté soplando una burbuja o cambie de dirección, continuará en la dirección que está mirando, si se encuentra dentro de los seis espacios del costado del tanque, cambiará de dirección.
- El pez (mirando hacia la izquierda o hacia la derecha) en ocasiones (10% de probabilidad) puede dejar de soplar burbujas en sucesión (
.oO*
), por lo que se requiere que el pez tenga un espacio disponible al lado para que la burbuja exista, para que un pez pueda solo nade tan cerca de los costados, ahorre un espacio. La burbuja debe desaparecer antes de que el pez pueda avanzar ...
Una serie de líneas de ejemplo del comportamiento del pez, con -
caracteres que indican los espacios, ya que la función de visualización del código aquí es un poco estricta ... Esperaré que estos guiones sean reemplazados por espacios cuando codifique esto ...
Cada línea aquí podría considerarse un marco en un lapso de tiempo.
|-}}< }} ',')----------|
|--}}< }} ',')---------|
|---}}< }} ',')--------|
|----}}< }} ',')-------|
|-----}}< }} ',')------|
|-----}}< }} ',').-----|
|-----}}< }} ',')o-----|
|-----}}< }} ',')O-----|
|-----}}< }} ',')*-----|
|---------}}('_'){{----|
|-----------(',' {{ >{{|
|----------(',' {{ >{{-|
|---------(',' {{ >{{--|
|--------.(',' {{ >{{--|
|--------o(',' {{ >{{--|
|--------O(',' {{ >{{--|
|--------*(',' {{ >{{--|
|--------(',' {{ >{{---|
|-------(',' {{ >{{----|
|------(',' {{ >{{-----|
El ejemplo anterior es, como dije, pequeño, pero se entiende la idea general ...
El código más corto gana ...
Espero que la salida en la misma línea (si es posible), si no, mostrar cuadro tras cuadro está bien ... Ya sea que vaya una línea o varias líneas depende de usted. Si está haciendo varias líneas, deben estar separadas por una nueva línea.
También se impone un temporizador entre cuadros, 2000ms. Esto es obligatoria .
¡A ver qué tienes!
fuente
Respuestas:
Pitón 3 (278)
Anteriormente: 334, 332, 325, 302, 300, 299, 291, 286, 284, 281
Jugar al golf en Python siempre es difícil debido a los requisitos de sangría de las declaraciones, pero a pesar de eso, ¡esto fue increíblemente bien!
Muchas gracias a Volatility y DSM por ayudarme a jugar golf mucho más.
Versión limpia
fuente
Rubí,
291289El pez tiene once caracteres de largo, lo que hace que el acuario sea 6 * 9 + 11 + 2 = 67 caracteres de ancho, lo que encaja perfectamente en la tolerancia requerida.
La
f
función lambda hace todo el trabajo pesado: acepta una sustitución como un par de argumentos, luego intenta aplicar la sustitución en el acuario. Si tiene éxito, pinta un cuadro de la animación. Luego informa el valor de éxito como2
(demora tomada) onil
(demora no ejecutada).Los peces no soplarán burbujas dos veces seguidas. (Solución:
...while rand>0.1
- 4 personajes)Los peces pueden hacer burbujas incluso antes de un giro forzado. (Solución: reorganice la estructura de ramificación)
Hay un marco donde la burbuja ha desaparecido por completo (incluido el
*
) pero el pez no se ha movido al vacío resultante. Esto sigue la letra, pero no el ejemplo. (Solución: reemplazarf[?*,w]
conq[?*]=w
- gratis)No borra la consola. Solución: agregue
`clear`
(Unix) osystem 'cls'
(consola de Windows) antesputs q
para arreglar ( Ref. ) O use enprint
lugar deputs
y anteponga\r
al acuario ( sugerido por @manatwork ).Versión legible:
fuente
\r
al principio de q:q="\r|#{r+s*9}|"
. Luego use en$><<q
lugar deputs q
. Tiene 1 carácter más, pero se ve mejor sin usar comandos externos.\r
limpia la pantalla? No lo hace en mi caso. O, ¿por qué no te gustaputs
?\r
es retorno de carro. Al usar$><<q
para la salida, el cursor permanecerá en la misma línea (puts
fuerza a\n
después de la salida), por lo que comenzar la siguiente salida\r
volverá al comienzo de la línea actual y comenzará a salir desde allí. Por lo tanto, sobrescribe la "imagen" anterior de la línea del acuario.\r
.R, 451 caracteres
Un primer intento:
Sangrado:
Imprime el acuario como stdout en una sola línea (luego 2 segundos de descanso y retorno del carro antes de que se imprima el acuario en t + 1).
fuente
Perl, 281
o más claramente
Pescado girando correctamente. Soplando burbujas.
285 - si te gusta la sensación real del acuario y no la versión de desplazamiento:
fuente
$d=0
en el caso de "giro obligatorio".sleep2
(sin espacio) no funciona para mí; también cuando estás girando, no mantienes la cara del pez alineada. Y las burbujas parecen no aparecer nunca.C,
400394373 caracteresCon espacios en blanco:
fuente
i==l?(c=r):(c=l)
puede acortar ac=i==l?r:l
?#define p printf(