Un día en la playa

14

Inspirado por este desafío


Objetivo:

El objetivo es dibujar olas rompiendo en una playa.

Entrada:

Se le darán 3 enteros (en el formato que desee) como entrada.
El primer número entero será la longitud del dibujo. El segundo número entero será el índice del banco de arena, donde las olas comienzan a formar crestas (al menos a 3 espacios de la playa).
El tercer número entero será el espacio entre las olas (al menos 3, puede ser mayor que la longitud del dibujo, en cuyo caso solo dibuja una onda)

Salida:

La salida será una caja de caracteres que muestra las olas rompiendo en la playa. El dibujo debe terminar cuando la primera ola haya terminado de estrellarse en la playa.

Al principio, la onda se muestra como un oleaje ( _-_).
A medida que la ola pasa por el banco de arena, comienza a subir ( /c_).
Finalmente, la ola choca contra la playa ( /c.=> _-_=> ___=> __.).

Ejemplos:

Entrada: 14 4 6

Salida:

-___________..  
_-__________..  
__-_________..  
___-________..  
___/c_______..  
____/c______..  
-____/c_____..  
_-____/c____..  
__-____/c___..  
___-____/c__..  
___/c____/c_..  
____/c____/c..  
-____/c____-_.  
_-____/c_____.  
__-____/c___..

Entrada: 10, 2, 11

Salida:

-_______..
_-______..
_/c_____..
__/c____..
___/c___..
____/c__..
_____/c_..
______/c..
_______-_.
_________.
________.. 

Entrada: 6 0 3

c___..
/c__..
_/c_..
c_/c..
/c_-_.
_/c__.
c_/c..

Reglas:

Se aplican lagunas estándar

Este es el por lo que el código más corto gana

fəˈnɛtɪk
fuente
2
·no es ASCII, que puede excluir algunos idiomas. ¿Puede ser reemplazado por .?
Luis Mendo
@LuisMendo Se supone que la playa es el período ASCII. El ejemplo de la ola que se estrella en la playa se debe a que el período es prácticamente invisible de lo contrario.
fəˈnɛtɪk
1
Lo que me lleva a la pregunta opuesta: ¿podemos usar en ·lugar del período ASCII? (En realidad es una gran victoria en mi código).
Arnauld
Usar cualquiera o debería estar bien. La idea es que la salida del código parece coherente con las salidas del ejemplo.
fəˈnɛtɪk

Respuestas:

5

JavaScript (ES6), 250 243 bytes

Este código está asumiendo la página de códigos # 1252 y está usando el ·carácter (0xB7). Toma la entrada como 3 parámetros distintos (a,b,c).

(a,b,c,R=n=>'_'.repeat(n-2),s=(x=b?'-':'c')+R(a-1)+'··')=>(g=j=>s+`
`+((F=`__·$,_-_·,/c··,-__,^${C=R(b>2?b:2)}__-,/c_,^c_,^_${S=R(c)},_··,___·,_-_·,_-_,${C}/c_,_/c,/c,${x+S}`.split`,`).map((r,i)=>s=i&8?s:s.replace(RegExp(r,'g'),F[i+8])),j--?g(j):''))(a)

Cómo funciona

Este código comienza con una cadena como -______··y aplica sucesivas expresiones regulares en cada iteración para animar las ondas.

Por ejemplo -__se reemplaza con _-_.

Al principio, parecía una idea razonable. Sin embargo, el hecho de que la cadena pueda comenzar con un c(como lo hace en el tercer caso de prueba) hace que las cosas sean mucho más complicadas.

Casos de prueba

Arnauld
fuente
2

Lote, 273 243 bytes

@echo off
set f=for /l %%i in (0,1,%1)do call
set s=set b=
%s%.. 
%f% %s%_%%b%%
%f%:c %%i %2 %3
exit/b
:c
set/aw=%1%%%3
if %w%==0 %s%__-%b:~3%
if %w%==%2 %s%%b:_-=/c%
%s%_%b:~0,-4%%b:~-3%
%s%%b:__. =_.. %
%s%%b:/.=-_%
echo %b:~3%

Nota: Espacio final en la línea 4. Si solo los dos caracteres de la playa fueran diferentes, ¡podría guardar 3 bytes y superar a JavaScript!

Neil
fuente