Cajitas en la ladera


13

Hay una canción satírica llamada Little Boxes , originalmente de Malvina Reynolds, sobre la expansión suburbana que tiene letras de la siguiente manera:

Pequeñas cajas en la ladera,
Pequeñas cajas hechas de ticky-hortera,
Pequeñas cajas en la ladera,
Pequeñas cajas de todos modos.
Hay uno verde y uno rosa
Y uno azul y uno amarillo,
Y todos están hechos de pegajoso
Y todos se ven iguales.

Su trabajo aquí es, dada una entrada entera n>1que representa el tamaño de la casa, generar las cuatro "cajas pequeñas" con los siguientes colores (en notación 0xRRGGBB):

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

Si su consola particular no tiene estos colores exactos, puede usar el más cercano disponible (por ejemplo, códigos de escape ANSI).

Las casas están construidas n _representando el piso y la línea del techo. Están rodeados de personajes n/2(redondeados) |que representan las paredes. Los techos son siempre 2altos y son dos /en el borde izquierdo, dos \en el borde derecho y n-2 -representan el pico del techo. A medida que las casas se hacen más grandes, el tamaño comparativo del techo se hace más pequeño; Esto es lo que se pretende.

Aquí hay una casa de tamaño 2:

 /\
/__\
|__|

Aquí está el tamaño 3:

 /-\
/___\
|   |
|___|

Aquí está el tamaño 7:

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

Por lo tanto, dada una entrada de 7, salida cuatro casas de tamaño 7como se describe anteriormente, con la primera en verde, la segunda en rosa (magenta), la tercera en azul y la cuarta en amarillo. La salida de los colores en ese orden es importante.

Imagen de ejemplo de tamaño 3:

ingrese la descripción de la imagen aquí

Reglas

  • Las casas pueden ser horizontales o verticales siempre que haya una separación clara entre ellas.
  • Las nuevas líneas iniciales / finales u otros espacios en blanco son opcionales, siempre que las casas se alineen adecuadamente.
  • Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
  • La salida puede ser a la consola, guardada como una imagen, etc.
  • Las lagunas estándar están prohibidas.
  • Este es el por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).

Respuestas:


5

Pitón 2 , 123 121 119 111 109 108 bytes

  • Ahorró dos bytes gracias a caird coinheringaahing ; utilizando el carácter ASCII real no imprimible en lugar de escapar de él ( \33)
  • Podría (y lo hizo) guardar un byte escribiendo un programa completo usando en input()lugar de definir una función
  • Guardado siete bytes gracias a ElPedro ; usando el hecho de que str(90+n)con 0<=n<=9es"9%s"%n
  • Salvado dos tres bytes utilizando el formato de cadena en lugar de la concatenación de cadena

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

Pruébalo en línea!

Utiliza códigos de escape ANSI para colorear las casas.



1
112 haciendo un bucle "2543" y usando el formato de cadena - ¡ Pruébelo en línea!
ElPedro

2
@ElPedro Gracias. No se me ocurrió eso 90y 2,5,4,3resumido es efectivamente concatenación.
Jonathan Frech

4

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

Guardado 8 bytes gracias a @Shaggy
Guardado 1 byte gracias 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))

Manifestación

Asegúrese de abrir la consola de su navegador para obtener la salida en color.


Funciona bien para mí como un fragmento, con la consola de mi navegador abierta. Ahorre 8 bytes utilizando los códigos hexadecimales de 3 dígitos: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@ Shaggy Gracias por las sugerencias!
Arnauld

¿Son 0necesarios los principales ?
Jonathan Frech

@JonathanFrech Sí. Sin los ceros iniciales, eso no sería un #RGBcódigo de color CSS válido .
Arnauld

Creo que la altura es incorrecta en las casas más anchas.
Neil

3

Excel VBA, 243 bytes

Función de ventana inmediata anónima VBE que toma entradas A1y salidas al rangoA2: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"

Salida

Salida


2

Japt , 79 76 74 73 72 bytes

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

Pruébelo (abra la consola de su navegador antes de presionar "Ejecutar").

Gracias a ETH por ayudarme a probar esto anoche mientras estaba trabajando en mi teléfono.


Explicación

Entrada implícita de entero U

3#²¤r1'f ò3 w

Primero construimos una matriz de colores hexadecimales de 3 dígitos para mapear. El código de char de ²178 es el que 3#²nos da 3178. Lo convertimos en una cadena base-2 con ¤y luego reemplazamos todas las apariciones de 1con f. ò3divide la cadena en una matriz de cadenas de longitud 3 e winvierte esa matriz.
(Necesito encontrar una manera de acortar eso, de alguna manera).

£Ol

Mapeamos sobre la matriz usando £, Xsiendo el elemento actual, y Olregistramos en la consola. Vamos a pasar 2 cadenas a eso, una que contiene la casa y otra que contiene el CSS.

Xi`¬l:#

La segunda cadena se construye utilizando ipara anteponer Xcon la cadena comprimida color:#.

"%c /{ç- ¤}\\

El %cle dice a la consola que use la segunda cadena como CSS. La línea superior de la casa se construye repitiendo ( ç) los tiempos de los -caracteres Uy luego dividiéndolos del segundo elemento (indexado en 0) con ¤. Las llaves actúan como un atajo, más o menos, para la concatenación de cadenas.

/{ç'_}\\

La segunda línea está construida de manera similar, esta vez repitiendo los tiempos de los _personajes U.

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

El cuerpo de la casa se construye repitiendo primero el |carácter dos veces ²y luego insertando un espacio repetido Uen esa cadena en el índice 1. La cadena resultante se antepone a una nueva línea ( R) y esa cadena se repite U/2-0.5veces.

|{ç'_}|"

Finalmente, la última línea se construye de la misma manera que la 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)

Pruébalo en línea! (muestra caracteres de escape en lugar de colores reales, probado en la terminal local)


Creo que sus casas son demasiado altas para insumos como n=2.
Jonathan Frech

@JonathanFrech sí lo arreglaré ... enfoque de techo equivocado aparentemente EDITAR: arreglado
Erik the Outgolfer

La pregunta dice que use the closest available, aunque pareces usar los colores normales en lugar de los colores brillantes. Sin embargo, los colores brillantes, creo, estarían más cerca de los colores deseados.
Jonathan Frech

@JonathanFrech Hmm, el tuyo parece estar usando los colores normales también, pero sí, los brillantes están más cerca.
Erik the Outgolfer

1
@ElPedro De todos modos, el suyo ha resultado mejor que el mío: p
Erik the Outgolfer

1

Yabasic , 220 bytes

Una función anónima que toma la entrada como un entero, n y genera 4 hogares de colores en la terminal.

La falta de una función dedicada de repetición o reemplazo de cadenas en yabsic realmente perjudica esta respuesta.

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 versión requiere modo gráfico y, por lo tanto, no funciona en TIO.

Salida

El valor de entrada para el siguiente es n=7.

Salida


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

Otro que también tiene 115 bytes:

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

Los códigos de colores que necesito (en RGBI de 4 bits) son 5, 11, 9, 7. Esto se genera usando !!J*8-J*2+5Si J no es 0, esto es 13-J*2(dando 11,9,7), y si es así, el resultado es solo 5.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.