Pada 2015 Bandara Internasional Portland memulai penggantian karpet ikonik mereka . Saya ingin Anda menulis sebuah program untuk menggambar karpet lama mereka sesedikit mungkin.
Karpet:
Spesifikasi
Berikut ini tautan ke gambar pdf yang dapat diskalakan dari satu ubin. Output Anda harus sesuai dengan dimensi relatif dan penempatan gambar itu.
Semua warna dalam gambar akhir Anda harus dalam 15 dari setiap nilai RGB dalam gambar yang ditentukan. Ini tercantum di bawah ini untuk kenyamanan Anda.
Red Green Blue Teal: 0, 168, 142 Magenta: 168, 108, 185 Orange: 247, 58, 58 Light Blue: 90, 166, 216 Dark Blue: 0, 77, 117
Output Anda harus minimal 150x150 piksel dan harus persegi. Jika Anda memilih untuk menghasilkan dalam format yang dapat diskalakan seperti gambar vektor, Anda harus mencocokkan gambar dengan tepat.
Anda dapat menampilkan gambar dalam format gambar yang sudah ada sebelumnya.
Ini adalah kode-golf sehingga Anda harus berusaha meminimalkan jumlah byte dalam kode Anda.
sumber
Jawaban:
HTML murni, 873 byte
HTML + CSS, 625 byte
sumber
Tikz,
725693681671 byteCobalah secara Online!
Penjelasan
Sebagian besar kode adalah pembungkus:
Ini adalah sedikit variasi pada pembungkus Tikz standar karena ia juga memiliki garis
\usepackage{xcolor}
sehingga kita dapat membuat warna dengan benar.Hal pertama yang dilakukan adalah
line width=20,every node/.style={minimum size=20}]
menentukan garis dan simpul menjadi ukuran yang sesuai.Setelah selesai, kita menentukan warna yang akan kita gunakan untuk berbagai bagian gambar:
Sekarang semuanya sudah siap, kita mengecat latar belakang kanvas kita:
(Saya tidak akan menyertakan gambar ini karena itu hanya persegi teal, tapi saya akan menyertakan gambar dari setiap langkah lainnya)
Simpul pertama yang kita tambahkan adalah simpul oranye di sebelah kiri tengah kanvas.
Sekarang kita akan menggambar node biru muda dan magenta. Ada 7 node biru dan 4 node biru, tetapi kita bisa menggambar node tambahan yang akan ditutupi oleh garis nanti jadi kita akan menggambar 7 masing-masing.
Sekarang kita akan menggambar semua kelompok 3 titik menggunakan satu
\foreach
loopSekarang kita menggambar garis yang benar. Baris ini akan menjadi garis sederhana dengan offset
.35
di setiap arah untuk mencocokkan ukuran node.Sekarang kita harus menggambar garis biru gelap dan kotak pada sumbu x. Kami akan menggambar mereka dengan satu garis menggunakan pola tanda hubung khusus.
Pola ini adalah
[dash pattern=on20off8.5on162.5off8.5]
Ini menciptakan persegi dengan ekor padat panjang. Baris kami akan mulai dari bawah dan tidak akan cukup menutupi 2 siklus pola.Dan sekarang kita selesai.
sumber
\definecolor
denganHTML
spesifikasi (bukanRGB
) memungkinkan Anda untuk menentukan warna menggunakan hex.File PNG literal,
283,234227 byteEDIT : Menggunakan layanan kompresi gambar online https://compress-or-die.com/ , ini turun 7 byte lagi.
albn @ alexhi
227 byte adalah ukuran sebenarnya dari file biner carpet.png. Ketika dikodekan dalam base64, seperti yang ditampilkan dalam blok yang dikutip di atas, itu beberapa byte lebih lama (308 byte). Enkapsulasi itu dalam cuplikan html yang menjadikan gambar dengan benar akan menambah beberapa byte:
HTML,
414,343, 336 byteSunting : Saya menghapus tanda kutip dan menutup> seperti yang disarankan Shaggy. Juga dikompresi gambar ke
17, 24 bytesumber
=
dan penutup>
. Berikut adalah versi 366 byte yang saya kerjakan sebelum saya melihat jawaban Anda:<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACYBAMAAADq7D0SAAAAD1BMVEUAqI4ATXWobLlaptj3OjrqGXAuAAAAp0lEQVRo3u3YQQqFMAxFUbeQLbiFbsH9r8k3y8CmTiKm7b2Dwv/CgUAD4jF3TYGBRdgKmRqPCQa28gaMZ20KDGz5DQhnbQoMTG2wAcPR/ScY2HeYVw4zBQYWYDUvbRLWFS/lBxhYhM3bpXzMcWBgEVa5U70cpsDAnkf1FxcwMDAwMLBczP8DAwuwmpc2HzMFBhY8qHlp8zFTYGCdyn8GKrhOYBtjv3QDvf+Zic+8bOsAAAAASUVORK5CYII
Mathematica, 285 byte
Lebih mudah dibaca:
Baris 1-3 mendefinisikan nama-nama pendek untuk fungsi, yang paling penting adalah
s
yang menggambar kotak yang berpusat pada koordinat yang diterimanya (benar-benar 3 kali koordinatnya, untuk penskalaan yang sesuai). Baris 4 mendefinisikan fungsi warna menggunakan sistem RGB "pintas" Mathematica:, diRGBColor["#xyz"]
manaxyz
digit heksadesimal, adalah singkatanRGBColor[{17x, 17y, 17z}]
(sehingga masing-masing koordinat memiliki 16 opsi berjarak sama yang berjalan dari 0 hingga 255). Perintah pertama pada baris 6–10 mengganti warna saat ini, menggunakan warna pintasan yang paling dekat dengan lima warna yang ditentukan (tidak ada nilai mati oleh lebih dari 8 ketika kita membulatkan ke kelipatan 17 terdekat).Baris 6 menggambar kotak teal besar. Baris 7 menarik garis kotak magenta, Garis 8 menarik garis kotak oranye dan kotak oranye tunggal. Baris 9 menarik garis kotak biru muda. Garis 11 menggambar tiga garis diagonal kotak biru gelap, serta satu kotak biru tua di bagian bawah. Akhirnya, garis 12 menggambar tiga persegi panjang biru tua yang panjang. Outputnya di bawah ini:
(Tip golf: perintah
Cuboid
, yang ditujukan untuk objek grafis 3d, berfungsi dengan baik dalam 2d dan lebih pendek dariRectangle
.)sumber
Python, 420
sumber
HTML / SVG,
550542521 bytesumber
HTML, 366 byte
Sunday mendapatkan jawaban Base64 ketika saya masih mengerjakan ini; jika dia memilih untuk menggunakannya maka saya akan menghapus jawaban ini.
Jika string Base64 itu sendiri adalah jawaban yang valid maka itu hanya 335 byte:
sumber
HTML / SVG + JavaScript (ES6),
500499 byte>
Diperlukan tambahan agar ini berfungsi sebagai Cuplikan, lihat Fiddle ini untuk kode sebenarnya.Penjelasan
Array array dipetakan ke fungsi
a
, menciptakan klon darirect
dalam HTML, memasukkan mereka setelah awalrect
dan pengaturan merekafill
,x
,y
,width
&height
atribut. Setiap array berisi nilai untuk atribut tersebut, dalam urutan itu, dengan nilai yang hilang ditetapkan oleh parameter defaulta
. Yang tampaknya tidak perlur.id++
memungkinkan penggunaancloneNode()
sambil memastikan hanya ada 1rect
dengan aid
dari; ini menghemat kebutuhan untuk menggunakan yang sangat mahaldocument.createElementNS("http://www.w3.org/2000/svg","rect")
.sumber
PHP + SVG, 425 Bytes
diperluas
Hasil kode dalam cuplikan HTML
PHP + SVG, 375 Bytes
Hitungan Byte ini dapat dicapai dengan mengompresi SVG
sumber