Dzień na plaży

14

Zainspirowany tym wyzwaniem


Cel:

Celem jest narysowanie fal uderzających w plażę.

Wejście:

Jako dane wejściowe otrzymasz 3 liczby całkowite (w dowolnym formacie).
Pierwszą liczbą całkowitą będzie długość rysunku Drugą liczbą całkowitą będzie indeks piaskownicy, w której fale zaczną szczypać (co najmniej 3 przestrzenie od plaży)
Trzecią liczbą całkowitą będzie odstęp między falami (co najmniej 3, może być większa niż długość rysunku, w takim przypadku narysujesz tylko jedną falę)

Wynik:

Wyjściem będzie pudełko znaków, które pokazuje fale rozbijające się o plażę. Losowanie powinno zakończyć się, gdy pierwsza fala zakończy się uderzeniem w plażę.

Początkowo fala jest wyświetlana jako swell ( _-_).
Gdy fala mija piaskownicę, zaczyna się crest ( /c_).
Wreszcie fala uderza w plażę ( /c.=> _-_=> ___=> __.).

Przykłady:

Wejście: 14 4 6

Wynik:

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

Wejście: 10, 2, 11

Wynik:

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

Wejście: 6 0 3

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

Zasady:

Standardowe Luki zastosowanie

To jest więc wygrywa najkrótszy kod

Fəˈnɛtɪk
źródło
2
·nie jest ASCII, co może wykluczać niektóre języki. Czy można go zastąpić .?
Luis Mendo
@LuisMendo Plaża ma być okresem ASCII. Przykład fali uderzającej w plażę wynika z faktu, że okres ten jest praktycznie niewidoczny.
fəˈnɛtɪk
1
Co prowadzi mnie do przeciwnego pytania: czy możemy użyć ·zamiast okresu ASCII? (W rzeczywistości jest to dość duża wygrana w moim kodzie).
Arnauld
Używanie albo powinno być w porządku. Chodzi o to, że kod wyjściowy wydaje się spójny z przykładowymi danymi wyjściowymi.
fəˈnɛtɪk

Odpowiedzi:

5

JavaScript (ES6), 250 243 bajtów

Ten kod zakłada stronę kodową # 1252 i używa ·znaku (0xB7). Pobiera dane wejściowe jako 3 różne parametry (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)

Jak to działa

Ten kod zaczyna się od łańcucha, takiego jak -______··i stosuje kolejne wyrażenia regularne na każdej iteracji w celu animowania fal.

Na przykład -__jest zastąpiony przez _-_.

Z początku wyglądało to na rozsądny pomysł. Jednak fakt, że ciąg może zaczynać się od c(podobnie jak w 3. przypadku testowym), znacznie komplikuje sytuację.

Przypadki testowe

Arnauld
źródło
2

Partia, 273 243 bajtów

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

Uwaga: końcowe miejsce w linii 4. Gdyby tylko dwie postacie na plaży były różne, mógłbym zapisać 3 bajty i faktycznie pokonać JavaScript!

Neil
źródło