Vous connaissez ces étagères empilables qui sont essentiellement des boîtes en bois qui peuvent être empilées ensemble? Nous allons simuler la construction de certaines étagères à partir de celles avec de l'art ASCII.
Nos livres sont tous de taille pratique et uniforme et ressemblent tous à ce qui suit:
|X|
|X|
|X|
Les étagères sont des boîtes individuelles, toujours trois caractères de haut à l'intérieur (assez pour tenir un livre debout), composées de |
caractères à gauche et à droite, des -
caractères pour le haut et le bas, et assez larges pour contenir des X
livres (où X
est une entrée entier). Par exemple, voici une étagère de taille 3
:
|---------|
| |
| |
| |
|---------|
parce que vous pouvez y insérer des 3
livres comme ça
|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|
L'entrée va être deux entiers strictement positifs X
et Y
, où X
est la largeur des étagères que nous avons (mesurée en livres), et Y
combien de livres nous devons empiler. Si nous avons plus de livres qu'il n'y en a sur une seule étagère, nous devons ajouter plus d'étagères en haut. Par exemple, voici une entrée 4 wide / 6 books
:
|------------|
||X||X| |
||X||X| |
||X||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Si Y % X > 0
, ce qui signifie que le nombre de livres n'est pas un multiple entier de la taille de l'étagère, les livres restants doivent se placer en haut à gauche (comme dans le cas 4 6
ci-dessus) et la partie restante de cette étagère remplie de les espaces.
Contribution
- Deux entiers strictement positifs dans n'importe quel format pratique , chacun
>0
. - Vous pouvez prendre l'entrée dans l'un ou l'autre ordre (par exemple, la taille des étagères en premier, puis le nombre de livres, ou vice versa). Veuillez indiquer dans votre soumission l'ordre de saisie.
- Vous pouvez sans risque supposer qu'aucune entrée ne sera plus grande que la
[int]
taille par défaut de votre langue (ou l'équivalent).
Sortie
La représentation artistique ASCII résultante des livres et des étagères.
Règles
- Les sauts de ligne ou les espaces de début ou de fin sont tous facultatifs, tant que les caractères eux-mêmes s'alignent correctement.
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
D'autres exemples
6 wide / 2 books
|------------------|
||X||X| |
||X||X| |
||X||X| |
|------------------|
2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
4 wide / 9 books
|------------|
||X| |
||X| |
||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Réponses:
JavaScript (ES6),
1009998 octetsPrend la largeur
w
et le nombre de livresb
dans la syntaxe de curry(w)(b)
.Formaté et commenté
Cas de test
Afficher l'extrait de code
la source
Bash (+ utilitaires),
130,108, 106 octetsUn pipeline shell unique et continu pour rendre vos étagères.
Journal des modifications:
printf + seq
par un brutprintf
, -10 octetsGolfé
Essayez-le en ligne!
Comment ça marche
$./shelf 2 3
printf %$2s\\n
- générer n espaces blancs, un par livre (montré comme_
)___
fold -$1
- pliez-les par la longueur de l'étagèresed "s/ /|X|/g;"
- remplacer_
parX
, ajouter des couvertures de livres:;/.\{$[$1*3]\}/!s/$/ /;t
- pad droit avec espaces (montré comme_
)h;s/./-/gp;x;p;p;p;x
- tripliquez chaque ligne et ajoutez-la---
avant et après.sed 's/.*/|&|/'|tac
- envelopper les lignes| |
, inverser avec tacla source
t
au lieu deb
cela, vous n'avez pas besoin de{}
. Vous pouvez ignorer les/./-/g
car ils sont déjà-
s. Essayez-le en ligne!Python 2,
133113 113105 octetsJe suis sûr qu'il y a une meilleure façon ...
L'entrée est prise
width, books
-20 octets grâce à @ovs pour avoir remarqué une fonction lambda inutile!
-8 octets grâce à @ovs pour avoir raccourci l'entrée.
la source
X,Y=input()
est un moyen plus court de prendre les valeurs to.X, Y
, non?'|'
comme une variable.Lot, 261 octets
Utilise mon astuce de ma réponse Lot à Jouons au tennis pour imprimer facilement beaucoup de
|
personnages.la source
Haskell , 100 octets
x#y
renvoie la chaîne de largeurx
et dey
livres.Essayez-le en ligne!
La fonction / opérateur principal est
#
. Quandx<y
il divise les livres eny-x
etx
, puis revient. Lorsquex>=y
,w
etb
sont les deux types de lignes, moins les extérieurs|
s et la nouvelle ligne.L'opérateur d'assistance
s?n
concatène desn
copies de la chaînes
.la source
PowerShell ,
149134 octetsEssayez-le en ligne!
Prend
$w
idth d' entrée et$b
ooks. Définit la chaîne$s
comme l'une des étagères horizontales. Ensuite, nous avons deuxif
déclarations.Le premier vérifie si nous avons des livres "restants". Si c'est le cas, nous sortons l'étagère, le (nombre de livres plus le nombre d'espaces)
*3
et une autre étagère.Ensuite, nous voyons s'il nous reste des livres après avoir supprimé les restes (
$a
). Même configuration, sauf que nous utilisons un$w
certain nombre de livres. Puisqu'à ce stade, il$b
est garanti d'être un multiple de$w
(parce que nous avons supprimé le reste,$a
), nous n'avons pas à nous soucier de l'arrondi.Suppression de l'
[math]::Floor()
appel, économisant 15 octetsToutes ces chaînes sont laissées sur le pipeline et
Write-Output
se produisent implicitement à la fin du programme.la source
CJam ,
6261 octetsPrend l'entrée comme
width books
Essayez-le en ligne!
Explication
la source
Python 3, 142 octets
Travaille toujours dessus.
b
correspond au «nombre de livres» etw
à la largeur de l'étagère.la source
R=b%w
soit déplacé vers la ligne suivante. En outre, vous devriez pouvoir supprimer les espaces autour de ces trois=
pour économiser quelques octets.d+3*p+d if R!=0 else ''
parR and d+3*p+d or''
d+3*p+d
?AHK, 208 octets
Il y a quelques choses qui me frustrent de continuer à jouer au golf:
%1%
&%2%
) dans les fonctions mathématiques car ceux-ci attendent une entrée de variable ou de nombre et il supposera que le caractère non échappé1
est le numéro un plutôt que le nom de la variableUne version plus facile à lire de ce qui précède ressemble à ceci:
Si a
Loop
n'utilise pas de crochets{}
, alors seule la ligne suivante fait partie de la boucle. Si vous définissez la valeur d'une variable à l'aide de:=
au lieu de=
, vous pouvez supprimer les caractères d'échappement du signe pourcentage. Tilde n est le caractère de nouvelle ligne.la source
Java 7,
230224222 octetsExplication:
Code de test:
Essayez-le ici.
Sortie:
la source
.repeat
vraiment, vraiment aider dans ce défi .PowerShell, 109 octets
Script de test moins golfé:
Sortie:
PowerShell, 109 octets, alternative
la source
Python 2 ,
120118 octetsEssayez-le en ligne!
Je voulais essayer celui-ci depuis quelques jours. Maintenant que j'ai enfin le temps de le faire, il y a déjà une réponse Python plus courte. Eh bien, vient d'être publié comme alternative.
Entrée prise comme largeur, livres
la source
SOGL , 64 octets
Explication: Première fonction:
deuxième fonction:
cette fonction attend un nombre (nombre de livres) sur la pile et affiche les livres des étagères
Un exemple plus bas donné est e = 3 (largeur de la bibliothèque) et b = 8 (montant du livre)
c'est la ligne supérieure / inférieure de la bibliothèque et reste toujours sur la première partie de la pile (bibliothèque à moitié vide)
Première partie principale
Et la dernière partie
la source
Java (JDK) , 124 octets
Essayez-le en ligne!
Crédits
la source
PHP> = 7.1, 138 octets
Version en ligne
la source
Toile , 33 octets
Essayez-le ici!
Explication (certains caractères ont été remplacés pour paraître plus monospaces):
la source
Pip
-n
, 45 octetsPrend la largeur et le nombre de livres, respectivement, comme arguments de ligne de commande. Essayez-le en ligne!
Explication
Nous exécutons une boucle pour imprimer les étagères une par une de haut en bas. À chaque itération, nous mettons à jour
b
(le nombre de livres à imprimer) en soustrayanty
(le nombre de livres imprimés sur cette itération). Quandb
atteint 0, la boucle se termine.Parce que c'est un peu impliqué, voici un exemple de la première itération lorsque
a = 3, b = 8
:qui imprime ensuite
la source
Pyth , 56 octets
Accepte la largeur d'étagère, le nombre de livres comme arguments séparés dans cet ordre. Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .
la source
Forth (gforth) , 622 octets (minimisé (supprimer les commentaires, l'indentation, les noms de mots de 1 caractère) à 303 octets)
Ma première pièce avec Forth :)
Essayez-le en ligne!
Sortie
la source