Pequenas caixas na encosta


13

Há uma música satírica chamada Little Boxes , originalmente de Malvina Reynolds, sobre a expansão suburbana que tem letras da seguinte forma:

Pequenas caixas na encosta,
Pequenas caixas feitas de cócegas,
Pequenas caixas na encosta,
Pequenas caixas iguais.
Há uma verde e uma rosa
E uma azul e uma amarela
E todas são feitas de cócegas
E parecem todas iguais.

Seu trabalho aqui é, dada uma entrada inteira n>1que representa o tamanho da casa, imprima as quatro "caixinhas" usando as seguintes cores (na notação 0xRRGGBB):

Green -- 0x00FF00
Pink --- 0xFF00FF (technically magenta)
Blue --- 0x0000FF
Yellow - 0xFFFF00

Se o seu console em particular não tiver essas cores exatas, você poderá usar o mais próximo disponível (por exemplo, códigos de escape ANSI).

As casas são construídas n _representando o piso e a linha do telhado. Eles são cercados por caracteres n/2(arredondados) |que representam as paredes. Os telhados são sempre 2altos e são dois /na borda esquerda, dois \na borda direita e n-2 -representam o pico do telhado. À medida que as casas aumentam, o tamanho comparativo do telhado diminui; isto é pretendido.

Aqui está uma casa de tamanho 2:

 /\
/__\
|__|

Aqui está o tamanho 3:

 /-\
/___\
|   |
|___|

Aqui está o tamanho 7:

 /-----\
/_______\
|       |
|       |
|       |
|_______|

Dada a entrada de 7, produz quatro casas de tamanho 7como descrito acima, com a primeira em verde, a segunda em rosa (magenta), a terceira em azul e a quarta em amarelo. A saída das cores nessa ordem é importante.

Exemplo de imagem de tamanho 3:

insira a descrição da imagem aqui

Regras

  • As casas podem ser horizontais ou verticais, desde que haja uma separação clara entre elas.
  • As novas linhas iniciais / finais ou outros espaços em branco são opcionais, desde que as casas sejam alinhadas adequadamente.
  • Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
  • A saída pode ser no console, salva como imagem, etc.
  • As brechas padrão são proibidas.
  • Isso é portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.

Respostas:


5

Python 2 , 123 121 119 111 109 108 bytes

  • Economizou dois bytes graças ao caird coinheringaahing ; usando o caractere ASCII real não imprimível em vez de escapá-lo ( \33)
  • Pode (e fez) salvar um byte escrevendo um programa inteiro usando, em input()vez de definir uma função
  • Economizou sete bytes graças ao ElPedro ; usando o fato de que str(90+n)com 0<=n<=9é"9%s"%n
  • Salva dois três bytes usando formatação de sequência, em vez de concatenação de sequência

N=input()
for(n)in"2543":Z="_"*N;print"[9%sm /"%n+~-~-N*"-"+"\ \n/%s\\\n"%Z+~-N/2*("|%s|\n"%" "*N)+"|%s|"%Z

Experimente online!

Usa códigos de escape ANSI para colorir as casas.



1
112, executando o loop "2543" e usando a formatação de string - Experimente online!
ElPedro 22/09

2
@ElPedro Thanks. Não me ocorreu isso 90e 2,5,4,3resumido é efetivamente concatenação.
22617 Jonathan Frech

4

JavaScript (ES6), Chrome / Firefox, 156 148 151 150 bytes

Guardado 8 bytes graças a @Shaggy
Guardado 1 byte graças a @Neil

n=>['0f0','f0f','00f','ff0'].map(c=>console.log(`%c /${'-'[r='repeat'](n-2)}\\
/${s='_'[r](n)}\\
${(`|${' '[r](n)}|
`)[r](~-n/2)}|${s}|`,'color:#'+c))

Demo

Certifique-se de abrir o console do seu navegador para obter a saída colorida.


Funciona bem para mim como um trecho, com o console do meu navegador aberto. Salve 8 bytes usando os códigos hexadecimais de 3 dígitos: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@ Shaggy Obrigado pelas sugestões!
Arnauld

Os líderes 0são necessários?
Jonathan Frech

@JonathanFrech Sim. Sem os zeros à esquerda, isso não seria um #RGBcódigo de cores CSS válido .
Arnauld

Eu acho que a altura está errada nas casas mais largas.
Neil

3

Excel VBA, 243 bytes

Função de janela imediata VBE anônima que leva as entradas A1e saídas para o intervaloA2:A5

[C1]=vbLf:For i=1To 4:Cells(i+1,1)=[" /"&Rept("-",A1-2)&"\"&C1&"/"&Rept("_",A1)&"\"&C1&Rept("|"&Rept(" ",A1)&"|"&C1,A1/2)&"|"&Rept("_",A1)&"|"]:Cells(i+1,1).Font.Color=Array(32768,&HFF00FF,rgbBlue,65535)(i-1):Next:Cells.Font.Name="Courier New"

Resultado

Resultado


2

Japt , 79 76 74 73 72 bytes

3#²¤r1'f ò3 w £Ol"%c /{ç- ¤}\\
/{ç'_}\\
{/2-½ ç"|{ç}|
"}|{ç'_}|"Xi`¬l:#

Experimente (abra o console do navegador antes de clicar em "Executar").

Agradeço à ETH por me ajudar a testar isso ontem à noite enquanto estava trabalhando no meu telefone.


Explicação

Entrada implícita do número inteiro U

3#²¤r1'f ò3 w

Primeiro, construímos uma matriz de cores hexadecimais de 3 dígitos para mapear. O código de código de ²178 é o que 3#²nos dá 3178. Nós o convertemos em uma string de base 2 por ¤e depois substituímos todas as ocorrências de 1por f. ò3divide a string em uma matriz de strings de comprimento 3 e wreverte essa matriz.
(Eu preciso descobrir uma maneira de encurtar isso, de alguma forma.)

£Ol

Mapeamos a matriz usando £- Xsendo o elemento atual - e os Ollogs para o console. Passaremos 2 strings para isso, um contendo a casa e outro contendo o CSS.

Xi`¬l:#

A segunda string é construída usando ipara preceder Xcom a string compactada color:#.

"%c /{ç- ¤}\\

O %ccomando diz ao console para usar a segunda string como CSS. A linha superior da casa é criada repetindo ( ç) os tempos dos -caracteres Ue, em seguida, cortando-os do segundo elemento (indexado 0) com ¤. Os chavetas agem como um atalho das sortes para concatenação de strings.

/{ç'_}\\

A segunda linha é construída de maneira semelhante, desta vez repetindo os tempos dos _caracteres U.

{/2-½ çRi|²iUç 1}

O corpo da casa é criado primeiro repetindo o |caractere duas vezes com ²e, em seguida, inserindo um espaço repetido Uvezes nessa sequência no índice 1. A sequência resultante é então anexada a uma nova linha ( R) e a sequência é repetida várias U/2-0.5vezes.

|{ç'_}|"

Finalmente, a última linha é construída da mesma maneira que a segunda.


1

Python 2 , 120 bytes

n=input()
for i in'2543':s='_'*n;print'[1;3'+i+('m /'+'-'*(n-2)+'\ \n/%s\\\n'%s+(-~n/2-1)*('|'+' '*n+'|\n')+'|%s|\n'%s)

Experimente online! (mostra caracteres de escape em vez de cores reais, testados no terminal local)


Eu acho que suas casas são muito altas para entradas como n=2.
Jonathan Frech 21/09

@JonathanFrech sim eu vou corrigir ... abordagem teto errado aparentemente EDIT: fixo
Erik o Outgolfer

A pergunta diz para use the closest available, embora você pareça usar as cores normais em vez das cores brilhantes. As cores brilhantes - eu acho - estariam, no entanto, mais próximas das cores desejadas.
Jonathan Frech

@ JonathanFrech Hmm, o seu parece estar usando as cores normais também, mas sim as mais brilhantes estão mais próximas.
Erik the Outgolfer

1
@ElPedro Anyways sua acabou por melhor que o meu: p
Erik o Outgolfer

1

Yabasic , 220 bytes

Uma função anônima que recebe a entrada como um número inteiro ne gera 4 casas coloridas para o terminal.

A falta de uma função de repetição ou substituição de string dedicada no yabsic realmente prejudica essa resposta.

Clear Screen
Input""n
b$="__"
c$="|  "
For i=1To n-2
a$=a$+"-"
b$=b$+"_"
c$=c$+" "
Next
c$=c$+"|\n"
For i=1To n-4
d$=d$+c$
Next
For i=0To 3
?Color(Mid$("gremagbluyel",1+3*i,3))" /"+a$+"\\\n/"+b$+"\\\n"+d$+"|"+b$+"|"
Next

Esta versão requer o modo gráfico e, portanto, não funciona no TIO.

Resultado

O valor de entrada para o abaixo é n=7.

Resultado


1

SmileBASIC, 115 bytes

INPUT N
H.H 6H 4H 2DEF H C
COLOR C+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

Outro que também tem 115 bytes:

INPUT N
FOR J=0TO 3COLOR!!J*8-J*2+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

Os códigos de cores necessários (em RGBI de 4 bits) são 5, 11, 9, 7. Isso é gerado usando !!J*8-J*2+5Se J não for 0, este é 13-J*2(fornecendo 11,9,7) e, se for, o resultado será apenas 5.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.