CJam, 32 30 29 28 byte
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Provalo qui.
Stavo cercando di aiutare Reto a giocare a golf con la sua risposta di CJam, ma alla fine ho trovato una soluzione che non aveva nulla a che fare con la sua, quindi ho pensato di poterlo pubblicare anche io.
Spiegazione
Questo utilizza la simmetria dell'output. In particolare, il fatto che l'output sia uguale al suo recepimento.
Innanzitutto, generiamo le prime N+1linee, ma senza il bordo sinistro:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Ora abbiamo una serie di stringhe che rappresentano la seguente griglia:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
Il recepimento di questo assomiglia a questo:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Insieme, hanno tutti i caratteri non spaziali di cui abbiamo bisogno. Ora possiamo usare la punta di Dennis per combinare due griglie ASCII in una, prendendo il massimo di ciascuna coppia di caratteri corrispondente. In tutte le posizioni in cui le due griglie differiscono, una avrà uno spazio (o niente) e l'altra avrà il personaggio che stiamo cercando. Quando un elenco in un'operazione vettoriale è più lungo dell'altro, gli elementi aggiuntivi dell'elenco più lungo verranno semplicemente conservati, che è proprio quello che stiamo cercando. Negli altri casi, il carattere non spaziale sarà sempre il massimo dei due caratteri:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;s.