Scatolette sul fianco della collina


13

C'è una canzone satirica chiamata Little Boxes , originariamente di Malvina Reynolds, sull'espansione suburbana che ha i testi come segue:

Piccole scatole sulla collina,
piccole scatole di ticky appiccicoso,
scatole piccoli sulla collina,
piccole scatole tutte uguali.
Ce n'è uno verde e uno rosa
e uno blu e uno giallo,
e sono tutti fatti di pacchiani
e sembrano tutti uguali.

Il tuo lavoro qui è, dato un input intero n>1che rappresenta la dimensione della casa, emettere le quattro "caselle" usando i seguenti colori (in notazione 0xRRGGBB):

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

Se la tua console particolare non ha questi colori esatti, puoi utilizzare il più vicino disponibile (ad es. Codici di escape ANSI).

Le case sono costruite con n _rappresentando il pavimento e la linea del tetto. Sono circondati da personaggi n/2(arrotondati) |che rappresentano le pareti. I tetti sono sempre 2alti e sono due /sul bordo sinistro, due \sul bordo destro e n-2 -rappresentano il picco del tetto. Man mano che le case diventano più grandi, le dimensioni comparative del tetto diventano più piccole; questo è previsto.

Ecco una casa di dimensioni 2:

 /\
/__\
|__|

Ecco le dimensioni 3:

 /-\
/___\
|   |
|___|

Ecco le dimensioni 7:

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

Così dato un input di 7, output quattro case di dimensioni 7come descritto sopra, con il primo in verde, il secondo in rosa (magenta), il terzo in blu e il quarto in giallo. L'output dei colori in questo ordine è importante.

Foto di esempio di dimensioni 3:

inserisci qui la descrizione dell'immagine

Regole

  • Le case possono essere orizzontali o verticali purché vi sia una netta separazione tra di loro.
  • Le linee guida iniziali / finali o altri spazi bianchi sono opzionali, a condizione che le case si allineino adeguatamente.
  • È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
  • L'output può essere sulla console, salvato come immagine, ecc.
  • Sono vietate le scappatoie standard .
  • Si tratta di quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).

Risposte:


5

Python 2 , 123 121 119 111 109 108 byte

  • Salvati due byte grazie a caher coinheringaahing ; usando l'attuale carattere ASCII non stampabile invece di sfuggirlo ( \33)
  • Potrebbe (e ha fatto) salvare un byte scrivendo un intero programma usando input()invece di definire una funzione
  • Salvati sette byte grazie a ElPedro ; usando il fatto che str(90+n)con 0<=n<=9is"9%s"%n
  • Salvati due tre byte utilizzando la formattazione della stringa anziché la concatenazione della stringa

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

Provalo online!

Utilizza i codici di escape ANSI per colorare le case.



1
112 eseguendo il ciclo "2543" e utilizzando la formattazione di stringa - Provalo online!
ElPedro,

2
@ElPedro Grazie. Non mi è venuto in mente che 90e 2,5,4,3riassunto è effettivamente concatenazione.
Jonathan Frech,

4

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

Salvato 8 byte grazie a @Shaggy
Salvato 1 byte grazie 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))

dimostrazione

Assicurati di aprire la console del browser per ottenere l'output colorato.


Funziona bene per me come Snippet, con la console del mio browser aperta. Salva 8 byte utilizzando i codici esadecimali a 3 cifre: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@Shaggy Grazie per i suggerimenti!
Arnauld,

I leader sono 0necessari?
Jonathan Frech,

@JonathanFrech Sì. Senza gli zeri iniziali, questi non sarebbero #RGBcodici colore CSS validi .
Arnauld,

Penso che l'altezza sia sbagliata nelle case più larghe.
Neil,

3

Excel VBA, 243 byte

Funzione finestra immediata VBE immediata che accetta input A1e output nell'intervalloA2: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"

Produzione

Produzione


2

Japt , 79 76 74 73 72 byte

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

Provalo (Apri la console del browser prima di premere "Esegui").

Grazie a ETH per avermi aiutato a testarlo ieri sera mentre stavo lavorando sul mio telefono.


Spiegazione

Input implicito di numero intero U

3#²¤r1'f ò3 w

Per prima cosa costruiamo una matrice di colori esadecimali a 3 cifre da mappare. Il charcode di ²è 178 quindi 3#²ci dà 3178. Lo convertiamo in una stringa base-2 con ¤e quindi sostituiamo tutte le occorrenze di 1con f. ò3divide la stringa in una matrice di stringhe di lunghezza 3 e winverte quella matrice.
(Devo trovare un modo per accorciarlo, in qualche modo.)

£Ol

Mappiamo sull'array usando £- con Xl'elemento corrente - e Olaccediamo alla console. Passeremo 2 stringhe a quella, una contenente la casa e una contenente il CSS.

Xi`¬l:#

La seconda stringa viene costruita utilizzando iper anteporre Xalla stringa compressa color:#.

"%c /{ç- ¤}\\

Il %cdice alla console di usare la seconda stringa come CSS. La linea superiore della casa viene costruita ripetendo ( ç) i tempi del -personaggio Ue quindi tagliandola dal secondo elemento (indicizzato 0) con ¤. Le parentesi graffe fungono da scorciatoia, per specie, per la concatenazione di stringhe.

/{ç'_}\\

La seconda riga è costruita in modo simile, questa volta ripetendo i tempi dei _personaggi U.

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

Il corpo della casa si costruisce prima ripetendo il |carattere due volte con ²e quindi inserendo uno spazio ripetuto Uvolte in quella stringa all'indice 1. La stringa risultante viene quindi anteposta a una nuova riga ( R) e quella stringa viene ripetuta U/2-0.5volte.

|{ç'_}|"

Infine, l'ultima riga è costruita allo stesso modo della seconda.


1

Python 2 , 120 byte

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)

Provalo online! (mostra i caratteri di escape anziché i colori effettivi, testati sul terminale locale)


Penso che le tue case siano troppo alte per input come n=2.
Jonathan Frech,

@JonathanFrech sì aggiusterò ... approccio del soffitto sbagliato apparentemente EDIT: risolto
Erik the Outgolfer

La domanda dice use the closest available: sebbene sembri usare i colori normali invece dei colori vivaci. I colori vivaci - penso - sarebbero comunque più vicini ai colori desiderati.
Jonathan Frech,

@JonathanFrech Hmm, il tuo sembra usare anche i colori normali, ma sì, quelli luminosi sono più vicini.
Erik the Outgolfer,

1
@ElPedro Comunque la sua è andata meglio della mia: p
Erik the Outgolfer

1

Yabasic , 220 byte

Una funzione anonima che accetta input come numero intero, n e trasmette al terminale 4 case colorate.

La mancanza di una funzione di ripetizione o sostituzione di stringhe dedicata in yabsic danneggia davvero questa risposta.

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

Questa versione richiede la modalità grafica e quindi non funziona su TIO.

Produzione

Il valore di input per il seguito è n=7.

Produzione


1

SmileBASIC, 115 byte

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

Un altro che è anche 115 byte:

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

I codici colori di cui ho bisogno (in RGBI a 4 bit) sono 5, 11, 9, 7. Questo è generato usando !!J*8-J*2+5Se J non è 0, questo è 13-J*2(dando 11,9,7), e se lo è, il risultato è solo 5.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.