Sehari di pantai

14

Terinspirasi oleh tantangan ini


Tujuan:

Tujuannya adalah untuk menggambar ombak menabrak pantai.

Memasukkan:

Anda akan diberikan 3 bilangan bulat (dalam format apa pun yang Anda inginkan) sebagai input.
Bilangan bulat pertama akan menjadi panjang gambar Bilangan bulat kedua akan menjadi indeks dari sandbar, di mana ombak mulai memuncak (setidaknya 3 spasi dari pantai)
Bilangan bulat ketiga akan menjadi jarak antar gelombang (setidaknya 3, dapat lebih besar dari panjang gambar, dalam hal ini Anda hanya menggambar satu gelombang)

Keluaran:

Outputnya akan berupa kotak karakter yang menunjukkan ombak menabrak pantai. Gambar harus berakhir ketika gelombang pertama selesai menabrak pantai.

Pada awalnya, gelombang ditampilkan sebagai gelombang besar ( _-_).
Saat gelombang melewati bilah pasir, ia mulai crest ( /c_).
Akhirnya, ombak menabrak pantai ( /c.=> _-_=> ___=> __.).

Contoh:

Input: 14 4 6

Keluaran:

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

Input: 10, 2, 11

Keluaran:

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

Input: 6 0 3

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

Aturan:

Berlaku celah standar

Ini sehingga kode terpendek menang

fəˈnɛtɪk
sumber
2
·bukan ASCII, yang mungkin mengecualikan beberapa bahasa. Bisakah itu diganti .?
Luis Mendo
@LuisMendo Pantai seharusnya menjadi periode ASCII. Contoh ombak menabrak pantai adalah karena periode praktis tidak terlihat sebaliknya.
fəˈnɛtɪk
1
Yang membawa saya ke pertanyaan sebaliknya: bisakah kita menggunakan ·sebagai ganti periode ASCII? (Ini sebenarnya kemenangan besar dalam kode saya.)
Arnauld
Menggunakan salah satu atau harus baik-baik saja. Idenya adalah bahwa output kode muncul konsisten dengan contoh output.
fəˈnɛtɪk

Jawaban:

5

JavaScript (ES6), 250 243 byte

Kode ini mengasumsikan kode halaman # 1252 dan menggunakan ·karakter (0xB7). Mengambil input sebagai 3 parameter berbeda (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)

Bagaimana itu bekerja

Kode ini dimulai dengan string seperti -______··dan menerapkan ekspresi reguler berturut-turut pada setiap iterasi untuk menghidupkan gelombang.

Misalnya -__diganti dengan _-_.

Pada awalnya, itu tampak seperti ide yang masuk akal. Namun, fakta bahwa string dapat dimulai dengan c(seperti yang terjadi pada test case ke-3) membuat hal-hal secara signifikan lebih rumit.

Uji kasus

Arnauld
sumber
2

Batch, 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%

Catatan: Trailing space on line 4. Jika hanya dua karakter pantai yang berbeda, saya bisa menghemat 3 byte dan benar-benar mengalahkan JavaScript!

Neil
sumber