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.Python 2, 80 octets
la source
Mathematica,
123122121 octetsPourrait probablement être joué au golf plus loin.
la source
Java - 141 octets
Pas le plus court bien sûr, mais agréable d'avoir une solution Java:
Non golfé
Contribution
Sortie
la source
Pyth, 30 octets
Essayez-le ici .
la source
JavaScript,
128125123114 octetsDe-golf (également converti en ES5) + démo:
la source
Rubis, 50 octets
En programme de test:
La boucle imprime 2 lignes pour chaque itération de i = 0 à i = n-1.
La deuxième ligne est toujours
'\'
suivie de ni incidences de'/ '
.La première ligne est la même que la deuxième ligne de l'itération précédente, mais avec le
'\'
manquant (nous stockons donc cette valeur danss
lorsque nous imprimons la deuxième ligne de l'itération précédente.)La seule exception est l'itération zéro, qui est gérée en initialisant
s
à'/\'*n
.la source
Javascript (ES6),
10710410098979190 octetsPremier post ici!
Utilisé pour utiliser mais utilise maintenant , similaire à Ruby .
Array(len)
.
join(str)
String.repeat(len)
operator*(str,len)
Non golfé:
Merci à:
107 => 104 octets: @insertusernamehere
97 => 90 octets: @ user81655
la source
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
méthode.Python 2, 66 octets
Assez simple. La valeur
n
est le nombre de/
sur la ligne etb
indique si la ligne commence par\
. La valeur deb
alterne entre 0 et 1 etn
diminue toutes les deux étapes. La vilaine condition de terminaison s'arrête quandn=1, b=0
. L'alternative d'uneexec
boucle aurait le problème d'avoir besoin de beaucoup d'évasions pour"'\\\\'"
.J'ai été surpris de trouver cette approche plus courte que d'utiliser un seul numéro
k=2*n+b
. C'est 68 octets:Une stratégie alternative éviterait une séparation
print
pour la ligne supérieure, mais je ne voyais pas de manière concise.la source
Minkolang 0.14 , 46 octets
Je suis sûr que cela pourrait être joué au golf, mais il est 4 heures du matin ici et je dois aller me coucher.
Essayez-le ici.
Explication
la source
Lot, 121 octets
Ou si unaire est acceptable, 107 octets:
Appelez avec le nombre approprié de 1.
la source
Matlab, 122 octets
la source
Haskell, 99 octets
Deux solutions de longueur égale.
Appelle
f
.et
la source
Haskell, 96
Ce n'est pas réellement compétitif par rapport à la solution Haskell existante car elle enregistre 5 caractères en retournant au lieu d'imprimer une chaîne. Je ne le poste que pour montrer comment l'approche du modèle infini se compare à l'approche basée sur les coordonnées. Remarques:
p
peut être aligné sans changement de longueur.[t n l|(n,l)<-...]
sauve 2 de plus(map(uncurry t)$...)
.la source
Ceylan, 100
Cela comprend une "liste d'arguments nommés" pour
join
(sans aucun argument nommé, mais une compréhension itérable à la place), et plusieurs utilisationsString.repeat
(dont l'une signifie en fait "inclure uniquement pour les impaires").i
").Formaté:
la source
PHP, 117 octets
Suppose que les notifications sont désactivées et que la saisie provient de la ligne de commande.
Non golfé:
Les commentaires sont les bienvenus :)
la source