在山坡上的小盒子


13

马尔维娜·雷诺兹(Malvina Reynolds)最初写了一首讽刺歌曲,名为Little Boxes,讲述郊区蔓延,歌词如下:

在山坡上的
小盒子,由发粘的小盒子做成的,
在山坡上的
小盒子,同样的小盒子。
有一个绿色的和一个粉红色的一个
,一个蓝色的和一个黄色的,
它们都是由粘性的制成的,
它们看起来都一样。

在给定n>1代表房屋大小的整数输入的情况下,您的工作是使用以下颜色(以0xRRGGBB表示)输出四个“小盒子”:

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

如果您的特定控制台没有这些确切的颜色,则可以使用最接近的可用颜色(例如ANSI转义码)。

这些房屋的建造n _代表着地板和屋顶。它们被代表墙壁的n/2(向上)|字符包围。屋顶总是2很高的,/在左边缘是两个,在右边缘是两个\n-2 -代表了屋顶峰。随着房屋的变大,屋顶的相对大小也变小。这是有意的。

这是一间大小的房子2

 /\
/__\
|__|

这是尺寸3

 /-\
/___\
|   |
|___|

这是尺寸7

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

因此,给定输入7,输出7如上所述大小的四个房屋,第一个房屋为绿色,第二个房屋为粉红色(洋红色),第三个房屋为蓝色,第四个房屋为黄色。按此顺序输出颜色很重要。

图片大小示例3

在此处输入图片说明

规则

  • 这些房屋可以是水平的也可以是垂直的,只要它们之间有明显的分隔即可。
  • 前导/尾随换行符或其他空格是可选的,前提是房屋要适当对齐。
  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 输出可以保存到控制台,也可以保存为图像等。
  • 禁止出现标准漏洞
  • 这是因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

Answers:


5

的JavaScript(ES6),镀铬/火狐,156个 148 151 150字节

@Shaggy节省了8个字节@Neil
节省了1个字节

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))

演示版

确保打开浏览器的控制台以获取彩色输出。


在打开浏览器控制台的情况下,作为代码段对我来说效果很好。使用3位十六进制代码保存8个字节:tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@Shaggy感谢您的建议!
Arnauld

领导0有必要吗?
乔纳森·弗雷希

@JonathanFrech是的。没有前导零,那将不是有效的#RGBCSS颜色代码。
Arnauld

我认为较宽的房子的高度是错误的。
尼尔

5

Python 2中123 121 119 111 109 108个字节

  • 节省了两个字节,多亏了caird的共同贡献 ; 使用实际的不可打印ASCII字符而不是转义(\33
  • 通过(input()而不是通过定义函数)编写整个程序,可以(并且确实)节省了一个字节
  • 感谢ElPedro节省了七个字节;使用的事实,str(90+n)0<=n<=9"9%s"%n
  • 通过使用字符串格式而不是字符串连接节省了两个三个字节

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

在线尝试!

使用ANSI转义码为房屋着色。



1
通过循环“ 2543”并使用字符串格式设置112-在线尝试!
ElPedro

2
@ElPedro谢谢。并没有发生在我身上902,5,4,3归结为有效的串联。
乔纳森·弗雷希

3

Excel VBA,243字节

匿名VBE立即窗口功能,可从A1范围输入和输出范围A2: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"

输出量

输出量


2

Japt79 76 74 73 72字节

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

尝试一下(在点击“运行”之前,打开浏览器的控制台)。

感谢ETH昨晚在手机上进行测试时帮助我进行了测试。


说明

整数的隐式输入 U

3#²¤r1'f ò3 w

首先,我们构建一个3位数的十六进制颜色数组以进行映射。的中charCode ²为178所以3#²给了我们3178.我们将其转换成一个基2字符串¤,然后替换所有出现的1fò3将字符串拆分为长度为3的字符串数组,然后w反转该数组。
(我需要想办法以某种方式将其缩短。)

£Ol

我们使用£- X作为当前元素- 映射到数组,并Ol记录到控制台。我们将向其传递2个字符串,一个包含房屋,另一个包含CSS。

Xi`¬l:#

第二个字符串使用压缩字符串i开头。Xcolor:#

"%c /{ç- ¤}\\

%c讲述使用第二个字符串作为CSS控制台。通过重复(ç-字符U时间,然后用,从第二个元素(索引为0的索引)中分割出该房子的顶行¤。花括号是字符串连接的一种快捷方式。

/{ç'_}\\

第二行以类似的方式构建,这次重复_字符U时间。

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

首先用重复|两次该字符²,然后U在索引1处的字符串中插入一个重复的空格,以构建房屋的主体。然后将所得的字符串放在换行符(R)之前,并将该字符串重复U/2-0.5一次。

|{ç'_}|"

最后,以与第二行相同的方式构建最后一行。


1

Python 2,120字节

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)

在线尝试!(显示转义字符而不是实际颜色,已在本地终端上测试)


我认为您的房子太高了,无法投入n=2
乔纳森·弗雷希

@JonathanFrech是的,我会修复...错误的天花板方法显然是编辑的:已修复
Outgolfer的Erik

问题是use the closest available,,尽管您似乎使用的是正常颜色而不是鲜艳的颜色。我认为,明亮的颜色会更接近所需的颜色。
乔纳森·弗雷希

@JonathanFrech嗯,您的似乎也使用了正常的颜色,但是是的,明亮的颜色更接近。
Erik the Outgolfer

1
@ElPedro无论如何他的表现都比我好:p
Outgolfer的Erik

1

Yabasic,220字节

匿名函数,将输入作为整数,n并向终端输出4个彩色的宿主。

yabsic中缺少专用的字符串重复或替换功能确实伤害了此响应。

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

此版本需要图形模式,因此不适用于TIO。

输出量

下面的输入值是n=7

输出量


1

SmileBASIC,115字节

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

另一个也是115个字节:

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

我需要的颜色代码(在4位RGBI中)是5、11、9、7 。这是使用!!J*8-J*2+5J 生成的。如果J不为0,则是13-J*2(给出11,9,7),如果是,则结果是只有5

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.