День на пляжі


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ɛtɪ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(як це робиться в 3-му тестовому випадку), робить істотно складніше.

Тестові справи


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.