(Inspiré par cette question )
Objectif
Votre tâche consiste à écrire un programme ou une fonction pour imprimer une version ASCII du logo Stack Overflow sur STDOUT.
\|/
(-)
(-)
(-)
(-)
Votre programme doit prendre deux entrées, appelées ici H et N. La hauteur du "conteneur" de la pile (les parenthèses) est déterminée par H. Le nombre d'éléments de la pile est déterminé par N. Si N> H, le la pile va "déborder".
Entrée sortie
H déterminera la hauteur des conteneurs
Par exemple:
H = 1:
( )
H = 2:
( )
( )
H = 3:
( )
( )
( )
H sera toujours au moins 1
N déterminera le nombre d'éléments contenus dans la pile. Les exemples suivants sont tous H = 2:
N = 0
( )
( )
N = 1
( )
(-)
N = 2
(-)
(-)
N = 3
\
(-)
(-)
N = 4
\|
(-)
(-)
N = 5
\|/
(-)
(-)
N = 6
\|/
(-)-
(-)
N = 7
\|/
(-)-
(-)-
N ne sera jamais plus que 2H+3
(en d'autres termes, la pile ne passera jamais par le sol).
Règles
- Aucune échappatoire standard.
- Votre programme ne doit générer aucune erreur.
- Tous les cas de test doivent réussir.
- Vous pouvez entrer H et N comme vous le souhaitez.
- Je doute sérieusement que votre langue ait une fonction intégrée pour cela.
- Chaque ligne peut éventuellement avoir un espace supplémentaire à la fin. Une ligne vide au-dessus d'une pile où N <= H est facultative, de même qu'une fin de ligne.
- C'est du code-golf , donc le code le plus court en octets gagne!
Cas de test
En plus de tous les tests H = 2 de la section Entrée / Sortie, tous les tests suivants doivent réussir:
H = 1, N = 1
(-)
H = 1, N = 5
\|/
(-)-
H = 4, N = 7
\|/
(-)
(-)
(-)
(-)
H = 5, N = 0
( )
( )
( )
( )
( )
Classements
Voici un extrait de pile permettant de générer un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Réponses:
Pyth,
434140 octetsEssayez-le en ligne. Suite de tests.
Premier passage, rapide et sale. Entrée dans STDIN en tant que
N\nH
.Explication
J
(JE
) et soustrayez-la de la première entrée (nombre d'éléments). (-QJE
)K
. (K-QJE
)hK-QJE
)max(0, previous)
. Ceci est nécessaire car des nombres négatifs briseraient l'étape suivante. (g#0hK-QJE
)" \|/"
pour obtenir la première ligne et imprimer. (<" \|/"g#0hK-QJE
)N
terminéerange(0, J)
. (VJ
) Pour chaqueN
impression, la concaténation de ce qui suit: (s[
)"("
(\(
)" "
s'il y a au moinsN+1
des espaces libres dans la pile (<N_K
),"-"
sinon. (?<N_Kd\-
)")"
(\)
)"-"
s'il y a au moins desN+4
morceaux débordants dans la pile (<N-K3
),""
sinon. (*<N-K3\-
)la source
JavaScript (ES6),
105102 octets@Edit: 3 octets enregistrés grâce à @PatrickRoberts.
la source
substring
parsubstr
pour sauvegarder 3 octets, eti+n<h?' ':'-'
par'- '[i+n<h]
pour sauvegarder 2 octets et remplaceri+h+3<n?'-':''
par' -'[i+h+3<n]
pour sauvegarder 1 octet. Ça vous fera moins de 100 anssubstr
sous- scripts négatifs étaient ignorés ou non, mais je ne peux pas utiliser vos autres astuces car les sous-scripts de chaîne sont des chaînes, donc les booléens ne sont pas assez bons.JavaScript (ES6),
126122112 octetsTester
Autre test (si votre navigateur ne supporte pas ES6)
Voir le test sur Babeljs.io et cochez la case "évaluer".
Approche alternative intéressante à 136 octets
Cela déplace les montants de répétition dans la chaîne de modèle et utilise une expression rationnelle à remplacer pour injecter les groupes répétitifs. Malheureusement, la signature
.replace()
est trop longue.la source
C ++ 14 (fonction lambda), 196
Sauvé 1 octet grâce à Quentin.
2 octets sauvés grâce à Adam Martin.
La fonction elle-même prend 157 octets.
Voir en action ici .
Version non-golfée:
la source
include
s etusing namespace std;
dans le nombre d'octets, à moins que votre réponse ne soit un programme complet (ce qui n'est pas le cas).CJam, 57 octets
Testez-le ici.
Pourrait certainement utiliser certaines améliorations. L’idée est de construire une grille où les
-\|/-
cellules sont remplacées par des entiers consécutifs, par exempleEt puis pour les remplacer par les caractères corrects (potentiellement des espaces) à la fin.
la source
Python 2,
10110098 octetsla source
print
sont pas nécessairesJavaScript (ES6),
8780 octetsUtilise la récursivité pour créer la chaîne de sortie de bas en haut.
EDIT : Merci à @Neil d’ avoir supprimé 7 octets sur 87 octets
Original
Extrait de test:
la source
SyntaxError
pour moi.JavaScript (ES6),
149139137 octetsJ'aimais l'idée de @ MartinEnder d'indexer les
-\|/
personnages et je voulais voir comment elle se comporterait dans ES6. Apparemment, je n'ai pas si bien réussi. Essayer de savoir si cela pourrait être amélioré en utilisantfor...of
.Édite
.replace
, en déplaçant l'indexation directement dansg()
.f=
dans le deuxième décompte d'octetsTester
la source
Java,
186177 octetsUngolfed essayer en ligne
la source
Excel, 131 octets
Entrée prise sous forme de tuple, hauteur
H
enA1
,N
enB1
. L'habillage du texte doit être activé dans les cellules contenant une formule. Suggérez d'utiliser une police mono-espacée.la source
A1
etB1
et ajouter la simple note que cela nécessite que la cellule appelante ait l'option de texte intégral pour avoir la valeur true. Aussi, peut-être que pour obtenir le bon alignement, il devrait avoir une police à simple interligne telle que Courier New ou Lucidia ConsoleC ++ 11,
155148145 octetsUngolfed :
Utilisation :
la source
Python 3,
134121118111 octetsTestez-le ici: https://repl.it/CYL1/0
Non-golfé:
J'aimerais avoir ajouté le débordement latéral à la compréhension de la liste, mais je ne pouvais pas l'insérer, alors je devais partir avec la boucle while.13 octets sauvés!la source
'\|/'[:max(0,n-h)]
pour ressembler à la solution Python 2.Perl 5 , 91 octets
Essayez-le en ligne!
la source
Pip , 50 octets
Essayez-le en ligne!
Ugh, c'est trop long ... je ne sais pas comment le raccourcir, cependant. L'indexation cyclique, généralement utile, coûte des octets supplémentaires cette fois-ci.
la source
PowerShell ,
109108104 octetsEssayez-le en ligne!
Perdu sur une indexation coûteuse mais toujours décente. Je ne suis pas sûr que mon index mathématiques soit optimal cependant. A volé un peu de logique dans les autres réponses pour sauvegarder un octet. Rappelons également la priorité de faire apparaître des parenthèses pour -4 octets.
la source
05AB1E , 45 octets
Peut certainement être joué au golf .. Pas trop heureux à ce sujet dans sa forme actuelle tbh.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
LR'(ì')«¹x‚3+¬UŸ¦ζJ¹XŸJ¦1úr)˜»
et ce n'est qu'à moitié fait.