Kleine Kisten am Hang


13

Es gibt ein satirisches Lied namens Little Boxes , ursprünglich von Malvina Reynolds, über die Ausbreitung der Vorstädte, das die folgenden Texte enthält:

Kleine Kisten am Hang,
Kleine Kisten aus ticky-tacky,
Kleine Kisten am Hang,
Kleine Kisten trotzdem .
Es gibt eine grüne und eine rosa
und eine blaue und eine gelbe,
und sie sind alle aus ticky-tacky
und sie sehen alle gleich aus.

Ihre Aufgabe hier ist es, bei einer Ganzzahleingabe n>1, die die Größe des Hauses darstellt, die vier "Kästchen" in den folgenden Farben (in der Notation 0xRRGGBB) auszugeben:

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

Wenn Ihre Konsole nicht genau diese Farben aufweist, können Sie die nächstmöglichen verwenden (z. B. ANSI-Escape-Codes).

Die Häuser sind so konstruiert, dass n _sie den Boden und die Dachlinie darstellen. Sie sind von n/2(aufgerundeten) |Zeichen umgeben, die die Wände darstellen. Die Dächer sind immer 2hoch und sind zwei /am linken Rand, zwei \am rechten Rand und n-2 -repräsentieren die Dachspitze. Je größer die Häuser werden, desto kleiner wird das Dach. das ist beabsichtigt.

Hier ist ein Haus der Größe 2:

 /\
/__\
|__|

Hier ist Größe 3:

 /-\
/___\
|   |
|___|

Hier ist Größe 7:

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

Bei einer Eingabe von also 7vier Häusern der 7oben beschriebenen Größe , wobei das erste in Grün, das zweite in Rosa (Magenta), das dritte in Blau und das vierte in Gelb ist. Die Ausgabe der Farben in dieser Reihenfolge ist wichtig.

Beispielbild der Größe 3:

Bildbeschreibung hier eingeben

Regeln

  • Die Häuser können horizontal oder vertikal sein, solange eine klare Trennung zwischen ihnen besteht.
  • Führende / nachfolgende Zeilenumbrüche oder andere Leerzeichen sind optional, sofern die Häuser entsprechend ausgerichtet sind.
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Die Ausgabe kann auf der Konsole erfolgen, als Bild usw. gespeichert werden.
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.

Antworten:


5

Python 2 , 123 121 119 111 109 108 Bytes

  • Zwei Bytes dank Caird Coinheringaahing gespart ; Verwenden des tatsächlichen nicht druckbaren ASCII-Zeichens, anstatt es zu maskieren ( \33)
  • Konnte (und tat) ein Byte speichern, indem ein gesamtes Programm mit input()anstatt einer Funktion definiert wurde
  • Dank ElPedro sieben Bytes gespart ; mit der Tatsache, dass str(90+n)mit 0<=n<=9ist"9%s"%n
  • Es wurden zwei bis drei Bytes mithilfe der Zeichenfolgenformatierung anstelle der Zeichenfolgenverkettung gespeichert

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

Probieren Sie es online!

Verwendet ANSI-Escape-Codes zum Färben der Häuser.



1
112 durch Schleifen von "2543" und Verwenden der Zeichenfolgenformatierung - Probieren Sie es online aus!
ElPedro

2
@ ElPedro Danke. Mir ist das nicht eingefallen 90und 2,5,4,3zusammenfassend ist das effektiv Verkettung.
Jonathan Frech

4

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

8 Byte dank @Shaggy
gespeichert 1 Byte dank @Neil gespeichert

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

Stellen Sie sicher, dass Sie die Konsole Ihres Browsers öffnen, um die farbige Ausgabe zu erhalten.


Funktioniert gut für mich als Snippet, wenn die Konsole meines Browsers geöffnet ist. Speichern Sie 8 Bytes mit den dreistelligen Hex-Codes: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@ Shaggy Danke für die Vorschläge!
Arnauld

Sind die Führenden 0notwendig?
Jonathan Frech

@ JonathanFrech Ja. Ohne die führenden Nullen wären das keine gültigen #RGBCSS-Farbcodes.
Arnauld

Ich denke, dass die Höhe bei den breiteren Häusern falsch ist.
Neil

3

Excel VBA, 243 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben von annimmt A1 und Ausgaben in den Bereich nimmtA2: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"

Ausgabe

Ausgabe


2

Japt , 79 76 74 73 72 Bytes

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

Versuch es (Öffnen Sie die Konsole Ihres Browsers, bevor Sie auf "Ausführen" klicken).

Dank an die ETH, die mir geholfen hat, diese letzte Nacht zu testen, während ich an meinem Telefon gearbeitet habe.


Erläuterung

Implizite Eingabe einer Ganzzahl U

3#²¤r1'f ò3 w

Zuerst erstellen wir ein Array von 3-stelligen Hex-Farben, über die eine Zuordnung erfolgen soll. Der Zeichencode von ²ist 178, also erhalten 3#²wir 3178. Wir konvertieren das in eine Base-2-Zeichenfolge mit ¤und ersetzen dann alle Vorkommen von 1mit f. ò3Teilt die Zeichenfolge in ein Array von Zeichenfolgen der Länge 3 und wkehrt dieses Array um.
(Ich muss irgendwie einen Weg finden, das zu verkürzen.)

£Ol

Wir ordnen das Array £mit Xdem aktuellen Element zu und Olprotokollieren es in der Konsole. Wir werden 2 Zeichenketten übergeben, eine mit dem Haus und eine mit dem CSS.

Xi`¬l:#

Die zweite Zeichenfolge wird erstellt, indem die komprimierte Zeichenfolge ivorangestellt wird .Xcolor:#

"%c /{ç- ¤}\\

Das %cweist die Konsole an, den zweiten String als CSS zu verwenden. Die oberste Zeile des Hauses wird durch Wiederholen ( ç) der -Zeichenzeiten Uund anschließendes Schneiden des zweiten Elements (0-indiziert) mit erstellt ¤. Die geschweiften Klammern fungieren als Abkürzung für die Verkettung von Zeichenfolgen.

/{ç'_}\\

Die zweite Zeile wird auf ähnliche Art und Weise, dieses Mal Wiederholen der eingebauten Zeichenzeiten._U

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

Der Körper des Hauses wird aufgebaut, indem zuerst das |Zeichen zweimal mit ²und dann ein Leerzeichen wiederholt Uin diese Zeichenfolge bei Index 1 eingefügt wird. Die resultierende Zeichenfolge wird dann einer Newline ( R) vorangestellt und diese Zeichenfolge wird mehrmals wiederholt U/2-0.5.

|{ç'_}|"

Schließlich wird die letzte Zeile genauso wie die zweite aufgebaut.


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)

Probieren Sie es online! (zeigt Escape-Zeichen anstelle der tatsächlichen Farben, getestet am lokalen Terminal)


Ich denke, deine Häuser sind zu hoch für Inputs wie n=2.
Jonathan Frech

@JonathanFrech yep Ich werde reparieren ... falsche Deckenannäherung anscheinend BEARBEITEN: behoben
Erik der Outgolfer

Die Frage sagt zu use the closest available, obwohl Sie scheinen, die normalen Farben anstelle der hellen Farben zu verwenden. Die hellen Farben - denke ich - wären jedoch näher an den gewünschten Farben.
Jonathan Frech

@ JonathanFrech Hmm, deine scheint auch die normalen Farben zu verwenden, aber ja, die hellen sind näher.
Erik der Outgolfer

1
@ElPedro Wie auch immer, es ist besser geworden als meins: p
Erik the Outgolfer

1

Yabasic , 220 Bytes

Eine anonyme Funktion, die Eingaben als Ganzzahl annimmt nund 4 farbige Häuser an das Terminal ausgibt.

Das Fehlen einer speziellen Funktion zum Wiederholen oder Ersetzen von Zeichenfolgen in Yabsic schadet dieser Reaktion.

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

Diese Version erfordert Grafikmodus und funktioniert daher nicht mit TIO.

Ausgabe

Der Eingabewert für das Folgende ist n=7.

Ausgabe


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

Ein weiterer, der auch 115 Bytes ist:

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

Die Farbcodes, die ich benötige (in 4-Bit-RGBI), sind 5, 11, 9, 7. Dies wird erzeugt mit !!J*8-J*2+5Wenn J nicht 0 ist, ist dies 13-J*2(ergibt 11,9,7), und wenn dies der Fall ist, ist das Ergebnis nur 5.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.