男孩和女孩很高兴在银幕上看到灰色的五十度阴影,我们只想编码而不会被打扰,所以这是挑起大脑的挑战。
你必须:
- 在屏幕上打印五十个正方形,每个正方形填充不同的灰色阴影
- 如果您选择的语言缺乏图像处理功能,则可以输出图像文件
- 正方形必须可见,至少20 x 20像素
- 除非确保每个阴影都是唯一的,否则不能使用随机数。
- 您无法通过任何网络连接到任何服务
- 您无法读取程序中的任何文件。
- 您不能使用所选语言的标准库中的任何库。
这是代码高尔夫球,所以最短的代码获胜。
男孩和女孩很高兴在银幕上看到灰色的五十度阴影,我们只想编码而不会被打扰,所以这是挑起大脑的挑战。
你必须:
这是代码高尔夫球,所以最短的代码获胜。
Answers:
这是另一种Mathematica方法:
ArrayPlot[#+5#2&~Array~{5,10}]
要么
ArrayPlot[5#+#2&~Array~{10,5}]
第一个简单地创建一个数组
{{6, 11, 16, 21, 26, 31, 36, 41, 46, 51},
{7, 12, 17, 22, 27, 32, 37, 42, 47, 52},
{8, 13, 18, 23, 28, 33, 38, 43, 48, 53},
{9, 14, 19, 24, 29, 34, 39, 44, 49, 54},
{10, 15, 20, 25, 30, 35, 40, 45, 50, 55}}
第二个
{{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25},
{26, 27, 28, 29, 30},
{31, 32, 33, 34, 35},
{36, 37, 38, 39, 40},
{41, 42, 43, 44, 45},
{46, 47, 48, 49, 50},
{51, 52, 53, 54, 55}}
然后,将ArrayPlot
它们绘制为网格,并且默认情况下使用灰度显示值。
ArrayPlot
。
ArrayPlot@{Range@50}
,只有20个字节。
由于CJam无法在屏幕上绘制(还?),我编写了一个程序以纯pgm格式输出图像。
将输出保存到名为50.pgm的文件中,然后使用图像查看器/编辑器打开。
"P2"1e3K51_,1>K*$K*~]N*
结果看起来像这样:
说明:
"P2" push "P2" (netpbm magic number)
1e3K push 1000 and K=20 (image size)
51 push 51 (value of white)
_, duplicate 51 and convert to an array [0 1 2 ... 50]
1> remove 0 (slice from 1)
K* repeat the array 20 times
$ sort, to get [(20 1's) (20 2's) ... (20 50's)]
K* repeat the array 20 times
~ dump the elements on the stack
] put everything from the stack in an array
N* join with newlines
No line should be longer than 70 characters.
当前版本(34字节)
GrayLevel[#/50]~Style~50 &~Array~50
早期版本(59字节),感谢MartinBüttner。
Graphics[{GrayLevel[#/50],Cuboid@{#~Mod~9,#/9}}&/@Range@50]
添加了蓝色边框以突出显示正方形的位置。
Graphics[{EdgeForm[Blue], GrayLevel[#/50], Cuboid@{#~Mod~9, #/9}} & /@Range@50]
平方数:
Length[%[[1]]]
50
第一次尝试(72字节)
如果正方形可以重叠。正如扎格布(Zgarb)所指出的,一个广场隐藏另一个的可能性很小。
Graphics@Table[{GrayLevel@k,Cuboid[{0,15}~RandomReal~2]},{k,.4,.89,.01}]
matrix(5,10,range(50)).plot()
看起来像这样:
以前的尝试:首先我做过Matrix([range(50)]).plot()
,然后matrix_plot([range(50)])
。这些看起来像这样:
@flawr用户指出,使用默认设置生成的正方形太小。添加figsize
选项可以解决该问题,但比此答案顶部的5x10版本长6个字符:
matrix_plot([range(50)],figsize=20)
假设它们可以重叠,则可以正常工作。Symbols
需要一个向量来保存每个正方形的大小,并且我通过对所有函数参数重复使用相同的向量来节省空间。最大的正方形始终为1英寸宽。以50:99为整数范围,最小的正方形将为半英寸宽,因此在72 dpi时为36像素。
symbols(x,,,x<-50:99,bg=gray(x/99))
感谢大家的评论和建议,我对R还是很陌生,所以这非常有教育意义。
之前的版本:
symbols(x,sq=x<-50:99,bg=gray(x/99)) #36
x=50:99;symbols(x,sq=x,bg=gray(x/99)) #37
x<-50:99;symbols(x,sq=x,bg=gray(x/99)) #38
x<-1:50;symbols(x,sq=x/x,bg=gray(x/50)) #39
x<-1:50/50;symbols(x,sq=x/x,bg=rgb(x,x,x)) #42
x<-1:50/50;symbols(x,squares=x/x,bg=rgb(x,x,x)) #47
上一张图片:
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
,然后再致电进行测试f(x <- 5, x)
。这按预期工作。一旦您将f
的定义(和rm(x)
)中的参数取反,它就不再起作用。
symbols(x,,,x<-50:99,bg=gray(x/99))
非常简单,只是画图框。
import java.awt.*;void f(){new Frame(){public void paint(Graphics g){for(int i=1;i<51;g.setColor(new Color(328965*i)),g.fillRect(i%8*20,i++/8*20,20,20))setSize(600,600);}}.show();}
带换行符:
import java.awt.*;
void f(){
new Frame(){
public void paint(Graphics g){
for(int i=1;
i<51;
g.setColor(new Color(328965*i)),
g.fillRect(i%8*20,i++/8*20,20,20))
setSize(600,600);
}
}.show();
}
int i;
代替,int i=1
但在最后一次++i
出现时先使用i
代替i++
,这样可以节省2个字节。顺便说一句:我什至不知道您可以在没有 class MyClass ... public static void main(...
!!!的情况下编写Java程序!
FORn=51TO2STEP-1VDU19;-1,n,n,n:RECTANGLEFILL0,0,n*20NEXT
正方形必须至少为 20像素,但没有什么要说它们必须具有相同的大小,因此我想这符合条件。
通过使用更多的低级VDU代码,可以缩短此时间。但是,从这种模式更改为不太有趣的模式不太可能使其缩短。
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
我能做的最好的就是使用ipython程序。启动ipython ipython -pylab
并执行该程序将显示一个图形,其中包含50个正方形的50个灰度阴影:
t=arange(50);c=t/50.;scatter(t%5,t,500,zip(c,c,c),'s')
输出:
这是另一个程序(61字节):
imshow(arange(50).reshape(5,10)*.02,'Greys',None,1,'nearest')
显示以下窗口:
72:原创(借鉴Sphinxxx的回答的巧妙■
用法):
for(i=90;i>40;)document.write('<font color=#'+i+i+i--+' size=7>■')
70:从Ismael Miguel(值得投票)那里偷偷摸摸地偷了一个较短的for循环,并允许浏览器纠正#缺少颜色代码的问题...
for(i=60;--i>9;)document.write('<font color='+i+i+i+' size=7>■')
67个字节(65个字符):交换实体为Unicode字符:
for(i=60;--i>9;)document.write('<font color='+i+i+i+' size=7>■')
i=51
。如果我计算正确,只有49个正方形吗?
for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
或类似。未经测试,但可能有效!
#
字符以得到70字节长的解决方案。
for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')
-但至少在我的浏览器的默认设置(OSX / Chrome)上,此框小于20x20像素仍然存在,因此这些基于■的解决方案值得怀疑。
好的,您将需要一个支持真实色彩的终端仿真器。例如,对于Mac OS,有iTerm2的夜间版本。对于Unix,我相信konsole支持它。这是一个清单,以防万一:https : //gist.github.com/XVilka/8346728#now-supporting-truecolor
用g ++编译(\ e与编译器有关)。
为了使正方形具有足够的面积,您将必须更改终端字体大小。
#include <cstdio>
int main(){for(int i=51;i--;)printf("\e[48;2;%i;%i;%im ",i,i,i);}
使用C库而不是C ++可以剃除某些字符。
这是相同的程序,但是在C语言中,它假定未类型化的函数声明返回int,并且不需要包含某些标准库函数,例如本例中的printf。由@cartographer建议。@ user3601420少了三个字符
main(i){for(i=51;i--;)printf("\e[48;2;%i;%i;%im ",i,i,i);}
编译时带有几个警告(假设main的返回类型为int,并且隐式包括printf的声明)。
int
放到main前面,并使用gcc进行一些警告编译。
i
将main作为第一个参数,则可以从C版本中删除一些字符,例如:main(i){for(i=51;i--;)printf(...
\e
→\33
from turtle import*
shape("square")
bk(500)
ht()
pu()
exec'color((xcor()/2e3+.5,)*3);stamp();fd(21);'*50
样本输出:
好老乌龟。这是我在Python中想到的唯一方法,该方法仅使用标准库即可将图像打印到屏幕上。
方形乌龟的形状恰好是21乘21,这非常方便。可以通过以下方式查看turtle.py
:
"square" : Shape("polygon", ((10,-10), (10,10), (-10,10), (-10,-10)))
如果您有高分辨率的监视器,或者不介意在屏幕外显示几个方块,那么这是93个字节:
from turtle import*
shape("square")
ht()
pu()
exec'color((xcor()/2e3,)*3);stamp();fd(21);'*50
(此演示通过改编此处找到的代码段使用Skulpt。仅包含该代码是为了让您对代码的功能有所了解-我必须修改一些内容才能使其正常工作。)
经过randomra的建议。
1!:2&4'P2 ',":(,*:,],*:#?~)50
该解决方案不显示任何内容,因为J的标准库不包含GUI例程。相反,我生成图像并将其写入标准输出。输出是随机的,确保所有阴影都是不同的。这是一些示例输出,图像转换为png并旋转了90°,以便于观看:
50
使用50 * 50的正方形将标题中的从压入生成的部分可节省1个字节:1!:2&4'P2 50 2500 ',":(,*:#i.)50
。
1!:2&4'P2 ',":(,*:,],*:#i.)50
29个字符输入所有数字!顺便说一句,plot
它不是标准J库的一部分吗?
plot
是可以从程序包管理器中下载的辅助程序包之一。我几乎不会将其视为标准库的一部分。
在即时窗口中:
for i=1 to 9:for j=1 to 9:k=i+j*10:cells(i,j).interior.color=rgb(k,k,k):next:next
在活动表上:
{81阴影等于50的代码}
cells(i,j)
你需要i>0
和j>0
。
For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
image(t(1:50),c=gray.colors(50))
但是,此显示看起来是…meh(图像旋转了90°以更好地适合文本;压缩后的原始方形边长> 20px):
这是一个更好的版本,它在矩阵(50个字符)内以随机顺序绘制正方形:
image(matrix(sample(1:50),10),c=gray.colors(50))
(是的,看似相同颜色的三个相邻的正方形实际上是三种不同的灰色阴影。)
1是的,另一个R答案,甚至不是最短的(现在是R的最短)–道歉。我错过了R中的漂亮渲染。
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35感谢sanchises
imshow(int8(ones(20,1)*(0:.05:51)))
Matlab 36
imshow(uint8(ones(20,1)*(0:.05:51)))
显示用1到50的灰度值填充的50个正方形,以及用0和51的灰度值填充的2个其他矩形:
Matlab,45岁
imshow(uint8(ones(20,1)*floor(1:0.05:50.95)))
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
这将输出平方到HTML,因为它实际上是JavaScript唯一的图形输出方法。感谢edc65削减3个字节。
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
。无法使用
1cm
或1 9mm
会更好,得到更广泛的支持。无需更改字节数。
surf(meshgrid(1:7)),colormap gray
尽管有冗长的命令,结果仍然非常紧凑。如果替换为surf
,它看起来会更好一些,surface
但要花3个字符。
如果您没有注意到第50个灰色方块,那是因为它比其他方块大一点!
ndgrid
!(少2个字节)。而且,每个正方形都是不同的灰色吗?
此答案不再基于IE11。之所以有效,是因为浏览器将不良的颜色代码转换为可用的颜色代码(通过添加#
数字)。
这是代码:
for(i=59;i-->9;)document.write("<hr color="+i+i+i+" size=20 width=20>")
Firefox仍有怪圈。
(小编辑:更改for(i=61;i-->9;)
为,for(i=59;i-->9;)
因为它产生了52个正方形)
旧答案:
这基于我的PHP答案,并使用几乎相同的方法来制作正方形:
for(i=51;i--;)document.write("<hr color=rgb("+[i,i,i]+") size=20 width=20>");
不是最短的答案,但是值得在这里添加。
此解决方案与Chrome(产生多种绿色)和Firefox(结果相同,但是产生圆圈?还是WTH?)不兼容
由于这是代码高尔夫,因此可以使用使用特定版本或特定软件的解决方案。
<hr>
,可能会使它看起来更平滑。没有任何关于颜色会发生什么的线索。无论如何,我的+1让我感到困惑。
这是独特的,因为源代码和输出可以应对挑战:
其中大多数是装饰性的,因此我只计算了前两行,仅靠前两行就可以了。像其他输出一样输出灰度ppm。
for(i=51;i-=1;)document.write('<a style=opacity:'+i/50+'>■</a>')
font:3em a
或font-size:3em
。由于包装盒的大小,我对此不满意。直到您解决。
i--
代替i-=1
。
<b>
标签。除了确保文本为黑色之外,它不会以任何方式更改代码。这不是必需的,但可能是一个好主意。
我已经找到了最短的时间:
for($i=59;$i-->9;)echo"<hr color=$i$i$i size=20 width=20>";
这与我的Javascript答案完全相同(71字节)。
但是,这么多短!
这在Firefox的怪癖:而不是正方形的,让火狐圈!(去疯狂!)
比Othen,所有的浏览器产生正确的颜色(即使缺少#
的color
属性)。
无效的提交和变更日志:
旧答案,有62个字节。
while($i++<51)echo"<hr color=rgb($i,$i,$i) size=20 width=20>";
所有阴影均完美对齐。
该解决方案将不会为Chrome浏览器(将产生多种颜色方块)和Firefox(这使得各界OO是,圈带<hr>
!水平标尺上的Firefox圆!)。
您可以在IE11上对其进行测试,应该可以。
(仅从上方移除)
我注意到了一些可怕的事情:它正在输出#111
而不是#010101
用于某些颜色。
这意味着某些颜色正在重复。
因此,我不得不牺牲一些字节:
<?while(f>$c=dechex(65-$i++))echo"<hr color=#$c$c$c size=20 width=20>";
从亮到暗以完美的顺序输出50个阴影。
由于@ edc65提出的正确观点,我不得不加上width=20
,以生成完美的正方形。
通过替换f!=$c
成f>$c
,再减少一个字节,效果很好。
最终版本,不包含width=20
:
<?while(f!=$c=dechex(65-$i++))echo"<hr color=#$c$c$c size=20>";
这是无效的,因为需要输出平方。
这会输出从浅到深的阴影。
通过切换到while
循环来减少1个字节,如下所示:
<?while($c=dechex(50-$i++))echo"<hr color=#$c$c$c size=20>";
第一个解决方案:
<?for($i=50;$c=dechex($i--);)echo"<hr color=#$c$c$c size=20>";
阴影没有整齐地排列,但是有50种不同的阴影。
没有说明必须订购它们,但是有尺寸要求。
我希望我可以减少更多。
您可以在http://writecodeonline.com/php/上进行测试(单击“显示为HTML”)。
使用动画;)
:after{content:'\25A0';font:9em z;animation:g 8s steps(50)}@keyframes g{to{color:#fff}}
由于Webkit仍需要供应商前缀,因此可运行版本较长。:(
:after{content:'\25A0';font:9em z;-webkit-animation:g 8s steps(50);animation:g 8s steps(50)}@-webkit-keyframes g{to{color:#fff}}@keyframes g{to{color:#fff}}
如果允许使用随机的空<a>
元素,则可以将其减少到仅72个字符:
a{padding:3em;animation:g 8s steps(50)}@keyframes g{to{background:#000}}
看到?CSS是一种合法的编程语言!
我可以使freekvd的答案简短一些。
x=9:59/59;symbols(x,sq=x,bg=gray(x))
(很抱歉在他的解决方案下未发表评论。Stackexchange不允许我发表评论,投票等)。
使用ISO-Latin-1编码:
20’›‡üˆì0{’81e3’6’–10’k0ˆ (note, this is a Line Feed)
’c’§}’H
这是等效于以下内容的二进制文件:
20 setlinewidth 1020 -20 0 { dup 1e3 div setgray 10 moveto 0 10 lineto stroke } for
(这假定您在至少1000点[= 10英寸= 25.4厘米]宽的设备上使用它。)
0f 4e 75 a3 ...
。
只是为了在“系统程序设计简介”一年后启动DrRacket。
编辑:
(require htdp/image)(map(λ(i)(rectangle 50 50'solid(make-color i i i)))(range 50))
2htdp/image
为htdp/image
,将字符串更改"solid"
为符号'solid
。为了节省更多钱,请将更改(range 9 209 4)
为(range 50)
:只需要使灰色阴影区分开,而不容易让人眼分辨!
for/set
以下命令保存一些字符:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
使用LINQPAD
var b=new Bitmap(1000,20);var g=Graphics.FromImage(b);for(int i=0;i<50;i++)g.FillRectangle(new SolidBrush(Color.FromArgb(i*5,i*5,i*5)),new Rectangle(i*20,0,20,20));b.Dump();
展开式:
var b = new Bitmap(1000, 20);
var g = Graphics.FromImage(b);
for (int i = 0; i < 50; i++)
g.FillRectangle(new SolidBrush(Color.FromArgb(i * 5, i * 5, i * 5)), new Rectangle(i * 20, 0, 20, 20));
b.Dump();
输出:
for(int i=0;i<250;i+=5)
然后FromArgb(i,i,i)
和Rectangle(i*4,0,20,20)
给168
FillRectangle()
有一个重载采用矩形直接坐标,这样你就可以删除new Rectangle()
,并与153逃脱
好的,也许这不是最好的解决方案,但这是我的。
function b(a){c=document
e=c.createElement('p')
with(e.style){background="rgb("+[a,a,a]+")"
width=height="20px"}c.body.appendChild(e)
a<245&&b(a+5)}b(0)
这是css向左浮动的输出(只是为了更容易计算平方)而没有:
var
关键字并删除不必要的空格来节省一些字节。另外,请在答案中包括语言名称和字节数。
var
关键字是什么意思。
c+=5
代替c=c+5
。另外,您可以保存2个字符,方法是放在n=c.toString()
前一行的末尾,然后再将该行放在前一行的末尾。所以您的第二行是function w(){if(c<250){n=c.toString()
px
高度和宽度。