Esta é uma janela:
---
| |
---
Vamos adicionar algumas paredes |
. Coloque dois espaços de cada lado, para que a janela tenha espaço suficiente.
| --- |
| | | |
| --- |
Agora vamos adicionar um teto e um teto. Para manter a janela no meio da sala, vamos adicionar mais uma linha acima e abaixo dela.
---------
| |
| --- |
| | | |
| --- |
| |
---------
Agora, basta adicionar um telhado. Coloque uma barra o mais à esquerda possível e uma barra invertida o mais à direita possível, e temos o seguinte:
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Em seguida, mova a barra para cima uma e a direita. Mova a barra invertida para cima e a esquerda:
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Repita até que as duas barras se encontrem e adicione um asterisco onde elas se encontrarem:
*
/ \
/ \
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
E pronto! Esta é uma casa 1x1. uma casa 2x2 ficaria assim:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-----------------
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
|-------|-------|
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
-----------------
e uma casa 3x2:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-------------------------
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
|-------|-------|-------|
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
-------------------------
O desafio
Você deve escrever um programa completo que use dois números inteiros, xey, e imprima uma casa com X salas de largura e Y salas de altura. Seu programa deve ser capaz de lidar com casas de até 10x10. O IO pode estar em qualquer formato razoável. Espaços à direita em cada linha são permitidos e uma nova linha à direita é permitida.
A resposta mais curta em bytes vence.
f'{name}'
formatação de string?Python 2,
190181 bytesTenho certeza de que há muito para jogar golfe, especialmente as janelas, mas aqui está algo por enquanto. Largura e altura de entrada separadas por vírgula, por exemplo
1,2
.Explicação rápida e aproximada:
fonte
JavaScript (ES6),
292270238215200 bytesObrigado @ Neil por ajudar a aparar isso!
Ligue como:
F(a)(b)
Constrói o telhado e monta a casa principal com repetições de cordas em camadas.
fonte
join`|\n`
e agora gostaria de ter comentado na época. Teria sido uma boa desculpa acrescentar ao meu comentário parcial sugerindo que você o usasse9*a
em algum momento, que eu nunca enviei porque era muito curto.4*a-1
parece incorreta, acho que deveria ser4*a
, isso economizaria incidentalmente 4 bytes.m-i-1
torna-se--m
.9*a-a
torna-se8*a
.*\n${[...Array(m)].map(...).join
\ n}\n
``, mas pode ir um melhor e se juntar à string antes e depois ao mesmo tempo: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 bytes, corrige os problemas da entrada anterior:
Saída:
fonte
Ruby, Rev B 165 bytes
usa um único loop e vários outros truques de golfe.
Ruby, Rev A 179 bytes
Ungolfed
fonte
| \-'
.\-
que não significa nada como uma sequência de escape, então o\-
é apenas analisado como 2 caracteres. Então,-
é claro, tem um significado especial paratr
, então precisamos da string' \-'
para as janelas escaparem do-
(mapeamento de C-> espaço, B->-
e A->,-
pois não há mais caracteres restantes.) Para os pisos, temos apenas a string'-'
e, neste caso,tr
parece feliz em interpretá-la apenas como um caractere literal, e não especial, atribuindo C = B = A ='-'
Em suma, foi complicado trabalhar. Tenho certeza de que há mais golfe a fazer, que será editado mais tarde.C ++, 258 bytes testam aqui
Resultado:
fonte
-
. Os andares intermediários são divididos com|
C #,
361353 bytesPrograma completo:
fonte
s=""
pode ser colocado dentro do for (j) loop (considerarj-->0
para a condição, bem como, ei++<h
em o último loop),i=0
pode ser movido do loop for para a declaração, salvando um byte. Você também pode salvar um byte reutilizando cadeias de caracteres vazias atribuídas (uma vezm
atribuído, você pode atribuir oo=m
salvamento de""
. Substituir também leva cadeias de caracteres, para que você use your emq
vez de' '
, e não há necessidade de espaço após o>
quando declarar.Pequenasr
coisas;)VBA, 284 bytes
A função Replace é uma ferramenta interessante para fazer várias cópias de uma maneira que infelizmente a função String não deseja.
Chame para obter o melhor efeito na janela Immediate do editor VBA:
?H(8,8)
por exemplo.fonte