Des nanobots automatiques de construction de maisons ont été fabriqués, et c'est à vous de les coder.
Voici la maison créée par entrée 7 4 2
/-----/|
/ / |
|-----| |
| | |
| | /
|_____|/
L'entrée est une chaîne contenant les dimensions de la maison.
7
est la largeur.
|_____|
---7---
4
est la hauteur.
|
|
|
|
2
est la profondeur
/
/
Compte tenu de cette entrée, pouvez-vous créer la maison?
Votre code doit être aussi petit que possible afin qu'il puisse tenir dans les robots.
Remarques
Les plus petites dimensions qui vous seront données en entrée sont 3 2 2
. Votre programme peut tout faire avec des dimensions plus petites que 3 2 2
.
Cas de test
3 2 10
/-/|
/ / |
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
|-| /
|_|/
3 2 10
?Réponses:
Python 2, 128 octets
Imprime ligne par ligne. Les indices de ligne
i
décomptent ded
à-h+1
.la source
' '*min(d-i,h-1,w+1,h-1+i)
par(' '*d)[max(0,i):h-1+i]
Rubis, 145 octets
Renvoie une liste de chaînes. Chaque élément de la liste correspond à une ligne. Si une chaîne multiligne doit être renvoyée, ajoutez 3 octets à ajouter
*$/
juste avant le dernier crochet.la source
JavaScript (ES6), 169 octets
Où
\n
représente un caractère de nouvelle ligne littéral. Explication:Edit: sauvé 2 octets grâce à @jrich.
la source
,r='repeat'
devant et remplacez le premier[r]
par[r='repeat']
,r=(n,c=` `)=>c.repeat(n)
et quand j'ai changé de tactique, j'ai ignoré la possibilité d'un réarrangement.Python
224301297 octets(Fonctionne maintenant pour toutes les boîtes, y compris 1x1x1)
Explication:
Prend trois constantes: l (longueur), h (hauteur), w (largeur).
Si nous regardons quelques exemples de boîtes, nous pouvons trouver des modèles dans l'espacement.
Pour une boîte de 3 x 4 x 3, nous utiliserons des nombres pour représenter l'espacement entre les sections.
La rangée du haut a 4 espaces ou qui est w + 1. Les trois lignes suivantes ont w - (1 * x). X étant la ligne.
Ce sont des modèles qui se poursuivent sur toutes les lignes dans toutes les cases. Par conséquent, nous pouvons facilement programmer cette ligne par ligne, en multipliant le nombre d'espaces pour s'adapter au motif.
Voici un exemple pour une boîte 5 x 5 x2.
la source
w,h,l=input()
soit en faire une fonction.Python 3.5,
328326313305295248 octets( Merci à Kevin Lau pour le conseil sur la réduction de la taille des déclarations ternaires! )
Prend l'entrée comme 3 entiers dans l'ordre de
width, height, depth
. Va jouer au golf au fil du temps partout où je peux.Essayez-le en ligne! (Ideone)
Explication:
Aux fins de cette explication, supposons que la fonction a été exécutée avec les arguments
(3,2,3)
où 3 est la largeur (w
), 2 est la hauteur (h
) et 3 est la profondeur (d
). Cela étant dit, permettez-moi de commencer par montrer l'essentiel de l'ensemble de la fonction:Ici, les deux listes qui composent toute la "maison" sont créées puis réunies par de nouvelles lignes littérales (
\n
). Appelons-les respectivement listea
et listeb
, et analysons chacun d'eux:Voici où la liste
a
est créée:Cette liste contient les premières
d
lignes de la maison. Ici,i
est chaque numéro dans la plage0=>(d-(d-h))+d-h
oùd-h=0
si elle est négative ou nulle. Pour commencer, desd-i
espaces sont ajoutés à la liste, suivis d'un/
, puis de tout ce qui est renvoyé par une instruction conditionnelle compressée. Dans cette instruction conditionnelle, lew-2
nombre d'espaces est renvoyé sii>1
. Sinon, le même nombre de-
sont retournés. Ensuite, ceux-ci sont suivis par un autre/
, puis des espaces, où le nombre d'espaces dépend maintenant de savoir si oui ou noni<=d-(d-h)-1
. Si c'est le cas, desi
espaces sont ajoutés. Sinon, desh-1
espaces sont ajoutés. Enfin, tout cela est complété par un/
ou un|
, où|
est ajouté sii<=d-(d-h)-1
, sinon un/
est ajouté. Dans ce cas d'un3x2x3
prisme, celui-ci serait retourné par listea
:Voici où la liste
b
est créée:Cette liste contient le reste des lignes du prisme. Dans cette liste,
i
est tout entier dans la plage(h-(h-d))+h-d=>0
oùh-d=0
il est négatif ou nul. Pour commencer cette liste, un premier|
est ajouté car ces lignes commencent toujours par un|
. Alors, que ce soit un espace,-
ou_
est ajouté en fonction de si oui ou noni=h
oui<2
. Sii<2
, alors un_
est ajouté. Sinon, un-
est ajouté sii=h
, ou un espace est ajouté sii>h
oui<h
oui>2
. Une fois cette décision prise, lew-2
numéro du personnage choisi est ajouté. Après cela, un autre|
est ajouté, puis uni-1
oud
plusieurs espaces sont ajoutés. Sii>h-(h-d)
, alors und
nombre d'espaces sont ajoutés. Sinon, lei-1
nombre d'espaces est ajouté. Enfin, tout cela est complété par un|
ou un/
, dans lequel un|
est ajouté sii>h-(h-d)
, ou un/
est ajouté sii<=h-(h-d)
. Dans le cas d'un3x2x3
prisme, la listeb
renvoie:Une fois les 2 listes créées, elles sont finalement jointes à de nouvelles lignes littérales (
\n
) à l'aide de'\n'.join()
. Ceci est votre prisme terminé, et dans ce cas, cela ressemblerait à ceci:la source
'-_'[f<2]
. Enfin,R=range;S,V,L=' |/'
fonctionne pour assigner vos variables initiales, car les chaînes se décompresseront volontiers pour vous dans cette situation.a=1 if b<9 else c=5
ne peut pas être exprimé comme,[a=1,c=5][b<9]
car vous finirez par modifier à la foisa
etc
. Voici la page des conseils de golf PPCG Python: codegolf.stackexchange.com/questions/54/…'_'if f<2else' -'[f==h]
,. N'oubliez pas que les booléens sont évalués en tant qu'entiers, vous pouvez donc "chaîner" ce ternaire à l'autre que vous avez fixé pour obtenir[' -'[f==h],'_'][f<2]
. De plus, vous n'avez pas encore utilisé mon conseilS,V,L=' |/'
.