Converti LifeOnTheEdge in LifeOnTheSlope
Il tuo compito qui è prendere un modello LifeOnTheEdge e convertirlo in LifeOnTheSlope.
Un modello LifeOnTheEdge è composto da questi quattro caratteri: |_L . Un modello corrisponde a una certa disposizione dei bordi "on" in una griglia quadrata. Il motivo viene posizionato prima nella griglia con i caratteri nelle celle e ciascuna delle quattro lettere specifica lo stato dei bordi a sinistra e in fondo a quella cella. |significa che il bordo a sinistra è acceso, _significa che il bordo inferiore è acceso, Lsignifica che entrambi sono accesi e significa che nessuno dei due è acceso.
Ad esempio il seguente LifeOnTheEdge:
|_L
|
si traduce in:
. . . . .
| |
. ._._. .
|
. . . . .
Il tuo compito è comunque convertirlo in LifeOnTheSlope. LifeOnTheSlope è un equivalente di LifeOnTheEdge ma utilizza solo tre simboli: /\ . Dovresti ruotare il modello di 45 gradi in senso orario, ad esempio l'esempio sopra si traduce in:
/
/\/
\
Questo è code-golf , quindi vince la risposta più breve.
MODIFICA: puoi avere spazi/nuove righe iniziali e/o finali purché l'output stesso (da qualche parte sullo schermo) sia corretto.
Casi test
Input:
|_L
|
Output:
/
/\/
\
Input:
|
_L
L_|
L_|
L_|
L_|
|
|
Output:
/
/\/
/\ \
/\ \/
/\ \/
\ \/
/\/
/
Input:
__ __ __ __ __ __ __
| | | ||L_ |_ | || L_
L_ L_|_L|L_ L_|L_|L |
Output:
/\
/ \
\
\ /\
/ \
\ /
\/ \
/\
\/ /
\/ /\
/\ \
\ \
\
/\
/ \
\ \
\/ /\
/ \
\ /
\/ /
/
\ /\
/\ \
\
```
Risposte
JavaScript (ES6), 135 120 119 byte
Salvati 16 byte grazie a @Shaggy!
Prevede un array di stringhe o una matrice di caratteri. Restituisce una matrice di caratteri.
a=>[...a,...a[0]].map((_,y,b)=>b.map((_,x)=>'\\/ '[(c=(a[~(x-=y+a.length)>>1]||0)[x+y-~y>>1])=='_|'[x&=1]|c=='L'?x:2]))
Provalo online!
Carboncino , 27 byte
WS«P↘⭆ι§ /№|Lκ↓P↘⭆ι§ \№_Lκ←
Provalo online! Il collegamento è alla versione dettagliata del codice. Accetta l'input come un elenco terminato da una nuova riga. Spiegazione:
WS«
Per ogni riga nell'elenco...
P↘⭆ι§ /№|Lκ
Stampa diagonalmente /s per |s e Ls altrimenti stampa spazi.
↓
Passa alla riga successiva.
P↘⭆ι§ \№_Lκ
Stampa diagonalmente \s per _s e Ls altrimenti stampa spazi.
←
Passa alla colonna precedente.
C (gcc) , 195 186 byte
T,N,a,A,b,x,y,z;f(m,X,Y)char*m;{for(x=T=y=0;x<Y*3;x++,y++,T+=~Y)for(z=X-~Y,a=x,b=y;z--;T++,b--)A=a++/2-Y,N=m[A+b/2*X],putchar(z?(A|b)>=0&A<X&b<Y*2?T%2?N%19?32:92:(N-76)%48?32:47:32:10);}
Provalo online!
- Salvato 11 grazie a @ceilingcat
Esempio dimensione X=3, Y=2
00 10 20 (x,y) indici
01 11 21 di LOnH
mappato in basso
-2 0|-2 0|-1-1|-1-1| 0-2|
-2 0|-1 0|-1 0| 0-1| 0-1|
-1 1|-1 0| 0 0| 0 0| 1-1|
-1 1| 0 1| 0 0| 10| 10|
0 2| 0 1| 1 1| 10| 2 0|
0 2| 1 2| 1 1| 2 1| 2 0|
1 3| 1 2| 2 2| 2 1| 3 1|
1 3| 2 3| 2 2| 3 2| 3 1|
Iniziamo con x=-Y,y=0
Diminuiamo x / incrementiamo y ogni 2 sulla prima colonna e facciamo l'inverso su ogni riga.
Quindi mascheriamo prendendo solo indici validi.
| | | | |
| | | | |
| | 0 0| | |
| 0 1| 0 0| 10| |
| 0 1| 1 1| 10| 2 0|
| | 1 1| 2 1| 2 0|
| | | 2 1| |
| | | | |
Ora abbiamo raddoppiato (x,y) le coppie una per |, Le la seconda per _,L