根据以下规则绘制自己的版本:
- 总共恰好9个立方体
- 每边正好由4个立方体组成
- 立方体似乎重叠,因此渲染的对象实际上是不可能的对象
- 使用4种不同的颜色-一种用于背景,另一种用于立方体的三个面
- 在位图输出中,整个三角形的高度至少应为100像素,宽度至少应为100像素
- 宽高比:整个三角形的宽度和高度相差不应超过2倍
- 三角形可以相对于上图旋转任何量
- 三角形可能会或可能不会相对于上图反映
根据以下规则绘制自己的版本:
Answers:
不幸的是,这有点适合回答。
使用该-A
标志,将输出如下所示的ASCII ppm文件:
您可能已经猜到我没有亲手写。所以这是我的做法:
我首先根据挑战提供的图像制作了您在上方看到的图像。它的区别在于没有其他任何颜色的颜色通道,255
否则0
我们可以将其包装到一个较小的文件中,并将最大颜色通道设置为1。然后我编写了一个Python脚本来编写Brain-Flak程序使用我自己写的模块解决了这个问题,可以在这里找到。它不是很完美,只是我为这样的事情而提出的一个技巧。 push
是一个返回有效的Brain-Flak代码以将数字压入堆栈的函数,并且kolmo
是一个非常简单的Kolmogorov复杂度解决程序,试图找到一种将特定字符串压入堆栈的有效方法。
from value import push,kolmo
def group(a, n):
return zip(*[a[i::n]for i in range(n)])
f=open("R.ppm")
a=["".join(x)for x in group(f.read().split()[3:][::-1],3)]
f.close()
def hardcode(string):
result = push(ord("\n")).join("(<>({})<>"+{"0":"","1":"()"}[x]+")"for x in string)
return result
last = ""
acc = 0
result = push(ord("0"))+"<>"
for x in a+[""]:
if x != last:
string = ("" if not last else kolmo("\n")+hardcode(last))
result += min([push(acc)+"{({}[()]<%s>)}{}"%string,acc*string],key=len)
acc=1
else:
acc += 1
last = x
print result+kolmo("P3 100 100 ")
这很有趣,我希望能改善我的答案
n={-1,1}#&;c_~g~s_:=Polygon[c+s#&/@{k={12,9},m=n@k,t={0,-12}}];p={#,#2~g~1,#3~g~-1}&;a=p[Cyan,#-k,#+m]&;b=p[Blue,#-t,#+k]&;c=p[Red,#-m,#+t]&;Graphics@{{a@#,b@#,c@#}&/@{j=4k,s=4{4,9},n@s,4m,r={-32,8},q=-4{4,5},4t,n@q,n@r},a@j,b@s,c@j,c@s}
易于阅读的版本:
1 n = {-1, 1} # &;
2 c_~g~s_ := Polygon[c + s # & /@ {k = {12, 9}, m = n@k, t = {0, -12}}];
3 p = {#, #2~g~1, #3~g~-1} &;
4 a = p[Cyan, # - k, # + m] &;
5 b = p[Blue, # - t, # + k] &;
6 c = p[Red, # - m, # + t] &;
7 Graphics@{
8 {a@#, b@#, c@#} & /@
9 {j = 4 k, s = 4{4, 9}, n@s, 4 m, r = {-32, 8},
10 q = -4{4, 5}, 4 t, n@q, n@r},
11 a@j, b@s, c@j, c@s}
第1行定义了一个n
否定有序对的第一个坐标的函数。第2行定义了一个函数g
,该函数生成一个以点为中心的(大致)等边三角形c
,并根据s
is 1
或向下或向上-1
。线3只限定p
为包括一个颜色和两个三角形的平行四边形模板,线4-6限定a
,b
和c
成为三种不同的特定类型显示在立方体平行四边形。
第8行定义了一个函数{a@#, b@#, c@#}&
,该函数以点为中心绘制整个立方体#
; 第9和10行将其应用于制作更大三角形所需的九个点。这将产生九个立方体,从右上角开始,并逆时针旋转,后面的立方体覆盖前面的立方体的一部分。最后,第11行重新绘制了四个平行四边形(在图片的右上角),以便它们最终覆盖了预期的后面的多维数据集。输出如下:
HTML 117字节 + CSS 738字节
保持z-indexes
秩序有些棘手。;)
/* CSS */
p{position:absolute;left:110px;top:0;width:50px;height:50px;transform-style:preserve-3d;transform:rotateX(-45deg)rotateY(21deg)rotateZ(20deg)}
p+p{left:140px;top:50px}
p+p+p{left:170px;top:100px}
p+p+p+p{left:200px;top:150px}
p+p+p+p+p{left:140px;top:150px}
p+p+p+p+p+p{left:80px;top:150px}
p+p+p+p+p+p+p{left:20px;top:150px}
p:nth-child(8){z-index:1;left:50px;top:100px}
p:nth-child(9){z-index:-1;left:80px;top:50px}
p:nth-child(10){z-index:1;left:67px;top:59px;transform:rotateX(-45deg)rotateY(21deg)rotateZ(20deg)scale(0.6)}
a{position:absolute;width:50px;height:50px;background:red;transform:rotateY(0deg)translateZ(25px)}
a+a{background:tan;transform:rotateY(-90deg)translateZ(25px)}
a+a+a{background:navy;transform:rotateX(90deg)translateZ(25px
<!-- HTML -->
<p><a><a><a><p><a><a><a><p><a><a><a><p><a><a><a><p><a><a><a><p><a><a><a><p><a><a><a><p><a><a><a><p><a><a><a><p><a><a>
我保留了新行以提高可读性。也许有人发现更多打高尔夫球的潜力。但是,它们不包括在字节数中。
使用Goole Chrome。其他浏览器可能与z-indexes
出现问题。
a
margin:0
a
HEAD/BODY
和关闭标签,它仍然是有效的HTML 吗?我知道浏览器往往会忽略语法错误,并尝试显示您向它们抛出的任何错误,但是我认为这段代码并不符合规范。(这就是说,很好的解决方案!)
html|head|body
-elements:它们可以省略。看一看“可选标签”,您会惊讶地发现有多少元素和结束标签也可以省略。规范中没有但可以使用的是省略-elements的结束标记a
。但是,它们无法被浏览器正确关闭,因为您无法嵌套它们。同样从Code Golf的角度来看:“ 编译 ”并具有正确输出的所有内容都是有效的。;)
标记化文件大小129字节
t=PI/1.5x=500y=x:FORi=0TO28b=i MOD3GCOL0,b:b*=t:a=i DIV9*t:IFb=0x-=99*COSa:y-=99*SINa
MOVEx,y:VDU25;66*COSb;66*SINb;28953;66*COS(b-t);66*SIN(b-t);:NEXT
使用绝对坐标指定可节省2个字节(MOVE
)和每个平行四边形两个相对规范,而不是更改原点以便能够使用所有绝对规范。消除了1个字节的不必要的空格。
标记化文件大小127字节
在http://www.bbcbasic.co.uk/bbcwin/download.html下载口译员
t=PI/1.5x=500y=x:F.i=0TO28b=i MOD3GCOL0,b:b*=t:a=i DIV9*t:IFb=0 x-=99*COSa:y-=99*SINa:ORIGINx,y
L.66*COSb,66*SINb,0,0PLOT117,66*COS(b-t),66*SIN(b-t)N.
说明
我们从右上角的坐标开始,以3组为单位绘制菱形。在每3组之前,我们移动原点(West,West,West,SE,SE SE,NE,NE NE)。这意味着3组右上角是要绘制的最后一个完整组,使原点回到其原始位置。然后,我们继续绘制第一组的黑色和红色(而不是绿色),总共29个菱形。
不打高尔夫球
t=PI/1.5 :REM 120 deg
x=500 :REM coordinates of top right corner
y=x
FORi=0TO28
b=i MOD3:GCOL0,b :REM set colour 0=black,1=red,2=green
b*=t :REM convert b to a multiple of 120deg
a=i DIV9*t
IFb=0 x-=99*COSa:y-=99*SINa:ORIGINx,y :REM before each group of 3 rhombs move the graphics origin
LINE66*COSb,66*SINb,0,0 :REM define one side of a rhombus
PLOT117,66*COS(b-t),66*SIN(b-t) :REM define one further corner and plot the rhombus
NEXT
输出量
<canvas id=C></canvas><script>c=C.getContext("2d");`133124222162184253104213162164244191224182133191064104222093164253122224284151284`.match(/.../g).map((v,i)=>(c.fillStyle=['#fc0','#f04','#08a'][a=i%3],c.beginPath(),c[l='lineTo'](x=5*~~v/10,y=v%10*25),c[l](x-10,y+(--a+!a)*17),a&&c[l](x-30,y+a*17),c[l](x-20,y),!a&&c[l](x-10,y-17),c.fill()))</script>
少打高尔夫球
<canvas id=C></canvas>
<script>
c=C.getContext("2d");
[133,124,222,162,184,253,104,213,162,164,244,191,224,182,133,191,64,104,222,93,164,253,122,224,284,151,284]
.map((v,i)=>(
a = i % 3,
x = 5 * ~~ v / 10,
y = v % 10 * 25,
c.fillStyle = ['#fc0','#f04','#0a8'][a],
c.beginPath(),
--a,
c[l='lineTo'](x, y),
c[l]( x -10, y + (a+!a) * 17),
a&&c[l](x - 30, y + a * 17),
c[l](x - 20, y),
!a&&c[l](x - 10, y - 17),
c.fill()
))
</script>
测试
<canvas id=C></canvas><script>c=C.getContext("2d");`133124222162184253104213162164244191224182133191064104222093164253122224284151284`.match(/.../g).map((v,i)=>(c.fillStyle=['#fc0','#f04','#08a'][a=i%3],c.beginPath(),c[l='lineTo'](x=5*~~v/10,y=v%10*25),c[l](x-10,y+(--a+!a)*17),a&&c[l](x-30,y+a*17),c[l](x-20,y),!a&&c[l](x-10,y-17),c.fill()))</script>
document.write(`<svg width=390 height=338>`)
a=`195,52;240,130;285,208;330,286;240,286;150,286;60,286;105,208;150,130;`
a=(a+a).split`;`
for(i=9;i--;)document.write(`<path fill=#FD0 d=M${a[i]}h60l-30,-52h-60z /><path fill=#088 d=M${a[i+3]}h60l-30,52h-60z /><path fill=#F64 d=M${a[i+6]}l-30,-52l-30,52l30,52z />`)
这是我第一次打SVG(实际上是任何标记)。要温柔!
假定的查看环境是具有SVG功能的Web浏览器,并且具有类似于典型窗口大小的任何内容。我在Firefox 50和Chrome 55中对其进行了测试。
的viewBox
,以满足100像素的要求是必要的; 将所有测量值放大一个合适的因子也可以,但是会占用更多字节。顺便说一句,可以通过在消除空间来保存另一个字节0 -5
的viewBox
值,但Firefox不会接受此为有效(而Chrome浏览器会)。
长宽比是1:1,而不是真实的0.866:1。我不确定确切地解释“ 2因子”规则的含义(我认为这意味着可以接受0.433:1或1.732:1的极端夸张),但是我很确定这符合要求无论如何。
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:l="http://www.w3.org/1999/xlink"
viewBox="0 -5 26 26"><g
id="a"><path d="m7,9H3V5h6z"/><g
id="f"><path fill="red" d="m9,5H3V1h4z"/><path
fill="blue" d="m3,1l2,4L3,9l-2-4z"/></g></g><use
l:href="#a" x="3" y="6"/><use
l:href="#e" x="12"/><g
id="e"><use l:href="#a" x="-6" y="12"/><use l:href="#a" x="-12" y="12"/></g><use
l:href="#a" x="-9" y="6"/><use
l:href="#a" x="-6"/><use
l:href="#a" x="-3" y="-6"/><use
l:href="#f"/></svg>