Tantangan:
Ambil input dari dua gambar hitam-putih (satu warna) dan xor setiap piksel yang pertama, dengan masing-masing piksel yang kedua, tambahkan ke gambar baru dan hasilkan gambar baru.
Beberapa klarifikasi:
Ukuran gambar tidak masalah. Ekstensi / format gambar tidak masalah. Anda dapat membuatnya mengambil input ekstensi apa pun dan output ekstensi apa saja, selama ekstensi tersebut digunakan untuk menyimpan gambar digital. Anda juga dapat menggunakan grafik untuk menggambar output di misalnya: kotak gambar jika Anda inginkan. Jika tidak, simpan output sebagai file. Input dapat diambil sebagai jalur ke gambar, atau url.
Satu hal yang tidak dapat Anda lakukan adalah array I / O, mis. kembar tiga (R, G, B).
JANGAN mengutak-atik alpha . Seharusnya tidak xored, itu harus 255 (nilai maksimal) untuk setiap piksel.
Apa maksudmu untuk setiap piksel?
Anda tidak harus melakukannya dengan cara ini, tetapi satu cara untuk xor dua piksel adalah dengan mengambil nilai RGB dan xor R1 dengan R2, G1 dengan G2, B1 dengan B2, dan ambil hasilnya, yang merupakan warna baru Anda
Karena kita hanya memiliki dua warna, jelas ketika warnanya sama hasilnya akan (0,0,0) dan ketika mereka berbeda (putih adalah 255.255.255 dan hitam adalah 0,0,0) dalam kasus ini, hasilnya akan menjadi 255.255.255.
Jadi ketika dua piksel berbeda, hasilnya adalah piksel putih, atau piksel hitam
Contoh I / O:
Input 1: Input 2:
Keluaran:
Ini adalah kode-golf sehingga kode terpendek menang.
sumber
Jawaban:
Bahasa Ekspresi Fx (ImageMagick),
84 byteEDIT
u!=v
, -4 byteKarena "Bahasa Ekspresi Fx" tampaknya Turing lengkap, saya telah memprofil ulang jawaban saya untuk itu (adalah Unix Shell + Image Magick).
Golf
Fx tidak mendukung bitor XOR atau bitwise TIDAK , jadi saya telah menggunakan
!=
sebagai gantinya (yang berfungsi dengan baik untuk gambar BW murni).Input dan output bersifat implisit (dikendalikan oleh penerjemah).
Pemakaian
Utilitas konversi ImageMagick , berfungsi sebagai penerjemah "Bahasa Ekspresi Fx", ketika dipanggil dengan
-fx
, seperti yang diilustrasikan di bawah ini:Argumennya adalah:
Output sampel
sumber
Mathematica,
373415 byteTerima kasih kepada Ian Miller karena telah memotong jumlah byte lebih dari setengah!
Pada akhirnya, selalu ada builtin. Fungsi ini mengambil dua gambar sebagai input dan output gambar; itu melakukan sesuatu yang lebih rumit untuk gambar berwarna, tetapi untuk hitam-putih itu persis XOR.
Pengajuan sebelumnya:
Terima kasih kepada JungHwan Min karena telah menghemat 3 byte!
Fungsi tanpa nama yang mengambil pasangan gambar yang dipesan (dimensi yang kompatibel) sebagai input, dan mengembalikan gambar yang ditampilkan.
ImageData
hanya mendapatkan data piksel tanpa semua pembungkus / metadata; sayangnya ia mengembalikan bilangan real, sehinggaChop
diperlukan untuk membantu memperlakukannya sebagai bilangan bulat.BitXor
tidak persis apa yang tertulis di kaleng (dan benang di atas daftar bersarang), danImage
mengubah RGB yang dihasilkan kembali menjadi gambar.Pengajuan asli, yang mengambil input dari sepasang URL atau nama file:
sumber
ImageDifference[#,#2]&
Java,
336335328 byteTidak Terkumpul:
sumber
String[] y
. Hanya sedikit golf kecil.public
daripublic class M
untuk menyimpan 7 byte.png
tidak perluPython,
646057 byteSaya baru bermain golf, jadi ampunilah!
Terima kasih kepada @Blender dan @FlipTack karena telah menyelamatkan saya 7 byte!
sumber
from cv2 import*
harus mencukur 4 karakter.d=
:) juga, melakukanr=imread
dan kemudian menggunakanr
dua kali mungkin lebih pendekOktaf,
433834 byteTerima kasih kepada flawr, menyelamatkan saya 5 byte.
Berkat Luis Mendo menyelamatkan saya 4 byte disarankan untuk menggunakan
a~=b
bukanxor(a,b)
.Fungsi yang mengambil sebagai nama file input dari dua gambar input
a,b
dan menunjukkan hasilnya.Jawaban sebelumnya yang menulis ke file:
Fungsi yang mengambil sebagai nama file input dari dua gambar input
a,b
dan nama file dari gambar outputc
.Pemakaian:
Hasil disimpan dalam
out.png
sumber
imshow()
bukanimwrite()
?imread(a)~=imread(b)
(atau+(imread(a)~=imread(b))
jika input logis tidak diizinkanimshow
), bukanxor(...)
?JavaScript (ES6),
333320308299297 byte-
1220 byte disimpan oleh Ismael Miguel- 2 byte disimpan oleh user2428118
Mengharapkan gambar yang sudah dimuat, mengambil ukuran input pertama sebagai ukuran output dan mengembalikan elemen kanvas.
Tidak disatukan
PS: Pertama kali di kode-golf, jadi mungkin bisa golf lebih dan hitungan saya mungkin salah.
PP: kanvas konteks 2D memiliki
xor
[mode penulisan ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation ), tetapi bekerja pada nilai alpha ...Bisa lebih jauh di-golf (251 bytes) dengan ukuran tetap 300 * 150px (semua yang tersisa berwarna hitam) seperti pada jawaban Pemrosesan
Tampilkan cuplikan kode
sumber
c
denganc=i=>{with(document.createElement('canvas')){width=i.width,height=i.height;return getContext`2d`}}
dan Anda menghemat 16 byte.xor
persegi panjang hitam di atasxor
dua gambar untuk kembali ke 255 alpha?with
tetapi tampaknya cukup bagus untuk bermain golf ;-) Juga, lupa bahwa templat literalnya menghemat 2 byte ...(i,j)=>{c=i=>{with(document.createElement(C='canvas')){width=i.width,height=i.height;return getContext`2d`}},g=i=>{x=c(i);x.drawImage(i,0,0);return x.getImageData(0,0,i.width,i.height)},a=g(i),b=g(j).data,d=a.data,r=c(i);d.forEach((e,i)=>{d[i]=i%4>2?255:e^b[i]});r.putImageData(a,0,0);return r[C]}
Memproses,
124118117 bytePemakaian:
Tidak disatukan
sumber
MATL , 10 byte
Penjelasan
Ini pada dasarnya jawaban yang sama, seperti solusi Oktaf yang ada : Dibutuhkan nama file atau URL dari kedua gambar sebagai input dan menampilkan hasilnya di layar.
Pemakaian
sumber
Perl, 260 byte
251 byte kode + 9 byte untuk
-MImager
.Saya tidak yakin Perl adalah bahasa terbaik untuk tantangan ini, tetapi saya ingin tahu apa gambar komentar @ orlp. Dan itu membuat saya menggunakan sedikit dari modul grafis itu, itu hal yang baik. Dan saya menikmati mengkodekannya!
Versi yang lebih mudah dibaca:
Anda harus menginstal Imager jika ingin mencobanya, tetapi cukup sederhana: jalankan saja
(echo y;echo) | perl -MCPAN -e 'install Imager'
di terminal Anda.sumber
LÖVE2D , 199 byte
Cukup sederhana, mengambil dua file gambar pada baris perintah, menampilkan file bernama "Z" ke direktori Love. Juga berfungsi untuk gambar penuh warna!
sumber
J, 54 byte
Membawa dua argumen di mana masing-masing adalah jalur ke gambar input dalam
bmp
format. Setiap gambar dibaca sebagai matriks bilangan bulat RGB 24-bit dan diuraikan menjadi triplet nilai RGB 8-bit, tanda masing-masing diambil, dan dua matriks XOR bersama-sama. Hasilnya kemudian diskalakan oleh 255, dikonversi kembali dari triplet basis 256 angka menjadi bilangan bulat, dan ditulis kebmp
file output bernamao
.sumber
C, 189 byte
Beroperasi pada gambar PBM. Panggil
f(a, b, out)
dengan nama file input dan file output.Asumsi:
Kedua header gambar input identik (termasuk spasi), dan lebih kecil dari
9 * sizeof(int)
karakter.Kami menggunakan OS yang bagus yang membersihkan dan menutup file yang bocor.
EOF == -1
Tidak diikat dan dijelaskan: (garis miring terbalik dihilangkan)
C (spec-bending), 149 byte
Masih menggunakan file PBM, tetapi sekarang:
Gambar harus satu piksel tinggi dan lebar 8 piksel atau kurang, karena PBM mengemas 8 piksel dalam satu byte.
Header harus 7 byte (mis.
P4 8 1
Dengan spasi tambahan).Kedua file dicari ke depan sambil mengisi
t
dengan header mereka, kemudian byte terakhir dibaca, di-xor dan ditulis kembali. Mengambil keuntungan darifread
danfwrite
memiliki daftar parameter yang mirip dengan faktor ketiga operasi pada header di belakang makro yang sama.sumber
R, 45 byte
a
danb
mewakili nama file dari dua file gambar.Contoh:
Keluaran:
sumber
Memproses, 82 byte
Abuse Memproses fungsi menggambar yang luas untuk menghindari melakukan XOR. Memadukan dua gambar bersama dengan
DIFFERENCE
mode dan menariknya ke layar.Pemakaian
Tidak disatukan
sumber
32
bukanDIFFERENCE
. Ini akan menjadi tip yang bagus untuk bermain golf: codegolf.stackexchange.com/questions/26809/… :)C #, 233 byte
Terima kasih kepada Unknown6656 untuk tip yang tidak perlu argumen baris perintah. Program sekarang membaca dari file "a" dan "b" dan menulis ke file "c" dalam format yang sama dengan "a". Dinonaktifkan oleh satu kesalahan yang diperbaiki juga.
Ini menetapkan setiap piksel menjadi hitam jika warnanya sama, jika tidak putih.
Untuk menghemat byte, ia menangkap pengecualian batas, daripada memeriksa properti Width dan Height dari Bitmap. Setiap kali x keluar dari batas itu diatur ulang ke 0, dan y bertambah. Ketika y keluar dari batas, x adalah 0 dan loop terputus untuk menyimpan gambar dan berhenti.
Contoh kompilasi menggunakan csc dan jalankan menggunakan mono:
sumber
(string[] v)
di dalam deklarasi utama, karena C # tidak secara eksplisit membutuhkannya untuk menjalankan aplikasiClojure, 300 byte
Rip-off terang-terangan dari jawaban Java . Saya tidak tahu bagaimana melakukan tantangan, tetapi ingin tahu seberapa baik solusi Java diterjemahkan ke dalam Clojure. Itu cukup mudah. Kode ungolfed sebenarnya agak cantik.
Ini adalah tantangan kode-golf pertama yang saya lakukan termasuk impor. Mungkin ada cara untuk mengoptimalkannya untuk menghemat beberapa byte.
Tidak Terkumpul:
sumber
PHP,
246243 byteSaya mungkin bisa menurunkan ini lebih banyak.
Jalankan dari baris perintah seperti ini:
sumber
$i=imagecreatefrompng;$a=$i($argv[1])
satu byte lebih panjang dari$a=($i=imagecreatefrompng)($argv[1])
. Dan Anda bisa mencoba gambar palet dengan palet dua warna.($f=func)(params)
membutuhkan PHP 7.for(;$k<$w*$h;)
denganfor(;$y<$h;$y+=1/$w)
,$x=$k%$w, $y=$k++/$w
dengan$x, $y
dan yang terakhir$x
dengan$x++
. (dengan asumsi tidak ada kesalahan pembulatan untuk ukuran gambar yang masuk akal)Node.js,
156135 byteFile gambar input dan output harus dalam format PBM (P1), di mana baris pertama
P1 [width] [height]
, dan baris kedua adalah nilai ascii b / w tanpa spasi.Berikut adalah gambar input yang diikuti oleh output xor (32x32 piksel):
sumber