день на пляже


14

Вдохновленный этим вызовом


Цель:

Цель состоит в том, чтобы нарисовать волны, падающие на пляж.

Входные данные:

В качестве входных данных вы получите 3 целых числа (в любом формате).
Первое целое число будет длиной рисунка. Второе целое число будет индексом песчаной полосы, где волны начинают нарастать (по крайней мере, 3 расстояния от пляжа)
. Третье целое число будет расстоянием между волнами (по крайней мере, 3, может быть больше длины рисунка, в этом случае вы рисуете только одну волну)

Выход:

Результатом будет коробка символов, которая показывает волны, падающие на пляж. Рисунок должен закончиться, когда первая волна закончилась падением на пляж.

Сначала волна показана как волна ( _-_).
Когда волна проходит песчаную полосу, она начинает нарастать ( /c_).
Наконец, волна падает на пляж ( /c.=> _-_=> ___=> __.).

Примеры:

Вход: 14 4 6

Выход:

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

Вход: 10, 2, 11

Выход:

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

Вход: 6 0 3

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

Правила:

Стандартные лазейки применяются

Это поэтому выигрывает самый короткий код


2
·не является ASCII, что может исключать некоторые языки. Можно ли заменить на .?
Луис Мендо

@LuisMendo Пляж считается периодом ASCII. Пример падения волны на пляж связан с тем, что период практически невидим.
fəˈn attɪk

1
Что приводит меня к противоположному вопросу: можем ли мы использовать ·вместо периода ASCII? (На самом деле это довольно большая победа в моем коде.)
Арно

Использование либо должно быть хорошо. Идея состоит в том, что вывод кода согласуется с примерами вывода.
fəˈnɛtɪk

Ответы:


5

JavaScript (ES6), 250 243 байта

Этот код принимает кодовую страницу # 1252 и использует ·символ (0xB7). Принимает ввод как 3 различных параметра (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(как в третьем тестовом примере), значительно усложняет ситуацию.

Контрольные примеры


2

Пакет, 273 243 байта

@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%

Примечание: Конечный пробел в строке 4. Если бы только два символа пляжа были разными, я мог бы сэкономить 3 байта и фактически превзойти JavaScript!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.