Petites boîtes sur la colline


13

Il y a une chanson satirique appelée Little Boxes , à l'origine par Malvina Reynolds, sur l'étalement suburbain qui a des paroles comme suit:

Des petites boîtes à flanc de coteau, Des
petites boîtes à poils collants, Des
petites boîtes à flanc de coteau, Des
petites boîtes tout de même.
Il y en a un vert et un rose
Et un bleu et un jaune,
Et ils sont tous faits de collant collant
Et ils ont tous la même apparence.

Votre travail ici est, étant donné une entrée entière n>1qui représente la taille de la maison, de sortir les quatre "petites boîtes" en utilisant les couleurs suivantes (en notation 0xRRGGBB):

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

Si votre console particulière n'a pas ces couleurs exactes, vous pouvez utiliser les plus proches disponibles (par exemple, les codes d'échappement ANSI).

Les maisons sont construites avec n _représentant le sol et la ligne de toit. Ils sont entourés de personnages n/2(arrondis) |représentant les murs. Les toits sont toujours 2hauts et sont deux /sur le bord gauche, deux \sur le bord droit et n-2 -représentant le sommet du toit. À mesure que les maisons s'agrandissent, la taille comparative du toit diminue; c'est prévu.

Voici une maison de taille 2:

 /\
/__\
|__|

Voici la taille 3:

 /-\
/___\
|   |
|___|

Voici la taille 7:

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

Ainsi, étant donné une entrée de 7, sortie quatre maisons de taille 7comme décrit ci-dessus, avec la première en vert, la seconde en rose (magenta), la troisième en bleu et la quatrième en jaune. La sortie des couleurs dans cet ordre est importante.

Exemple d'image de taille 3:

entrez la description de l'image ici

Règles

  • Les maisons peuvent être horizontales ou verticales tant qu'elles sont clairement séparées.
  • Les sauts de ligne de début / fin ou d'autres espaces blancs sont facultatifs, à condition que les maisons s'alignent de manière appropriée.
  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • La sortie peut être vers la console, enregistrée en tant qu'image, etc.
  • Les failles standard sont interdites.
  • Il s'agit de donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.

Réponses:


5

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

8 octets enregistrés grâce à @Shaggy
1 octet enregistré grâce à @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))

Démo

Assurez-vous d'ouvrir la console de votre navigateur pour obtenir la sortie en couleur.


Fonctionne très bien pour moi en tant qu'extrait, avec la console de mon navigateur ouverte. Économisez 8 octets en utilisant les codes hexadécimaux à 3 chiffres: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@Shaggy Merci pour les suggestions!
Arnauld

Les principaux 0sont-ils nécessaires?
Jonathan Frech

@JonathanFrech Oui. Sans les zéros non significatifs, ce ne serait pas #RGBdes codes de couleur CSS valides .
Arnauld

Je pense que la hauteur est mauvaise sur les maisons plus larges.
Neil

5

Python 2 , 123 121 119 119 111 109 108 octets

  • Enregistré deux octets grâce à caird coinheringaahing ; en utilisant le caractère ASCII non imprimable réel au lieu de l'échapper ( \33)
  • Pourrait (et a fait) enregistrer un octet en écrivant un programme entier en utilisant input()au lieu de définir une fonction
  • Enregistré sept octets grâce à ElPedro ; en utilisant le fait que str(90+n)avec 0<=n<=9est"9%s"%n
  • Enregistré deux trois octets en utilisant le formatage de chaîne plutôt que la concaténation de chaîne

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

Essayez-le en ligne!

Utilise les codes d'échappement ANSI pour colorer les maisons.



1
112 en bouclant "2543" et en utilisant le formatage des chaînes - Essayez-le en ligne!
ElPedro

2
@ElPedro Merci. Cela ne m'est pas venu à l'esprit 90et 2,5,4,3résumée est effectivement une concaténation.
Jonathan Frech

3

Excel VBA, 243 octets

Fonction de fenêtre immédiate VBE anonyme qui prend des entrées A1et des sorties dans la plageA2: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"

Production

Production


2

Japt , 79 76 74 73 72 octets

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

Essayez-le (ouvrez la console de votre navigateur avant de cliquer sur "Exécuter").

Merci à ETH de m'avoir aidé à tester cela hier soir alors que je travaillais sur mon téléphone.


Explication

Saisie implicite d'entier U

3#²¤r1'f ò3 w

D'abord, nous construisons un tableau de couleurs hexadécimales à 3 chiffres pour les cartographier. Le code de caractères de ²178 3#²nous donne donc 3178. Nous convertissons cela en une chaîne de base 2 avec ¤puis remplaçons toutes les occurrences de 1avec f. ò3divise la chaîne en un tableau de chaînes de longueur 3 et winverse ce tableau.
(Je dois trouver un moyen de raccourcir cela, en quelque sorte.)

£Ol

Nous mappons le tableau en utilisant £- avec Xl'élément courant - et les Oljournaux sur la console. Nous allons passer 2 chaînes à cela, une contenant la maison et une contenant le CSS.

Xi`¬l:#

La deuxième chaîne est construite en utilisant ipour ajouter Xla chaîne compressée color:#.

"%c /{ç- ¤}\\

Le %cindique à la console d'utiliser la deuxième chaîne comme CSS. La ligne supérieure de la maison est construite en répétant ( ç) les temps des -caractères U, puis en les découpant à partir du deuxième élément (indexé 0) avec ¤. Les accolades agissent comme un raccourci, en quelque sorte, pour la concaténation de chaînes.

/{ç'_}\\

La deuxième ligne est construite de manière similaire, cette fois en répétant les temps des _caractères U.

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

Le corps de la maison est construit en répétant d'abord le |caractère deux fois avec ²puis en insérant un espace répété Ufois dans cette chaîne à l'index 1. La chaîne résultante est ensuite ajoutée à une nouvelle ligne ( R) et cette chaîne est répétée plusieurs U/2-0.5fois.

|{ç'_}|"

Enfin, la dernière ligne est construite de la même manière que la seconde.


1

Python 2 , 120 octets

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)

Essayez-le en ligne! (affiche les caractères d'échappement au lieu des couleurs réelles, testé sur le terminal local)


Je pense que vos maisons sont trop hautes pour des entrées comme n=2.
Jonathan Frech

@JonathanFrech yep je vais corriger ... mauvaise approche du plafond apparemment EDIT: corrigé
Erik the Outgolfer

La question dit use the closest available, même si vous semblez utiliser les couleurs normales au lieu des couleurs vives. Les couleurs vives - je pense - seraient cependant plus proches des couleurs souhaitées.
Jonathan Frech

@JonathanFrech Hmm, la tienne semble aussi utiliser les couleurs normales, mais oui les plus brillantes sont plus proches.
Erik the Outgolfer

1
@ElPedro Quoi qu'il en soit, le sien s'est avéré meilleur que le mien: p
Erik the Outgolfer

1

Yabasic , 220 octets

Une fonction anonyme qui prend l'entrée sous forme d'entier net renvoie 4 foyers colorés au terminal.

L'absence d'une fonction de répétition ou de remplacement de chaîne dédiée dans yabsic nuit vraiment à cette réponse.

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

Cette version nécessite un mode graphique et ne fonctionne donc pas sur TIO.

Production

La valeur d'entrée pour ce qui suit est n=7.

Production


1

SmileBASIC, 115 octets

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

Un autre qui fait aussi 115 octets:

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

Les codes de couleurs dont j'ai besoin (en RGBI 4 bits) sont 5, 11, 9, 7. Ceci est généré en utilisant !!J*8-J*2+5Si J n'est pas 0, c'est 13-J*2(donnant 11,9,7), et si c'est le cas, le résultat est seulement 5.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.