วาดสามเหลี่ยมของรอยเตอร์สแวร์


33

วัตถุที่เป็นไปไม่ได้นี้คือสามเหลี่ยมของReutersvärd :

ป้อนคำอธิบายรูปภาพที่นี่

วาดเวอร์ชั่นของคุณเองตามกฎเหล่านี้:

  • ผลรวมทั้งหมด 9 ลูก
  • แต่ละด้านประกอบด้วยสี่ลูกบาศก์อย่างแน่นอน
  • คิวบ์ดูเหมือนจะทับซ้อนกันซึ่งในความเป็นจริงแล้ววัตถุที่แสดงผลเป็นวัตถุที่เป็นไปไม่ได้
  • มีการใช้สีที่แตกต่างกัน 4 สี - หนึ่งสำหรับพื้นหลังและ 3 สำหรับแต่ละด้านของคิวบ์
  • ในเอาต์พุตบิตแมปสามเหลี่ยมเต็มควรสูงอย่างน้อย 100 พิกเซลและกว้างอย่างน้อย 100 พิกเซล
  • อัตราส่วนกว้างยาว: ความกว้างและความสูงของสามเหลี่ยมเต็มไม่ควรเกินกว่า 2 เท่า
  • สามเหลี่ยมอาจหมุนตามจำนวนที่สัมพันธ์กับภาพด้านบน
  • สามเหลี่ยมอาจสะท้อนหรืออาจไม่สัมพันธ์กับภาพด้านบน

คำตอบ:


14

Brain-Flak, 487810 327722 75564 + 1 = 75565 ไบต์

น่าเสียดายที่นี่มีขนาดใหญ่พอที่จะตอบคำถามได้

Pastebin

ลองออนไลน์

ด้วยการ-Aตั้งค่าสถานะนี้จะส่งออกไฟล์ ASCII ppm ที่มีลักษณะดังนี้:

ใหม่เอาท์พุท

คำอธิบาย

คุณอาจเดาแล้วว่าฉันไม่ได้เขียนด้วยมือ ดังนั้นนี่คือวิธีที่ฉันทำ:

ก่อนอื่นฉันสร้างภาพที่คุณเห็นด้านบนจากภาพที่ได้จากการท้าทาย มันมีความแตกต่างของการมีช่องทางสีที่เป็นค่าใด ๆ อื่น ๆ กว่า255หรือ0ด้วยวิธีนี้เราสามารถตัดมันออกเป็นไฟล์ขนาดเล็กที่มีชุดสีช่องสูงสุดถึง 1 จากนั้นผมก็เขียนบทหลามการกอล์ฟโปรแกรม 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 ")

สนุกมากและฉันหวังว่าจะปรับปรุงคำตอบของฉัน


14
คุณเล่นกอล์ฟอย่างถูกต้องตามกฎหมาย 1,600,088 ไบต์? นั่นคือบันทึกหรือไม่?
Neil

บางทีคำตอบที่ไม่ใช่คำตอบอาจเอาชนะได้
Roman Gräf


รหัสไพ ธ อนของคุณสนใจฉัน อะไรนะvalue? (ไม่ใช่โมดูลนี้ใน PyPIฉันกำลังเดาอยู่) อะไรนะkolmo?
ทิม Pederick

@TimPederick ขอโทษด้วย นั่นเป็นโมดูลที่เขียนขึ้นเพื่อเล่นเกม Brain-Flak ฉันจะรวมลิงค์ในร่างกาย
ข้าวสาลีตัวช่วยสร้าง

13

Mathematica, 237 ไบต์

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เป็นหรือ1 -1บรรทัดที่ 3 กำหนดpให้เป็นแม่แบบสี่เหลี่ยมด้านขนานประกอบด้วยสีและรูปสามเหลี่ยมสองรูปและเส้น 4-6 กำหนดa, bและcจะเป็นสามประเภทที่เฉพาะเจาะจงแตกต่างกันของสี่เหลี่ยมด้านขนานที่ปรากฏในก้อน

บรรทัดที่ 8 กำหนดฟังก์ชั่น{a@#, b@#, c@#}&ที่ดึงทั้งคิวบ์ไว้กึ่งกลางที่จุด#นั้น บรรทัดที่ 9 และ 10 นำไปใช้กับจุดเก้าที่จำเป็นในการสร้างรูปสามเหลี่ยมให้ใหญ่ขึ้น สิ่งนี้จะสร้างเก้าลูกบาศก์เริ่มต้นที่มุมขวาบนและหมุนทวนเข็มนาฬิกาโดยที่ส่วนต่อมาจะครอบคลุมส่วนต่างๆของก้อนก่อนหน้า ในที่สุดบรรทัดที่ 11 จะวาดรูปสี่เหลี่ยมด้านขนานสี่อัน (ที่มุมบนขวาของภาพ) เพื่อที่ว่าพวกมันจะได้ครอบคลุมก้อนในภายหลังตามที่ควรจะเป็น เอาท์พุทอยู่ด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่


6
รอสิ่งที่ Mathematica ไม่มีในตัวสำหรับสิ่งนี้
บาดเจ็บทางดิจิตอล

10

HTML + CSS 3D (855 866ไบต์)

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>

ฉันเก็บบรรทัดใหม่ไว้เพื่อให้อ่านง่ายขึ้น บางทีใครบางคนอาจเห็นศักยภาพในการเล่นกอล์ฟมากขึ้น อย่างไรก็ตามจะไม่รวมอยู่ในจำนวนไบต์

ผล

ป้อนคำอธิบายรูปภาพที่นี่

การสาธิต jsFiddle

ลองด้วยตัวคุณเอง

ใช้ Goole Chrome เบราว์เซอร์อื่น ๆ อาจมีปัญหาเกี่ยวกับz-indexes

แก้ไข

  • ที่บันทึกไว้2 ไบต์โดยการลบซ้ำa-selector ขอบคุณETHproductions
  • บันทึกแล้ว9 ไบต์โดยลบสิ่งที่ไม่จำเป็นmargin:0ในส่วนaย่อย

ยังคงเป็น HTML ที่ถูกต้องหากไม่มีHEAD/BODYและปิดแท็กหรือไม่ ฉันรู้ว่าเบราว์เซอร์มักจะเพิกเฉยต่อข้อผิดพลาดทางไวยากรณ์และพยายามแสดงสิ่งที่คุณใส่ แต่ฉันไม่คิดว่ารหัสนี้จะเป็นไปตามข้อกำหนด (นั่นคือคำตอบที่ยอดเยี่ยม!)
Federico Poloni

2
@FedericoPoloni ขอบคุณ เกี่ยวกับhtml|head|bodyองค์ประกอบ: พวกเขาสามารถละเว้น ลองดูที่"แท็กเผื่อเลือก"คุณจะประหลาดใจกับจำนวนองค์ประกอบและแท็กปิดที่สามารถละเว้นได้เช่นกัน สิ่งที่ไม่ได้อยู่ในรายละเอียด แต่ก็ใช้งานได้เช่นกันคือละเว้นแท็กปิดของaองค์ประกอบ อย่างไรก็ตามเบราว์เซอร์จะปิดอย่างถูกต้องเนื่องจากคุณไม่สามารถซ้อนได้ นอกจากนี้จากมุมมองของ Code Golf: ทุกสิ่งที่ " คอมไพล์ " และมีเอาต์พุตที่ถูกต้องนั้นถูกต้อง ;)
insertusername ที่นี่

9

BBC BASIC, 147 ไบต์

ไฟล์ขนาดโทเค็นที่ถูกโทเค็น 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 ช่องว่างที่ไม่จำเป็นออกไป

BBC BASIC ขนาด 150 ไบต์

โทเค็นขนาดไฟล์ 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 เราจะย้ายต้นกำเนิด (ตะวันตก, ตะวันตก, ตะวันตก, ทิศตะวันออก, ทิศตะวันออกเฉียงเหนือ, ทิศตะวันออกเฉียงเหนือ, NE) ทิศตะวันออกเฉียงเหนือ ที่ด้านบนขวาคือกลุ่มที่สมบูรณ์สุดท้ายที่จะพล็อตซึ่งนำแหล่งกำเนิดกลับไปยังตำแหน่งดั้งเดิม จากนั้นเราก็ทำการพล็อตสีดำและสีแดง (แต่ไม่ใช่สีเขียว) ของกลุ่มแรกอีกครั้งรวมเป็นรูปสี่เหลี่ยมขนมเปียกปูน 29 อัน

Ungolfed

  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

เอาท์พุต

ป้อนคำอธิบายรูปภาพที่นี่


8

HTML + JavaScript (ES6), 351 374 384

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

น้อย golfed

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


5

JavaScript (ES6) / SVG (HTML5), 350 312 ไบต์

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


3

SVG, 562 540 520 504 487 473 ไบต์

นี่เป็นครั้งแรกที่ฉันได้เล่นกอล์ฟ SVG (หรือมาร์กอัปใด ๆ ) สุภาพอ่อนโยน!

สภาพแวดล้อมในการดูที่สันนิษฐานว่าเป็นเว็บเบราว์เซอร์ที่สามารถใช้ SVG ได้พร้อมทุกอย่างเช่นขนาดหน้าต่างทั่วไป ฉันทดสอบใน Firefox 50 และใน Chrome 55

viewBoxเป็นสิ่งจำเป็นเพื่อตอบสนองความต้องการ 100 พิกเซล; การวัดค่าทั้งหมดด้วยปัจจัยที่เหมาะสมจะทำให้ใช้งานได้ แต่จะใช้จำนวนไบต์เพิ่มขึ้น บังเอิญมันเป็นไปได้ที่จะบันทึกไบต์อื่นโดยการเอาพื้นที่ใน0 -5ในviewBoxค่า แต่ Firefox จะไม่ยอมรับเรื่องนี้เป็นที่ถูกต้อง (ในขณะที่ Chrome จะ)

อัตราส่วนภาพคือ 1: 1 แทนที่จะเป็นจริง 0.866: 1 ฉันไม่แน่ใจว่าจะตีความตีความ "factor of 2" ได้อย่างไร (ฉันคิดว่าการพูดเกินจริงมากที่สุดเท่าที่ 0.433: 1 หรือ 1.732: 1 เป็นที่ยอมรับ) แต่ฉันค่อนข้างแน่ใจว่าสิ่งนี้ตรงตามข้อกำหนด อย่างไรก็ตาม.

SVG

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

ผล

การแสดง PNG ของรหัส SVG ด้านบนสำหรับสามเหลี่ยมของReutersvärd


ฉันคิดว่าคุณอาจลบบรรทัดใหม่ที่นี่ใช่ไหม IIRC, XML ไม่สนใจช่องว่างในบริบทส่วนใหญ่

@ ais523: ใช่ฉันลืมที่จะทำก่อนโพสต์ facepalmก็ทำ แต่ในเวลานี้ ยังมีการขึ้นบรรทัดใหม่ทำให้สามารถอ่านได้ชัดเจน แต่เฉพาะในสถานที่ (กล่าวคือระหว่างชื่อแท็กและแอตทริบิวต์) ที่จำเป็นต้องใช้พื้นที่ในการเรียงลำดับบางอย่าง
ทิม Pederick

การตีความกฎอัตราส่วนภาพของคุณนั้นถูกต้อง
Digital Trauma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.