Ein Tag am Strand

14

Inspiriert von dieser Herausforderung


Tor:

Das Ziel ist es, Wellen auf einen Strand zu ziehen.

Eingang:

Sie erhalten 3 Ganzzahlen (in dem von Ihnen gewünschten Format) als Eingabe.
Die erste Ganzzahl gibt die Länge der Zeichnung an. Die zweite Ganzzahl gibt den Index der Sandbank an, auf der die Wellen beginnen (mindestens 3 Felder vom Strand entfernt).
Die dritte Ganzzahl gibt den Abstand zwischen den Wellen an (mindestens 3 Felder) größer als die Länge der Zeichnung sein, in diesem Fall zeichnen Sie nur eine Welle)

Ausgabe:

Die Ausgabe ist eine Zeichenbox, die die Wellen zeigt, die gegen den Strand schlagen. Die Zeichnung sollte enden, wenn die erste Welle den Strand erreicht hat.

Die Welle wird zunächst als Swell angezeigt ( _-_).
Wenn die Welle die Sandbank passiert, beginnt sie zu scheiteln ( /c_).
Schließlich kracht die Welle gegen den Strand ( /c.=> _-_=> ___=> __.).

Beispiele:

Eingabe: 14 4 6

Ausgabe:

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

Eingabe: 10, 2, 11

Ausgabe:

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

Eingabe: 6 0 3

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

Regeln:

Es gelten Standardlücken

Das ist also gewinnt der kürzeste Code

fəˈnəˈtɛk
quelle
2
·ist nicht ASCII, was einige Sprachen ausschließen kann. Kann es durch ersetzt werden .?
Luis Mendo
@ LuisMendo Der Strand soll die ASCII-Periode sein. Das Beispiel einer Welle, die gegen den Strand stößt, ist darauf zurückzuführen, dass die Periode ansonsten praktisch unsichtbar ist.
14.
1
Was mich zu der entgegengesetzten Frage führt: Können wir ·anstelle der ASCII-Periode verwenden? (Es ist eigentlich ein ziemlich großer Gewinn in meinem Code.)
Arnauld
Verwenden Sie entweder oder sollte in Ordnung sein. Die Idee ist, dass die Code-Ausgabe mit den Beispielausgaben übereinstimmt.
14.

Antworten:

5

JavaScript (ES6), 250 bis 243 Byte

Dieser Code nimmt Codepage # 1252 an und verwendet das ·Zeichen (0xB7). Übernimmt die Eingabe als 3 verschiedene Parameter (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)

Wie es funktioniert

Dieser Code beginnt mit einer Zeichenfolge wie -______··und wendet bei jeder Iteration aufeinanderfolgende reguläre Ausdrücke an, um die Wellen zu animieren.

Zum Beispiel -__wird ersetzt durch _-_.

Zuerst sah es nach einer vernünftigen Idee aus. Die Tatsache, dass die Zeichenfolge mit einem beginnen kann c(wie im dritten Testfall), macht die Dinge jedoch erheblich komplizierter.

Testfälle

Arnauld
quelle
2

Batch, 273 243 Bytes

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

Hinweis: Leerzeichen in Zeile 4 am Ende der Zeile. Wenn nur die beiden Strandzeichen unterschiedlich wären, könnte ich 3 Bytes speichern und JavaScript tatsächlich übertreffen!

Neil
quelle