Converti LifeOnTheEdge in LifeOnTheSlope

Aug 24 2020

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

5 Arnauld Aug 24 2020 at 23:13

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!

4 Neil Aug 25 2020 at 04:58

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.

2 AZTECCO Aug 27 2020 at 20:51

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