Gambar Segitiga Reutersvärd


33

Objek mustahil ini adalah segitiga Reutersvärd :

masukkan deskripsi gambar di sini

Gambarkan versi Anda sendiri sesuai dengan aturan ini:

  • Total total 9 kubus
  • Setiap sisi terdiri dari 4 kubus
  • Kubus tampaknya tumpang tindih sehingga objek yang diberikan sebenarnya adalah objek yang mustahil
  • 4 warna berbeda digunakan - satu untuk latar belakang dan 3 untuk masing-masing wajah kubus
  • Dalam output bitmap, segitiga penuh harus memiliki tinggi setidaknya 100 piksel dan lebar minimal 100 piksel
  • Rasio aspek: lebar dan tinggi segitiga penuh tidak boleh dimatikan lebih dari faktor 2
  • Segitiga dapat diputar dengan jumlah relatif terhadap gambar di atas
  • Segitiga mungkin atau mungkin tidak tercermin relatif terhadap gambar di atas

Jawaban:


14

Brain-Flak, 487810 327722 75564 + 1 = 75565 byte

Sayangnya ini sedikit cocok untuk dijawab.

PasteBin

Cobalah secara Online

Dengan -Aflag ini menampilkan file ppm ASCII yang terlihat seperti berikut:

Output baru

Penjelasan

Anda mungkin sudah menebak saya tidak menulis ini dengan tangan. Jadi, inilah cara saya melakukannya:

Saya pertama kali membuat gambar yang Anda lihat di atas dari gambar yang disediakan oleh tantangan. Ini memiliki perbedaan karena tidak memiliki saluran warna yang ada nilainya selain 255atau 0dengan cara ini kita dapat membungkusnya menjadi file yang lebih kecil dengan saluran warna maks diatur ke 1. Saya kemudian menulis skrip python untuk golf program Brain-Flak yang menyelesaikan ini menggunakan modul yang saya tulis sendiri yang dapat ditemukan di sini . Ini tidak terlalu dipoles, hanya sebuah retas yang saya gunakan untuk hal-hal seperti ini. pushadalah fungsi yang mengembalikan kode Brain-Flak yang efisien untuk mendorong angka ke tumpukan dan kolmomerupakan program pemecahan kompleksitas Kolmogorov yang sangat sederhana yang berupaya menemukan cara yang efisien untuk mendorong string tertentu ke tumpukan.

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

Ini cukup menyenangkan dan saya berharap dapat meningkatkan jawaban saya


14
Anda secara sah bermain golf 160088 byte? Apakah itu rekor?
Neil

Mungkin beberapa jawaban yang tidak masuk akal bisa mengalahkan itu
Roman Gräf


Kode Python Anda membuat saya penasaran. Apa value? (Bukan modul ini pada PyPI , saya menduga?) Apa kolmo?
Tim Pederick

@TimPederick Maaf tentang itu. Itulah modul yang saya tulis sendiri untuk bermain golf Brain-Flak. Saya akan menyertakan tautan dalam tubuh.
Wheat Wizard

13

Mathematica, 237 byte

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}

Versi yang lebih mudah dibaca:

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}

Baris 1 mendefinisikan fungsi n yang meniadakan koordinat pertama dari pasangan yang dipesan. Baris 2 mendefinisikan fungsi gyang menghasilkan (kira-kira) sama sisi segitiga berpusat pada titik c, dan menunjuk ke bawah atau ke atas tergantung pada apakah sini 1atau -1. Jalur 3 mendefinisikan pmenjadi template genjang yang terdiri dari warna dan dua segitiga, dan garis 4-6 mendefinisikan a, bdan cmenjadi tiga jenis tertentu yang berbeda dari jajaran genjang yang muncul dalam kubus.

Baris 8 mendefinisikan fungsi {a@#, b@#, c@#}& yang menarik seluruh kubus yang terpusat pada titik tersebut #; garis 9 dan 10 menerapkannya pada sembilan poin yang dibutuhkan untuk membuat segitiga lebih besar. Ini menghasilkan sembilan kubus, mulai dari kanan atas dan berlawanan arah jarum jam, di mana yang kemudian menutupi bagian yang sebelumnya. Akhirnya, baris 11 menggambar ulang empat jajar genjang (di kanan atas gambar) sehingga mereka akhirnya menutupi kubus kemudian seperti yang seharusnya. Outputnya di bawah ini:

masukkan deskripsi gambar di sini


6
Tunggu apa Mathematica tidak memiliki bawaan untuk ini?
Trauma Digital

10

HTML + CSS 3D (855 866 bytes)

HTML 117 byte + CSS 738 byte

Untuk menjaga z-indexesagar tetap agak rumit. ;)

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

Saya telah menjaga baris baru agar lebih mudah dibaca. Mungkin seseorang melihat potensi untuk lebih banyak bermain golf. Namun, mereka tidak termasuk dalam jumlah byte.

Hasil

masukkan deskripsi gambar di sini

Demo jsFiddle

Cobalah sendiri

Gunakan Goole Chrome. Peramban lain mungkin mengalami masalah denganz-indexes .

Edit

  • Disimpan 2 byte dengan menghapus apemilih- duplikat , terima kasih untuk produk ETH .
  • Disimpan 9 byte dengan menghapus yang tidak perlu margin:0pada aelemen.

Apakah masih HTML yang valid tanpa HEAD/BODYdan tag penutup? Saya tahu browser cenderung mengabaikan kesalahan sintaks dan mencoba untuk menampilkan apa pun yang Anda lemparkan ke mereka, tetapi saya tidak berpikir kode ini mengikuti spesifikasi. (Konon, solusi hebat!)
Federico Poloni

2
@FedericoPoloni Terima kasih. Mengenai html|head|bodyelemen: Mereka bisa dihilangkan. Lihatlah "Tag Opsional" , Anda akan terkejut betapa banyak elemen dan tag penutup dapat dihilangkan juga. Apa yang tidak ada dalam spesifikasi tetapi berfungsi juga adalah dengan menghilangkan tag penutup- aelemen. Namun mereka ditutup dengan benar oleh browser, karena Anda tidak dapat membuat sarang. Juga dari sudut pandang Code Golf: Segala sesuatu yang " mengkompilasi " dan memiliki output yang benar adalah valid. ;)
masukkan nama pengguna

9

BBC BASIC, 147 byte

filesize Tokenised 129 byte

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 byte disimpan dengan menggunakan spesifikasi koordinat absolut (MOVE ) dan dua spesifikasi relatif per jajaran genjang, alih-alih mengubah asal agar dapat menggunakan semua spesifikasi absolut. 1 byte spasi kosong yang tidak perlu dihilangkan.

BBC BASIC, 150 byte

filesize Tokenised 127 byte

Unduh juru bahasa di 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.

Penjelasan

Kita mulai dengan koordinat di kanan atas dan plot rhombus dalam kelompok 3. Sebelum masing-masing kelompok 3 kita memindahkan asal (Barat, Barat, Barat, SE, SE SE, NE, NE NE.) Itu berarti bahwa kelompok 3 di kanan atas adalah grup lengkap terakhir yang diplot, membawa asal kembali ke lokasi semula. Kami kemudian melanjutkan dan merencanakan hitam dan merah (tetapi bukan hijau) dari kelompok pertama lagi, total 29 rhombus.

Tidak disatukan

  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

Keluaran

masukkan deskripsi gambar di sini


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>

Kurang golf

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

Uji

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

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 byte

Ini adalah pertama kalinya saya bermain golf SVG (atau markup apa pun, sebenarnya); jadilah lemah lembut!

Lingkungan tampilan yang diasumsikan adalah browser web berkemampuan SVG dengan sesuatu seperti ukuran jendela biasa. Saya mengujinya di Firefox 50 dan di Chrome 55.

Itu viewBox ini diperlukan untuk memenuhi persyaratan 100-pixel; meledakkan semua pengukuran dengan faktor yang cocok juga akan berhasil tetapi akan membutuhkan lebih banyak byte. Secara kebetulan, dimungkinkan untuk menyimpan byte lain dengan menghapus ruang di 0 -5dalam viewBoxnilainya, tetapi Firefox tidak akan menerima ini sebagai valid (sedangkan Chrome akan).

Rasio aspek adalah 1: 1 bukannya 0,866: 1 yang sebenarnya. Saya tidak yakin persis bagaimana aturan "faktor 2" dimaksudkan untuk ditafsirkan (saya pikir itu berarti bahwa berlebihan ekstrim 0,433: 1 atau 1,732: 1 dapat diterima), tapi saya cukup yakin ini memenuhi persyaratan bagaimanapun.

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>

Hasil

Render PNG dari kode SVG di atas untuk Segitiga Reuters


Saya pikir Anda mungkin bisa menghapus baris baru di sini, bukan? IIRC, XML mengabaikan spasi putih di sebagian besar konteks.

@ ais523: Ya, saya lupa melakukan itu sebelum mempostingnya. facepalm Sudah dilakukan sekarang. Masih ada baris baru, menjaganya agar tetap dapat dibaca, tetapi hanya di tempat (yaitu antara nama tag dan atribut) di mana ruang semacam itu diperlukan.
Tim Pederick

Interpretasi Anda tentang aturan rasio aspek sudah benar
Digital Trauma
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.