Một ngày trên bãi biển


14

Lấy cảm hứng từ thử thách này


Mục tiêu:

Mục tiêu là vẽ những con sóng đâm vào một bãi biển.

Đầu vào:

Bạn sẽ được cung cấp 3 số nguyên (ở bất kỳ định dạng nào bạn muốn) làm đầu vào.
Số nguyên đầu tiên sẽ là chiều dài của bản vẽ Số nguyên thứ hai sẽ là chỉ số của thanh cát, trong đó các sóng bắt đầu mào (ít nhất 3 khoảng cách từ bãi biển)
Số nguyên thứ ba sẽ là khoảng cách giữa các sóng (ít nhất là 3, có thể lớn hơn chiều dài bản vẽ, trong trường hợp đó bạn chỉ vẽ một sóng)

Đầu ra:

Đầu ra sẽ là một hộp các ký tự cho thấy những con sóng đâm vào bãi biển. Bản vẽ sẽ kết thúc khi làn sóng đầu tiên đã hoàn thành đâm vào bãi biển.

Lúc đầu, sóng được hiển thị dưới dạng sưng ( _-_).
Khi sóng vượt qua dải cát, nó bắt đầu lên đỉnh ( /c_).
Cuối cùng, sóng đâm vào bãi biển ( /c.=> _-_=> ___=> __.).

Ví dụ:

Đầu vào: 14 4 6

Đầu ra:

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

Đầu vào: 10, 2, 11

Đầu ra:

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

Đầu vào: 6 0 3

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

Quy tắc:

Áp dụng sơ hở tiêu chuẩn

Đây là nên mã ngắn nhất sẽ thắng


2
·không phải là ASCII, có thể loại trừ một số ngôn ngữ. Nó có thể được thay thế bởi .?
Luis Mendo

@LuisMendo Bãi biển được cho là thời kỳ ASCII. Ví dụ về sóng đâm vào bãi biển là do thời gian thực tế là vô hình.
fnɛtɪk

1
Điều này dẫn tôi đến câu hỏi ngược lại: chúng ta có thể sử dụng ·thay vì thời kỳ ASCII không? (Đây thực sự là một chiến thắng khá lớn trong mã của tôi.)
Arnauld

Sử dụng một trong hai hoặc sẽ ổn. Ý tưởng là đầu ra mã xuất hiện phù hợp với đầu ra ví dụ.
fnɛtɪk

Câu trả lời:


5

JavaScript (ES6), 250 243 byte

Mã này giả sử trang mã # 1252 và đang sử dụng ·ký tự (0xB7). Lấy đầu vào là 3 tham số riêng biệt (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)

Làm thế nào nó hoạt động

Mã này bắt đầu bằng một chuỗi như -______··và áp dụng các biểu thức chính quy liên tiếp trên mỗi lần lặp để làm động các sóng.

Ví dụ -__được thay thế bằng _-_.

Lúc đầu, nó trông giống như một ý tưởng hợp lý. Tuy nhiên, thực tế là chuỗi có thể bắt đầu bằng một c(giống như trong trường hợp thử nghiệm thứ 3) làm cho mọi thứ phức tạp hơn đáng kể.

Các trường hợp thử nghiệm


2

Mẻ, 273 243 byte

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

Lưu ý: Trailing space trên dòng 4. Nếu chỉ có hai ký tự bãi biển khác nhau, tôi có thể lưu 3 byte và thực sự đánh bại JavaScript!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.