Um dia na praia

14

Inspirado por este desafio


Objetivo:

O objetivo é desenhar ondas batendo na praia.

Entrada:

Você receberá 3 números inteiros (no formato que desejar) como entrada.
O primeiro número inteiro será o comprimento do desenho. O segundo número inteiro será o índice do banco de areia, onde as ondas começam a subir (pelo menos 3 espaços da praia).
O terceiro número inteiro será o espaçamento entre as ondas (pelo menos 3, pode ser maior que o comprimento do desenho; nesse caso, você desenha apenas uma onda)

Resultado:

A saída será uma caixa de caracteres que mostra as ondas batendo na praia. O desenho deve terminar quando a primeira onda terminar de bater na praia.

A princípio, a onda é mostrada como um swell ( _-_).
À medida que a onda passa pelo banco de areia, ela começa a crista ( /c_).
Finalmente, a onda bate na praia ( /c.=> _-_=> ___=> __.).

Exemplos:

Entrada: 14 4 6

Resultado:

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

Entrada: 10, 2, 11

Resultado:

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

Entrada: 6 0 3

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

Regras:

Aplicam-se brechas padrão

Isso é então o código mais curto ganha

fəˈnɛtɪk
fonte
2
·não é ASCII, o que pode excluir alguns idiomas. Pode ser substituído por .?
Luis Mendo
@LuisMendo A praia deve ser o período ASCII. O exemplo de ondas quebrando na praia se deve ao fato de o período ser praticamente invisível.
f Febnɛtɪk
1
O que me leva à pergunta oposta: podemos usar em ·vez do período ASCII? (É realmente um bastante grande vitória no meu código.)
Arnauld
Usar um ou deve ficar bem. A ideia é que a saída do código pareça consistente com as saídas de exemplo.
14171

Respostas:

5

JavaScript (ES6), 250 243 bytes

Este código está assumindo a página de código # 1252 e está usando o ·caractere (0xB7). Aceita 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)

Como funciona

Esse código começa com uma sequência como -______··e aplica sucessivas expressões regulares em cada iteração para animar as ondas.

Por exemplo, -__é substituído por _-_.

A princípio, parecia uma ideia razoável. No entanto, o fato de a sequência poder começar com a c(como acontece no terceiro caso de teste) torna as coisas significativamente mais complicadas.

Casos de teste

Arnauld
fonte
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: Trailing space na linha 4. Se apenas os dois caracteres da praia fossem diferentes, eu poderia salvar 3 bytes e vencer o JavaScript!

Neil
fonte