Créez un programme qui prend une longueur et une liste d'intervalles et génère une règle de cette longueur avec des graduations plus longues pour chaque intervalle en utilisant les caractères de dessin au trait ┌ ┬ ┐ │ ╵
- La première ligne de la sortie doit commencer par le tick pour 0 avec
┌
et se terminer par un tick pour la longueur avec┐
, avec un┬
étant utilisé pour chaque caractère entre les deux. Il y aura un total delength
+ 1 caractères de dessin au trait dans cette première ligne. - Un tick doit être allongé verticalement par incréments d'un demi-caractère en utilisant
╵
et en│
fonction des intervalles d'entrée. - Les intervalles sont répertoriés du plus petit au plus grand, par rapport à l'intervalle précédent. Élaborer:
- Le premier intervalle indique le nombre de ticks de base (la première ligne - un caractère par tick) dans le deuxième plus petit intervalle (le plus petit intervalle étant 1). Par exemple, [3] allongera chaque troisième tick d'un demi-caractère.
- Le deuxième intervalle et les intervalles suivants sont en termes du plus petit intervalle suivant. Par exemple, [3, 5] allongera chaque 15ème tick de base d'un caractère complet et [3, 5, 2] allongera chaque 30ème tick de base d'un caractère et demi.
- Un sous-intervalle de 1 est valide et signifie effectivement que les dernières lignes d'intervalle sont allongées par un caractère complet au lieu d'un demi-caractère.
- Les exemples de cas de test devraient aider à clarifier comment cela fonctionne.
Exemples / cas de test
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Autres règles / notes
- L'entrée et la sortie peuvent utiliser n'importe quel format pratique
- La règle n'a pas à se terminer sur une tique majeure
- La liste d'intervalles peut être vide
- Le tick zéro est toujours dans tous les intervalles.
- Vous pouvez supposer que la longueur et les intervalles de la règle seront toujours des entiers positifs inférieurs à 120
- L'espace de fin est bien, mais pas l'espace de tête.
- Tout espace fixe simple largeur est autorisé comme caractère d'espacement si, pour une raison quelconque, vous souhaitez utiliser autre chose que des espaces ASCII.
Bon golf!
Réponses:
JavaScript (Node.js) , 123 octets
Essayez-le en ligne!
Utilisez cette fonction comme
f(20)([5, 2])
.Merci Arnauld, enregistre 4 octets.
la source
Perl 6 ,
130 122 102 10292 octets-10 octets grâce à nwellnhof!
Essayez-le en ligne!
Ah oui, beaucoup plus court que ma méthode précédente. Il s'agit d'un bloc de code anonyme qui renvoie une liste de lignes.
Explication:
la source
Dyalog APL,
66645852 octetsEssayez-le en ligne!
¯2¯8¯14 octets grâce à ngn !la source
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. l'acceptation⍺
dans l'ordre inverse a été explicitement autorisée maintenant, vous pouvez donc également supprimer le⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 octetsEssayez-le en ligne!
la source
05AB1E , 51 octets
Pas trop satisfait de la
I¯Qiεõ}}
solution de contournement pour les listes d'entrées vides .. Et peut certainement être joué à d'autres parties également ..REMARQUE: utilise des entiers compressés convertis en caractères requis, car l'utilisation directe des caractères requis signifie que je devrai compter le programme entier en UTF-8, en l'augmentant trop pour tous les caractères intégrés de 05AB1E.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce 05AB1E (section Comment compresser les grands entiers? ) Pour comprendre pourquoi
•5·W4•
est94749589
et•áΣ=Yô•
est948495169488
.la source
×S
peut êtreи
sиS
fonctionne, mais malheureusement c'est un octet plus long au lieu de plus court. C'est parce que les nombres entiers sont sur la pile en premier, et les chaînes après. Avec×
cela n'a pas d' importance que ce soitint,string
oustring,int
, mais avecи
elle attendstring,int
.и
! Ce sera bon à savoir à l'avenir, je ne l'avais pas vu utilisé avant l'une de vos autres réponses.Fusain , 50 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Les caractères de dessin de boîte ont une représentation de 3 octets en fusain, donc la chaîne ci-dessus ne fait que 40 caractères. Explication:
Calculez le produit cumulé des intervalles.
Imprimez la première ligne de graduations. Les caractères gauche et droit sont dans le mauvais sens car le résultat est reflété plus tard.
Calculez le nombre d'intervalles qui sont un facteur de chaque coche. Générez une chaîne de
│
s de la moitié de cette longueur et ajoutez╵
pour les longueurs impaires. Imprimer chaque chaîne vers le bas avec les chaînes suivantes dans les colonnes précédentes, c'est-à-dire l'ordre inverse.Tout refléter pour obtenir la règle de gauche à droite.
la source
Toile ,
424140 octetsEssayez-le ici! ( avec une police qui espace la sortie )
la source
Emacs Lisp , 303 octets
Utilisez cette fonction comme
(f '(30 (5 2)))
.Meilleure version lisible:
la source
Gelée ,
4241 octetsUn programme complet.
Essayez-le en ligne!
Ou voir une suite de tests
Remarque: ce code a été modifié à partir d'un programme complet -
ñ
(le lien suivant en tant que dyade) a été remplacé par1ŀ
(lien à l'index 1 en tant que dyade) pour lui permettre d'être appelé plusieurs fois par le pied de page .Comment?
la source
Rubis , 126 octets
Essayez-le en ligne!
Semble assez bavard avec tout ça
each_slice
ça, mais fera l'affaire pour l'instant, à moins que je n'arrive pas à trouver une approche de golfeur.Prend l'entrée comme
l
pour la longueur eti
pour les intervalles, retourne un tableau de chaînes.la source
R ,
175170octetsEssayez-le en ligne!
Prend des intervalles vides comme
0
, renvoie une matrice de caractères. Le lien TIO affiche la sortie bien imprimée.la source
Haskell ,
167164149 octetsEssayez-le en ligne! Approche différente légèrement golfée par ousurous .
Essayez-le en ligne! Il y a encore des redondances qui semblent pouvoir être exploitées, mais jusqu'à présent, elles ont résisté à toutes les autres tentatives de golf.
La solution précédente de 167 octets est la même en dehors de la gestion des sauts de ligne et est probablement légèrement plus lisible:
Essayez-le en ligne!
la source
PowerShell , 152 octets
Essayez-le en ligne!
Déroulé:
la source
C # (Visual C # Interactive Compiler) , 204 octets
Essayez-le en ligne!
Sorties, mais se coince dans une boucle infinie.
la source
Nettoyer ,
221201195162 octetsEssayez-le en ligne!
Renvoie une liste de listes de caractères UTF-8 (sous forme de chaînes, car Clean n'a pas de prise en charge UTF-8 innée).
Fonctionne en générant la première ligne, puis en prenant le produit des préfixes de la liste fournie par groupes de deux, et vérifie quelle marque dessiner selon que le produit divise la position actuelle du caractère.
Non golfé:
la source