CJam, 32 30 29 28 octets
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Testez-le ici.
J'essayais d'aider Reto à jouer sa réponse CJam, mais je me suis retrouvé avec une solution qui n'avait rien à voir avec la sienne, alors j'ai pensé que je pourrais aussi bien la poster moi-même.
Explication
Cela utilise la symétrie de la sortie. En particulier, le fait que la sortie soit la même que sa transposition.
Tout d'abord, nous générons les premières N+1
lignes, mais sans le bord gauche:
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.
Nous avons maintenant un tableau de chaînes représentant la grille suivante:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
La transposition de cela ressemble à ceci:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Ensemble, ils ont tous les caractères non spatiaux dont nous avons besoin. Nous pouvons maintenant utiliser la pointe rad de Dennis pour combiner deux grilles ASCII en une, en prenant le maximum de chaque paire de caractères correspondante. Dans toutes les positions où les deux grilles diffèrent, l'une aura un espace (ou rien du tout) et l'autre aura le personnage que nous recherchons. Lorsqu'une liste dans une opération vectorisée est plus longue que l'autre, les éléments supplémentaires de la liste plus longue seront simplement conservés, ce qui est exactement ce que nous recherchons. Dans les autres cas, le caractère non-espace sera toujours le maximum des deux caractères:
_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.