pengantar
Quixel adalah piksel kuantum. Mirip dengan piksel klasik, ia direpresentasikan dengan 3 nilai integer (Merah, Hijau, Biru). Namun, quixel berada dalam posisi super 3 status ini, bukan kombinasi. Posisi super ini hanya berlangsung sampai quixel diamati pada titik mana ia runtuh menjadi satu dari tiga piksel klasik; RGB(255,0,0)
, RGB(0,255,0)
dan RGB(0,0,255)
.
Spesifikasi
- Perwakilan
- Setiap quixel direpresentasikan sebagai larik 3 bilangan bulat antara 0 dan 255 r,, gdan bmasing - masing.
- Posisi Super
- Setiap quixel berada dalam posisi super antara negara Merah, Biru dan Hijau yang diwakili oleh R, Gdan Bmasing - masing.
- Pengamatan
- Ketika setiap quixel diamati, ia runtuh menjadi salah satu dari tiga kondisi. Probabilitas setiap keadaan klasik adalah
R = (r + 1) / (r + g + b +3)
,G = (g + 1) / (r + g + b + 3)
danB = (b + 1) / (r + g + b + 3)
. Dengan cara ini setiap keadaan klasik selalu sebagai probabilitas yang tidak nol untuk muncul.
- Ketika setiap quixel diamati, ia runtuh menjadi salah satu dari tiga kondisi. Probabilitas setiap keadaan klasik adalah
- Memasukkan
- Fungsi atau program harus mengambil gambar quixels. Cara kerjanya fleksibel. Nama file, menggunakan array multi-dimensi, dll semuanya dapat diterima.
- Keluaran
- Fungsi atau program harus menghasilkan gambar piksel klasik. Struktur data untuk gambar yang dihasilkan ini juga fleksibel. Perhatikan bahwa semua piksel harus menjadi salah satu dari tiga ini:
RGB(255,0,0)
,RGB(0,255,0)
danRGB(0,0,255)
- Outputnya tidak harus deterministik ; ini adalah piksel kuantum ! Input yang sama harus menghasilkan output yang berbeda.
- Jika bahasa Anda tidak memiliki cara untuk menghasilkan angka acak, Anda dapat mengambil byte acak sebagai input
- Fungsi atau program harus menghasilkan gambar piksel klasik. Struktur data untuk gambar yang dihasilkan ini juga fleksibel. Perhatikan bahwa semua piksel harus menjadi salah satu dari tiga ini:
- Mencetak gol
- Ini adalah kode-golf sehingga byte paling sedikit menang.
Gambar
Mona Lisa oleh Leonardo da Vinci
Starry Night oleh Vincent van Gogh
Persistence of Memory oleh Salvador Dali
Teddy Roosevelt VS. Bigfoot oleh SharpWriter
code-golf
graphical-output
random
image-processing
Buah Nonlinier
sumber
sumber
RGBK
, di manaK=255*3-R-G-B
, kemudian menjadikan piksel kuantum Anda menjadi salah satu dari 4. (Jika K dipilih, tampilkan (0,0,0). Perpanjang persamaan RGB Anda di cara yang jelas, mengubah 3s menjadi 4s, menambahkan K ketika Anda akan menambahkan R + G + B, dll). Kabur setelah melakukan ini harus merekonstruksi salinan berisik yang cukup baik dari aslinya. (K berarti hitam atau kunci, jika Anda bertanya-tanya)Jawaban:
Dyalog APL ,
232119 byteMengambil tabel kembar tiga (R, G, B).
Terinspirasi oleh algoritma miles
Mengembalikan tabel indeks ke {(255, 0, 0), (0, 255, 0), (0, 0, 255)}. Sangat boros.
(
?∘≢
indeks acak⊃
memilih⊢
dari)¨
masing-masing(
⊂
seluruh⍳3
tiga indeks pertama)/¨⍨
direplikasi oleh masing-masing1+⊢
si kembar tiga bertambahTryAPL!
Versi lama
Mengembalikan tabel indeks berbasis 0 ke {(255, 0, 0), (0, 255, 0), (0, 0, 255)}
{
...}
¨ untuk setiap quixel dalam tabel, cari:+/
jumlah (yaitu jumlah kebenaran)(?0)≥
0 <angka <1 acak lebih besar dari atau sama dengan+\
jumlah kumulatif(1+⍵)÷
nilai RGB yang bertambah dibagi dengan3+
tiga plus+/⍵
jumlah quixelCatatan: Dyalog APL memungkinkan Anda memilih antara Lehmer linear congruential generator , yang Mersenne Twister , dan System Operasi RNG ¹ ² .
Misalnya, gambar:
dapat memberi
Perhatikan bagaimana ketiga quixel "murni" itu runtuh ke warna masing-masing.
TryAPL online!
sumber
Mathematica, 53 byte
Fungsi anonim. Mengambil Mathematica
Image
sebagai input dan mengembalikanImage
output sebagai. Perhatikan bahwa gambar input harus memiliki ruang warna RGB.sumber
<...>~ImageApply~#
berlaku fungsi atas semua piksel dalam gambar, danRandomChoice[255#+1->IdentityMatrix@3]
menggunakan beberapa Ping tertimbang untuk menghasilkan deretan matriks identitas 3 × 3 (yaitu{1, 0, 0}
,{0, 1, 0}
, atau{0, 0, 1}
) yang bersesuaian dengan merah, hijau, atau biru.C #,
366243 byteTerima kasih banyak kepada @TheLethalCoder untuk bermain golf ini!
Ide dasar:
Contoh:
Mona lisa
Malam berbintang
Kegigihan Memori
Teddy Roosevelt VS. Kaki besar
Berikut adalah album imgur yang diperbarui dengan beberapa contoh lagi, untuk menunjukkan bahwa ini tidak deterministik.
sumber
var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{for(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(b.GetPixel(x,y)));return b;};
Dan masih ada perbaikan yang dapat dilakukanPython 2,
172166162 byteLevel indent kedua dan ketiga adalah tab mentah dan tab mentah ditambah spasi, masing-masing; ini memainkan sangat buruk dengan penurunan harga, sehingga tab telah digantikan oleh dua spasi.
Menggunakan format input / output yang serupa dengan jawaban APL Adm . Input adalah array 2D tupel RGB; output array 2D
0
,1
atau2
, mewakili merah, hijau, dan biru masing-masing. Sebagai contoh:Di bawah ini adalah jawaban Python 3 saya yang lebih lama menggunakan PIL.
Python 3 + PIL,
271250245243 byteIterasikan setiap piksel dan terapkan fungsi quixel untuknya. Mengambil nama file sebagai input dan menyimpan hasilnya
o.png
.Berikut ini beberapa hasilnya:
sumber
R, 58 byte
Input terdiri dari tiga vektor numerik yang dipegang
r
,g
danb
masing - masing.Kita tidak perlu menormalisasi probabilitas menjadi satu, yang terjadi secara otomatis di
rmultinom
.Output dari formulir
Di mana ada satu
1
di setiap kolom. Ada1
di baris pertama untuk "R" piksel, baris kedua untuk "G" dan baris ketiga untuk "B".sumber
Pyth -
1110 byteMengambil RGB 2d bitmap dan menghasilkan bitmap dengan warna 3-bit yang diindeks.
Tingkat bersarang itu melukai kepala saya.
Cobalah online di sini .
sumber
J,
201817 byteGambar dimasukkan sebagai array dengan dimensi h x w x 3 mewakili nilai RGB sebagai bilangan bulat dalam rentang 0 - 255. Outputnya adalah tabel dengan dimensi h x w di mana 1 adalah nilai rgb dari (255, 0, 0 ), 2 adalah (0, 255, 0), dan 3 adalah (0, 0, 255).
Penjelasan
Yang
()"1
menyatakan bahwa kata kerja ini harus diterapkan ke setiap array peringkat 1 di input, yang berarti bahwa itu akan berlaku untuk setiap piksel .sumber
Jelly ,
87 byteInput adalah daftar 3d dengan dimensi h x w x 3. Outputnya adalah daftar 2d dengan dimensi h x w di mana 1 mewakili nilai rgb (255, 0, 0), 2 adalah (0, 255, 0), dan 3 adalah (0, 0, 255).
Input sampel di bawah ini adalah bagian kiri-atas 4 x 4 dari gambar Mona Lisa.
Cobalah online!
Penjelasan
sumber
Python 3, 119 byte
Di mana
m
input diambil sebagai array 2-d piksel di mana setiap piksel adalah daftar formulir[r,g,b]
. Di setiap posisi piksel, kembali0,1,2
untuk mewakili(250,0,0), (0,250,0), and (0,0,250)
masing-masing.sumber
input
atau menjadikannya fungsi dan menganggapnyam
sebagai parameter.