Ceci est une fenêtre:
---
| |
---
Ajoutons quelques murs |
. Mettez deux espaces de chaque côté afin que la fenêtre ait beaucoup d'espace.
| --- |
| | | |
| --- |
Ajoutons maintenant un toit et un plafond. Pour garder la fenêtre au milieu de la pièce, ajoutons une ligne au-dessus et en dessous.
---------
| |
| --- |
| | | |
| --- |
| |
---------
Maintenant, ajoutez simplement un toit. Mettez une barre oblique aussi loin que possible à gauche, et une barre oblique inversée aussi loin que possible à droite, et nous avons ceci:
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Déplacez ensuite la barre oblique vers le haut et vers la droite. Déplacez la barre oblique inverse vers le haut et la gauche:
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Répétez jusqu'à ce que les deux barres obliques se rencontrent, puis ajoutez un astérisque à l'endroit où elles se rencontrent:
*
/ \
/ \
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Et tu as fini! Ceci est une maison 1x1. une maison 2x2 ressemblerait à ceci:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-----------------
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
|-------|-------|
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
-----------------
et une maison 3x2:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-------------------------
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
|-------|-------|-------|
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
-------------------------
Le défi
Vous devez écrire un programme complet qui prend deux entiers, x et y, et imprime une maison de X pièces de large et de Y pièces de haut. Votre programme devrait être capable de gérer des maisons jusqu'à 10x10. IO peut être dans n'importe quel format raisonnable. Les espaces de fin sur chaque ligne sont autorisés et une nouvelle ligne de fin est autorisée.
La réponse la plus courte en octets gagne.
f'{name}'
un formatage de chaîne?Python 2,
190181 octetsJe suis presque sûr qu'il y a beaucoup à jouer au golf, en particulier les fenêtres, mais voici quelque chose pour l'instant. Largeur et hauteur d'entrée séparées par des virgules, par exemple
1,2
.Explication rapide et approximative:
la source
JavaScript (ES6),
292270238215200 octetsMerci @Neil d'avoir aidé à réduire cela!
Appelez comme:
F(a)(b)
Construit le toit, puis assemble la maison principale avec des répétitions de cordes en couches.
la source
join`|\n`
et maintenant j'aurais aimé avoir commenté à l'époque. Cela aurait été une bonne excuse pour ajouter à mon commentaire partiel suggérant que vous l'utilisiez9*a
à un moment donné, que je n'ai jamais soumis parce qu'il était trop court.4*a-1
semble incorrecte, je pense qu'elle devrait l'être4*a
, cela vous épargnerait d'ailleurs 4 octets.m-i-1
devient--m
.9*a-a
devient8*a
.*\n${[...Array(m)].map(...).join
\ n}\n
'' mais vous pouvez aller mieux et rejoindre la chaîne avant et après en même temps:a=>b=>(p=(c,d=' ')=>d.repeat(c),[p(m=4*a)+`*`,...[...Array(m)].map((c,i)=>p(--m)+'/'+p(i*2+1)+'\\'),y=p(8*a+1,'-')].join`\n`+p(b,`\n`+[x=p(a,'| '),w=p(a,'| --- '),p(a,'| | | '),w,x,y].join`|\n`))
`/${p(i*2+1)}\\`
.C ++, 282 octets, résout les problèmes avec l'entrée précédente:
Sortie:
la source
Ruby, Rev B 165 octets
utilise une seule boucle et plusieurs autres tours de golf.
Ruby, Rev A 179 octets
Non golfé
la source
| \-'
.\-
cela ne signifie rien en tant que séquence d'échappement, donc le\-
est juste analysé en 2 caractères. Alors, bien sûr,-
a une signification particulière pourtr
, nous avons donc besoin de la chaîne' \-'
pour que les fenêtres s'échappent-
(mappage C-> espace, B->-
et A->-
car il ne reste plus de caractères.) Pour les étages, nous avons seulement la chaîne'-'
et dans ce castr
semble heureux de l'interpréter juste comme un littéral plutôt que comme un caractère spécial, assignant C = B = A ='-'
Dans l'ensemble, c'était une chose délicate de se mettre au travail. Je suis sûr qu'il y a plus de golf à faire, modifiera plus tard.C ++, test de 258 octets ici
Résultat:
la source
-
. Les étages intermédiaires sont cassés avec|
C #,
361353 octetsProgramme complet:
la source
s=""
peut être placé à l'intérieur de la boucle for (j) (tenez également comptej-->0
de la condition, eti++<h
dans la dernière boucle),i=0
peut être déplacé de la boucle for vers la déclaration en enregistrant un octet. Vous pouvez également enregistrer un octet en réutilisant les chaînes vides affectées (une foism
attribué, vous pouvez affecter l'o=m
enregistrement de la""
. Remplacer prend également des chaînes, vous pouvez donc utilisez votreq
au lieu de' '
, et il n'y a pas besoin d'espace après la>
déclarationr
. Petites choses;)VBA, 284 octets
La fonction Remplacer est un outil pratique pour faire plusieurs copies d'une manière que la fonction Chaîne ne veut malheureusement pas.
Appelez pour le meilleur effet dans la fenêtre Exécution de l'éditeur VBA:
?H(8,8)
par exemple.la source