Défi
Étant donné un opérateur ASCII dans la liste ci-dessous et un nombre n, tracez une représentation ASCII de l'opérateur en utilisant cet opérateur comme caractère avec les segments de ligne de l'opérateur de longueur n .
Contribution
Un caractère ASCII de la liste = + - x /
et un entier n
où n >= 1
. (J'utilise à la x
place de *
et /
au lieu de ÷
, mais vous pouvez utiliser l'un ou l'autre, selon ce qui est plus facile). Pour +
et x
, vous n'avez qu'à gérer les nombres impairs pour éviter les problèmes d'alignement.
Sortie
Un dessin ASCII de l'opérateur composé du caractère avec des segments de longueur n. Les portions horizontales doivent avoir des espaces entre les caractères pour compenser les différences de distance verticale / horizontale.
Règles
C'est le code-golf , donc le code le plus court en octets gagne. Les failles standard sont interdites.
Exemples
Contribution: + 3
+
+ + +
+
Contribution: = 4
= = = =
= = = =
Contribution: = 10
= = = = = = = = = =
= = = = = = = = = =
Contribution: - 2
- -
Contribution: / 10
/
/
/
/
/
/
/
/
/
/
Contribution: x 7
x x
x x
x x
x
x x
x x
x x
= 10
?Réponses:
Pip ,
625956 octets55 octets de code, +1 pour l'
-S
indicateur.Notez que cette solution fonctionne avec l'entrée de
÷
pour la division et*
pour la multiplication, bien qu'elle utilise ces caractères pour dessiner l'art ASCII/
etx
, respectivement. OP a clarifié que cela allait. Essayez-le en ligne!Comment?
Voici une version partiellement espacée et commentée . Notez que
a
etb
sont les arguments de la ligne de commande, c'est-à-dire l'opérateur et la taille respectivement. L'-S
indicateur contrôle la façon dont les listes sont sorties: il rejoint d'abord les sauts de ligne, mais joint toutes les listes imbriquées sur les espaces.Et voici les sections individuelles:
Multiplication
Pour chaque ligne de la figure, nous générons une chaîne d'espaces, puis remplaçons deux d'entre eux par le caractère d'entrée. Pour la ligne
i
, nous voulons remplacer les espaces à l'indexi
etb-1-i
; mais notez que ce dernier peut utiliser l'indice négatif-1-i
. (Il est encore plus court car la variablev
est préinitialisée à negati v e 1.)Une addition
En utilisant la stratégie de mon Dessinez un carré creux réponse, on définit une fonction qui enveloppe un
+
dans desb/2
copies de son argument et renvoie le résultat sous la forme d' une liste de caractères. (La division entière//
n'est pas nécessaire car l'opérateur de répétition de chaînesX
tronque automatiquement en entier.) Premièrement, nous appelons cette fonction sur un espace, donnant[" ";" ";"+";" ";" "]
; ensuite, nous mappons la même fonction à ce résultat, donnant[" ";" ";"+";" ";" "]
sur la plupart des lignes mais["+";"+";"+";"+";"+"]
sur la ligne centrale. Cette liste imbriquée est ensuite sortie, en raison de l'-S
indicateur, avec des espaces entre tous les caractères d'une ligne et des sauts de ligne entre les lignes.Division
Chaque ligne a entre
b-1
et des0
espaces, suivis du caractère saisia
.Soustraction
Créez une ligne séparée par des espaces du caractère saisi. Enregistrez une copie pour plus tard.
Équivaut à
L'étape de soustraction a stocké la moitié de ce dont nous avons besoin -
y
juste le doubler.Les
x
valeurs fictives sont là pour remplir la liste principale afin que l'indexation modulaire donne un index unique pour chaque caractère d'entrée dans+-*÷=
.la source
V ,
78, 72, 71, 68, 65, 63, 62, 61 octetsEssayez-le en ligne!
Comme toujours, la bataille au coude à coude avec 05AB1E est vraiment amusante!
Puisqu'il contient des caractères non ASCII, voici un hexdump:
Cela crée des espaces de tête dans la sortie pour
=
et-
, mais cela semble être autorisé . Si cela n'est pas autorisé, n'hésitez pas à commenter et je vais le restaurer.Explication
La "commande globale" (par exemple
ç
) applique un certain ensemble de commandes à chaque ligne qui correspond à une certaine expression régulière. La syntaxe estC'est le moyen le plus simple de simuler une instruction conditionnelle / switch. Dans ma réponse d'origine, j'ai simplement créé l'intégralité de l'art ASCII sur le côté droit pour chaque personnage différent que nous devons rechercher. Cependant, beaucoup de ces sorties nécessitent des commandes similaires. Je les ai donc combinés. La première commande ('Ç') est en fait l'inverse de la commande globale, elle applique la commande à chaque ligne ne correspondant pas à l'expression régulière. La première commande est donc:
La commande suivante concerne les entrées '=' et '-'. Ces deux sont commodément faciles et similaires. Après cette commande, nous n'avons plus besoin de traitement
-
.De là, nous faisons juste quelques commandes supplémentaires pour chaque entrée individuelle possible. Pour
+
:La commande pour égal est très simple. Nous le reproduisons simplement avec
Ä
. Pour/
:Le dernier est le plus compliqué. C'est essentiellement un portage de cette réponse .
la source
ç
commande (ainsi que la recherche et le remplacement,/
et?
) simulent toutes une partie de la ligne de commande de vim, où vous devez05AB1E ,
8176747370696865646260595756 octetsÀ l' heure actuelle dans la guerre avec la réponse V . Je viens pour vous Dr McMoylex: p.
Toujours en guerre avec la réponse de Pip . Je vous surveillerai M. DLosc.
Code:
Ou sous une forme plus lisible:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
Python 3,
304283278 octetsAssez simple, crée simplement une matrice de caractères et applique les différentes opérations en fonction de celle-ci. Le
=
et-
ont des espaces de fin si ce n'est pas trop mal.EDIT: Merci à @Shebang et @Rod pour leurs suggestions qui ont fini par économiser 21 octets!
EDIT2: Merci à @Artyer pour avoir économisé 5 octets!
la source
if'-'==t
ligne de condition et en remplaçant celle au-dessus parif t in'=-':b=[[t+' ']*s]*(2*(t>'-'))
(je pense).exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])
pour économiser ~ 18 octets.split()
(Pas d'argument fractionné sur les espaces). À la ligne 6, vous avez manqué un espace (b=[[x+' 'for
). Vous pouvez faire la dernière ligneprint(*map(''.join,b),sep='\n')
pour 1 octet de moins.JavaScript (ES6),
238225215 215202196 octetsPourrait probablement être joué au golf, mais c'est un début.
la source
Scala, 275 octets
Usage:
Explication:
Le code teste la valeur ascii du caractère pour choisir la bonne façon de générer l'image. Les valeurs ascii des opérateurs en question sont:
('+' -> 43), ('-' ->45), ('/' -> 47), ('=' -> 61), ('x' -> 120)
la source
JavaScript (ES6), 156 octets
Où
\n
représente le caractère de nouvelle ligne littéral.la source
SyntaxError: invalid property id
tel qu'il est actuellement écrit, mais changer les slicks autour de la barre oblique en apostrophes a corrigé cela. (Pourquoi y a-t-il des backticks au lieu des apostrophes?)+
,-
et=
regard différent que les appels de défi pour: « Les parties horizontales doivent avoir des espaces entre les caractères pour compenser les différences de distance verticale / horizontale. »Dyalog APL ,
9186 octetsBesoins
⎕IO←0
, qui est par défaut sur de nombreux systèmes. Prend n comme argument de gauche et l'un de + - × ÷ = comme argument de droite.Explication
la source
Mathematica, 191 octets
Fonction anonyme. Prend une chaîne et un nombre en entrée et renvoie une chaîne en sortie. Pas le plus court de loin, mais toujours amusant à écrire.
la source
C, 396 octets
Appeler avec:
la source
SOML ,
104100 octets (non concurrent)C'est un peu concurrentiel car je suis presque sûr que tout ce que j'ai utilisé ici a des documents sur github avant cette date de publication des questions, mais l'analyseur n'a pas de support pour certaines fonctions que j'ai utilisées si idk.
la source
PHP,
306292281282281275270 octetsOoh, c'est encombrant ... a besoin de golf.
Je pourrais économiser 4 octets avec des sauts de ligne physiques ou un octet en mettant "\ n" dans une variable.
la source
C #, 744 octets
C'est comme 1 million de caractères, je pense, mais je m'en fiche, je suis tellement heureux d'avoir résolu ça ...
Golfé:
Non golfé:
Essai:
Trop de choses à coller et formater ici, j'ai créé une boîte à pâte:
Pastebin
la source
C, 331 octets
L'opérateur est transmis sous forme de code ASCII
o
et le nombre de caractères dansn
. J'ai seulement ajouté des espaces entre les caractères consécutifs horizontalement dans le signe plus, car c'était le seul où la sortie aurait été déformée si je ne l'avais pas fait et dans la tâche, il a seulement dit "devrait". J'utilise deux boucles imbriquées pour le compte à rebours (sauf-
lorsque je n'ai besoin que d'une seule ligne).=
Trois lignes, l'une d'entre elles vide, simple+
en utilisant àprintf
cause des espaces-
simple/
avoir l'impression de la boucle intérieure à zéro et commencer au compteur de la boucle extérieurex
avoir l'impression de la boucle intérieure au compteur de la boucle extérieure et son "inverse"n-i
. Encore faut-il voir pourquoi je suis hors-jeu ici.Exemple d'appel:
la source
Lua,
402344312 octets312:
344:
402:
90 caractères réduits et il est maintenant difficile de regarder même lorsqu'il est développé. : |
la source