Tantangan ini terdiri dari pengkodean juru bahasa untuk bahasa deskripsi lukisan Mondrian (MPDL).
Definisi bahasa
Bahasa beroperasi pada setumpuk persegi panjang. Sebuah persegi panjang ditentukan oleh koordinat kiri atas dan koordinat kanan bawah. Koordinat harus bilangan bulat. Tumpukan diinisialisasi dengan satu persegi panjang dengan atribut(1,1,254,254)
Setiap perintah memiliki format berikut:
<character><integer>
Ada tiga perintah:
v<integer>
: melakukan split vertikal pada persegi panjang terbaru di stack, pada posisi yang ditunjukkan oleh parameter (sebagai persentase). Persegi panjang sumber dihapus dari tumpukan dan diganti dengan dua persegi panjang baru hasil perpecahan. Persegi panjang kiri didorong pada tumpukan, lalu persegi panjang kanan. Karena koordinat persegi panjang adalah bilangan bulat, pecahan harus dibulatkan menjadi bilangan bulat terbesar yang lebih kecil.
h<integer>
: perpecahan horizontal. Persegi panjang atas didorong pada tumpukan, lalu persegi panjang bawah.
c<integer>
: menghapus persegi panjang terbaru dari tumpukan dan mengecatnya ke warna yang diberikan sebagai parameter. 1 = putih, 2 = merah, 3 = biru, 4 = kuning
Tantangan
Tulis sebuah program yang mengambil sebagai parameter deskripsi lukisan dan membuat representasi bitmap 256x256 dari persegi panjang yang dilukis. Persegi panjang harus dipisahkan dengan garis hitam 3 piksel. Persegi panjang satu atau dua piksel harusnya memiliki piksel non-hitam yang disembunyikan oleh piksel hitam tepi.
Input dapat dibaca sebagai parameter atau sebagai file, terserah Anda. Perintah-perintah harus dipisahkan oleh spasi. Anda dapat mengasumsikan bahwa file input memiliki sintaks yang benar dan tidak memiliki spasi tambahan, tab, dll. Outputnya dapat langsung ditampilkan pada layar, atau disimpan ke file, terserah Anda.
Kode terpendek menang.
Uji
Sumber berikut:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Harus menghasilkan Komposisi II Merah, Biru dan Kuning :
v
danh
argumen harus dalam pikselv30 v50 c1 c5 h70 v50 c1 c3 c2
.Jawaban:
Perl 5 + ImageMagick - 297
Mulai dengan sesuatu:
Mengambil input pada baris perintah dan menghasilkan
a.gif
.sumber
Haskell - 335
Program membaca instruksi sebagai satu baris dari stdin , jika ini tidak dapat diterima, beri tahu saya.
Mengkompilasi ke dalam program yang menggunakan flag -w lebar -h tinggi -o outputfile .Keluarkan file "a.svg", jika itu tidak segera jelas dari kode. Karena outputnya adalah gambar vektor, itu bukan 'pixel perfect'.Ini adalah pertama kalinya saya bekerja dengan Diagram -paket, merasa bebas untuk menunjukkan kesalahan yang saya buat. Terutama setiap backend yang akan membuat saya output dengan kode lebih sedikit akan lebih baik.
Anda dapat melihat beberapa langkah pertama yang saya ambil ketika mengembangkan kode di http://paste.hskll.org/get/1737 . Itu berbeda dari kode di atas dalam impor dan tidak memiliki utama karena paste.hskll.org menyediakan lingkungan utama dan gambar sendiri.
sumber
Python -
434 405 377 364361Golf python pertama saya. Ini mungkin dapat ditingkatkan BANYAK, sehingga umpan balik sangat dihargai.
sumber
a+=[x]
bukannyaa.append(x)
. Dan split tidak perlu argumen jika dipisahkan oleh spasi.HTML + JavaScript ES6 (407)
Diuji dengan Firefox 32.0.3
sumber
x.charAt(0)
->x[0]
;x.substr
->x.slice
;white yellow
->#fff #ff0
;document.getElementById("c")
->c
... dan banyak lagiHTML + JavaScript (ES6) 335
Terlalu mirip dengan jawaban @mika - menandai CW.
sumber