এক্সওআর দুটি একরঙা চিত্র


28

চ্যালেঞ্জ:

দুটি কালো এবং সাদা (একরঙা) চিত্রের ইনপুট নিন এবং দ্বিতীয়টির প্রতিটি পিক্সেল সহ প্রথমটির প্রতিটি পিক্সেল এক্সওর করুন, তাদের একটি নতুন চিত্রে যুক্ত করুন এবং নতুন চিত্রটিকে আউটপুট দিন।

কিছু স্পষ্টতা:

ছবির আকারে কিছু যায় আসে না। এক্সটেনশন / ইমেজ ফর্ম্যাট কোনও বিষয় নয়। ডিজিটাল চিত্রগুলি সংরক্ষণ করার জন্য এক্সটেনশনটি যতক্ষণ ব্যবহার করা হয় ততক্ষণ আপনি যেকোন এক্সটেনশন এবং কোনও এক্সটেনশান আউটপুট নিতে পারেন output আউটপুট আঁকতে আপনি গ্রাফিকগুলিও ব্যবহার করতে পারেন যেমন: আপনি যদি চান তবে একটি চিত্রবাক্স। অন্যথায়, ফাইল হিসাবে আউটপুট সংরক্ষণ করুন। ইনপুটটিকে ছবি বা url এর পথ হিসাবে নেওয়া যেতে পারে।

তবে আপনি যে জিনিসগুলি করতে পারবেন না তা হ'ল আই / ও অ্যারে, যেমন। ট্রিপল্টের (আর, জি, বি)।

আলফার সাথে হস্তক্ষেপ করবেন না । এটি জোর করা উচিত নয়, এটি প্রতিটি পিক্সেলের জন্য 255 (সর্বোচ্চ মান) হওয়া উচিত।

প্রতিটি পিক্সেল xor বলতে কী বোঝ?

আপনাকে এটি এইভাবে করতে হবে না, তবে দুটি পিক্সেল জোর করার একটি উপায় হ'ল তাদের আরজিবি মানগুলি এবং জি 2 এর সাথে আর 2, জি 2, বি 1 এর সাথে বি 1 এবং ফলাফল নেওয়া যা আপনার নতুন রঙ

যেহেতু আমাদের কেবল দুটি রঙ রয়েছে, স্পষ্টতই যখন রঙগুলি একই হয় ফলাফল হবে (0,0,0) এবং যখন তারা পৃথক হবে (সাদা 255,255,255 এবং কালো 0,0,0) এই ক্ষেত্রে ফলাফল হবে 255,255,255 হতে হবে।

সুতরাং যখন দুটি পিক্সেল আলাদা হয়, ফলাফলটি একটি সাদা পিক্সেল, অন্যথায় একটি কালো পিক্সেল

আই / ও উদাহরণ:


ইনপুট 1: ইনপুট 2:

ইনপুট ঘ ইনপুট 2


আউটপুট:

আউটপুট


এটি তাই সংক্ষিপ্ততম কোডের জয়।


আমরা কি ইউআরএল হিসাবে ইনপুট চিত্র নিতে পারি?
ক্রিটসি লিথোস

ক্রিটিক্সিলিথস হ্যাঁ, আমি এটিকে পরবর্তী দর্শকদের জন্য চ্যালেঞ্জ হিসাবে সম্পাদনা করেছি।
পি কেটিনোস

5
বোনাস চ্যালেঞ্জ: i.imgur.com/a0M6o9e.png এবং i.imgur.com/bP1TsjQ.png
orlp


উত্তর:


20

Fx এক্সপ্রেশন ভাষা (চিত্রম্যাগিক), 8 4 বাইট

সম্পাদনাগুলি

  • সরলিকৃত u!=v, -4 বাইট

যেহেতু "এফএক্স এক্সপ্রেশন ল্যাঙ্গুয়েজ" স্পষ্টতই ট্যুরিং সম্পূর্ণ, তাই আমি আমার উত্তরটি পুনরায় প্রোফাইল করলাম (এটি ছিল ইউনিক্স শেল + ইমেজ ম্যাজিক)।

Golfed

u!=v

এফএক্স বিটওয়াইস এক্সওর সমর্থন করে না বা বিটওয়াইস নয় , তাই আমি !=পরিবর্তে ব্যবহার করেছি (যা খাঁটি বিডাব্লু চিত্রের জন্য ঠিক কাজ করে)।

u=> stands for "first image in list"
v=> "second image in list"

ইনপুট এবং আউটপুট অন্তর্ভুক্ত (দোভাষী দ্বারা নিয়ন্ত্রিত)।

ব্যবহার

ইমেজম্যাগিক রূপান্তরিত ইউটিলিটি, -fxনীচে চিত্রিত হিসাবে , যখন অনুরোধ করা হয় তখন "Fx এক্সপ্রেশন ল্যাঙ্গুয়েজ" দোভাষী হিসাবে কাজ করে:

convert $1 $2 -fx u!=v $3

যুক্তিগুলি হ'ল:

  1. ইনপুট চিত্র
  2. ইনপুট চিত্র
  3. আউটপুট চিত্র (A ^ B)।

নমুনা আউটপুট

convert a.png b.png -fx u!=v o.png

এখানে চিত্র বর্ণনা লিখুন


15

গণিত, 37 34 15 বাইট

অর্ধেকের বেশি বাইট সংখ্যা কেটে দেওয়ার জন্য ইয়ান মিলারকে ধন্যবাদ!

ImageDifference

শেষ অবধি, সর্বদা একটি অন্তর্নির্মিত। এই ফাংশনটি দুটি চিত্রকে ইনপুট হিসাবে গ্রহণ করে এবং একটি চিত্রকে আউটপুট করে; এটি রঙিন চিত্রগুলির জন্য আরও জটিল কিছু করে তবে কালো-সাদা জন্য এটি ঠিক এক্সওআর।

পূর্ববর্তী জমা:

3 বাট বাঁচানোর জন্য জংহওয়ান মিনকে ধন্যবাদ!

Image[BitXor@@Chop[ImageData/@#]]&

নামহীন ফাংশন যা চিত্রগুলির একটি অর্ডারযুক্ত জুড়ি (সামঞ্জস্যপূর্ণ মাত্রাগুলি) ইনপুট হিসাবে গ্রহণ করে এবং প্রদর্শিত চিত্রটি প্রদান করে। ImageDataসমস্ত মোড়ক / মেটাডেটা ছাড়াই কেবল পিক্সেল ডেটা পায়; দুর্ভাগ্যক্রমে এটি আসল সংখ্যাগুলি ফেরত দেয়, তাই Chopতাদের পূর্ণসংখ্যা হিসাবে আচরণ করার জন্য তাদের সহায়তা করা প্রয়োজন। BitXorএটি টিনে যা বলেছে ঠিক তা করে (এবং নেস্টেড তালিকার উপরে থ্রেড), এবং Imageফলস্বরূপ আরজিবিকে আবার একটি চিত্রে পরিণত করে।

মূল জমা, যা ইউআরএল বা ফাইলের নামগুলির একটি অর্ডারযুক্ত জুড়ি নেয় একটি ইনপুট:

Image[BitXor@@(#~Import~"Data"&/@#)]&

4
বাইনারি চিত্রগুলির জন্য আপনি ব্যবহার করতে পারেন ImageDifference[#,#2]&
আয়ান মিলার

10

জাভা, 336 335 328 বাইট

import static javax.imageio.ImageIO.*;import java.io.*;public class M{static void main(String[]y)throws Exception{java.awt.image.BufferedImage a=read(new File("a.png"));for(int i=0,j;i<a.getHeight();i++)for(j=0;j<a.getWidth();)a.setRGB(j,i,a.getRGB(j,i)^read(new File("b.png")).getRGB(j++,i));write(a,"png",new File("c.png"));}}

Ungolfed:

import static javax.imageio.ImageIO.*;

import java.io.*;

class M {
    public static void main(String[]y) throws Exception {
        java.awt.image.BufferedImage a = read(new File("a.png"));
        for (int i = 0, j; i < a.getHeight(); i++)
            for (j = 0; j < a.getWidth(); ) a.setRGB(j, i, a.getRGB(j, i) ^ read(new File("b.png")).getRGB(j++, i));
        write(a, "png", new File("c.png"));
    }
}

1
এর মধ্যে স্থানটি সরিয়ে আপনি একটি বাইট সংরক্ষণ করতে পারেন String[] y। মাত্র একটি ছোট্ট গল্ফ।
হাইপারনিউট্রিনো

ওহ ডাং তুমি ঠিক বলেছ খুব ইদানীং গল্ফ করছে না, পুরোপুরি সেইটিকে উপেক্ষা করে। চিয়ার্স।
মার্ভ

3
আপনি 7 বাইট সংরক্ষণ করতে publicথেকে অপসারণ করতে পারেনpublic class M
ক্রিটিক্সী লিথোস

ফাইলের সম্প্রসারণের প্রয়োজন .pngহবে না
হান্ট্রো

আপনি ... "আমি ++ <a.getHeight ();)" করে একটি বাইট সংরক্ষণ করতে পারেন
16'17

9

পাইথন, 64 60 57 বাইট

আমি গল্ফ করতে নতুন তাই কিছু দয়া আছে!

from cv2 import*
r=imread;lambda a,b:imshow('c',r(a)^r(b))

আমাকে 7 বাইট বাঁচানোর জন্য ব্লেন্ডার এবং @ ফ্লিপট্যাককে ধন্যবাদ!


1
ব্যবহারে from cv2 import*4 টি অক্ষর শেভ করা উচিত।
ব্লেন্ডার

1
এখানে, নামবিহীন ল্যাম্বডাসগুলি ফাংশন উত্তরের জন্য অনুমতি দেওয়া হয়েছে, তাই আপনি d=:) r=imreadr
এগুলি

7

অক্টাভা, 43 38 34 বাইট

@(a,b)imshow(imread(a)~=imread(b))

Flawr ধন্যবাদ আমাকে 5 বাইট সংরক্ষণ।

লুইস মেন্ডোকে ধন্যবাদ আমাকে a~=bপরিবর্তে 4 টি বাইট ব্যবহারের পরামর্শ দিয়েছিল xor(a,b)

একটি ফাংশন যা দুটি ইনপুট চিত্রগুলির ইনপুট ফাইলের নাম হিসাবে নেয় a,bএবং ফলাফলটি দেখায়।

পূর্ববর্তী উত্তর যা কোনও ফাইলে লেখেন:

@(a,b,c)imwrite(imread(a)~=imread(b),c)

একটি ফাংশন যা দুটি ইনপুট চিত্রের ইনপুট a,bফাইলের নাম এবং আউটপুট চিত্রের ফাইলের নাম হিসাবে গ্রহণ করে c

ব্যবহার:

#two test images that used in the question
#https://i.stack.imgur.com/UbbfM.png
#https://i.stack.imgur.com/YyZG2.png
A = "UbbfM.png"; 
B = "YyZG2.png"; 
C = "out.png";
(@(a,b,c)imwrite(imread(a)~=imread(b),c))(A,B,C)

ফলাফল সংরক্ষণ করা হয় out.png


1
আপনি ব্যবহার করা যায়নি imshow()পরিবর্তে imwrite()?
flawr

@ ফ্লোয়ার অবশ্যই এটি কিছু বাইট সংরক্ষণ করবে :)
rahnema1

1
আপনি কি imread(a)~=imread(b)(বা +(imread(a)~=imread(b))লজিক্যাল ইনপুট দ্বারা অনুমতি দেওয়া হয় না imshow) পরিবর্তে ব্যবহার করতে পারবেন না xor(...)?
লুইস মেন্ডো

1
@ লুইস মেন্ডো ধন্যবাদ, আমি সবসময় আপনার মন্তব্য থেকে শিখি!
rahnema1

7

জাভাস্ক্রিপ্ট (ES6), 333 320 308 299 297 বাইট

- ইসমাইল মিগুয়েল দ্বারা 12 টি 20 বাইট সংরক্ষণ করা হয়েছে
- ব্যবহারকারী 2428118 দ্বারা 2 বাইট সংরক্ষণ করা হয়েছে

ইতিমধ্যে লোড হওয়া চিত্রগুলি আশা করে, প্রথম ইনপুটটির আকার আউটপুট আকার হিসাবে গ্রহণ করে এবং একটি ক্যানভাস উপাদান দেয় returns

(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]}

let func = (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?-1:e^b[i]});r.putImageData(a,0,0);return r[C]}

window.onload =_=>{
  document.body.appendChild(func(img1, img2));
  }
<img id="img1" crossOrigin="anonymous" src="https://dl.dropboxusercontent.com/s/nnfkzpvabk77pnl/UbbfM.png">
<img id="img2" crossOrigin="anonymous" src="https://dl.dropboxusercontent.com/s/58euf43vcb9pvpa/YyZG2.png">

Ungolfed

(i, j) => {
  c = i => { // an helper to create a canvas object
      with(document.createElement(C='canvas')) {
        width= i.width,
        height= i.height;
        return getContext`2d`
      }
    },
    g = i => { // an helper to get an imageData object
      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) => { // loop through all rgba values
    d[i] = i % 4 > 2 ? 255 : e ^ b[i] // we need to avoid alpha channel...
  });
  r.putImageData(a, 0, 0);
  return r[C]
}

PS: কোড-গল্ফে প্রথমবার, সুতরাং এটি সম্ভবত আরও গল্ফ করা যেতে পারে এবং আমার গণনা ভুল হতে পারে।

পিপি: ক্যানভাস 2 ডি প্রসঙ্গে একটি xor[কম্পোজিটিং মোড রয়েছে ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation ) তবে এটি আলফা মানগুলিতে কাজ করে ...

প্রসেসিং উত্তরের হিসাবে নির্দিষ্ট 300 * 150px আকারের (বাকি সমস্ত কালো) আরও গল্ফ (251 বাইট) করা যেতে পারে

(i,j)=>{c=i=>{return document.createElement(C='canvas').getContext('2d')},g=i=>{x=c(i);x.drawImage(i,0,0);return x.getImageData(0,0,W=300,W)},a=g(i),b=g(j).data,d=a.data,r=c(i);d.forEach((e,i)=>{d[i]=i%4>2?W:e^b[i]});r.putImageData(a,0,0);return r[C]}


1
এর cসাথে ফাংশনটি প্রতিস্থাপন করুন c=i=>{with(document.createElement('canvas')){width=i.width,height=i.height;return getContext`2d`}}এবং আপনি 16 বাইট সংরক্ষণ করুন।
ইসমাইল মিগুয়েল

255 আলফা ফিরে পাওয়ার জন্য আপনি দুটি চিত্রের xorউপরের কোনও কালো আয়তক্ষেত্রটি করতে পারেন না xor?
নীল

@ ইসমাইল মিগুয়েল, ধন্যবাদ, ব্যবহারের জন্য ব্যবহৃত হয়নি withতবে গল্ফিংয়ের জন্য বেশ ভাল বলে মনে হচ্ছে ;-) এছাড়াও, টেমপ্লেট আক্ষরিক 2 বাইট সংরক্ষণ করে ভুলে গেছে ...
কাইডো

@ নীল, আমি নিশ্চিত নই, এখানে আমরা একটি 8 বিটের অ্যারে পেয়েছি, সম্ভবত একটি 32 বাইট রয়েছে, এটি করতে পারে তবে এটি আরও বেশি চর গ্রহণ করবে ...
কাইডো

1
4 টি বাইট সংরক্ষণ করুন:(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]}
ব্যবহারকারী 2428118

7

প্রক্রিয়াজাতকরণ, 124 118 117 বাইট

void m(PImage a,PImage q){for(int i=0,j;i<400;i++)for(j=0;j<400;point(i,j++))stroke((a.get(i,j)^q.get(i,j))<9?0:-1);}

ব্যবহার:

দ্রষ্টব্য: এই কোডটি চিত্রগুলি সমর্থন করতে পারে 400px(একই বিটকাউন্টের জন্য 999 অবধি পরিবর্তনগুলি সমর্থন করতে পারে)। যে কোনও "অবশিষ্ট" স্থান কালো বর্ণের হবে, সুতরাং সর্বোত্তম ফলাফলের জন্য চিত্রের আকার কোডের মাত্রাগুলির সমান আকারের হওয়া উচিত ( size()আপডেট হওয়া মাত্রাগুলিগুলির সাথে পরিবর্তনও করা দরকার)

m(loadImage("http://i.imgur.com/a0M6o9e.png"),loadImage("http://i.imgur.com/bP1TsjQ.png"));

এখানে চিত্র বর্ণনা লিখুন

m(loadImage("https://i.stack.imgur.com/UbbfM.png"),loadImage("https://i.stack.imgur.com/YyZG2.png"));

এখানে চিত্র বর্ণনা লিখুন

Ungolfed

void Q106945(PImage a,PImage q){     // takes two images as input
  for(int i=0,j;i<400;i++)           // looping through the x-coordinates
    for(j=0;j<400;point(i,j++))      // looping through the y-coordinates
      stroke((a.get(i,j)^q.get(i,j))<9?0:-1);
/*
Here we have to colour the point according to the xor. So we do a simple 
a.get(i,j)^q.get(i,j). But since the alpha gets xored, instead of outputting white, this
outputs a colour with alpha 0 (completely invisible). So to fix this I have a ternary that
checks the value and changes the colour accordingly. At the end of all this, the third 
statement of the for-loop with j gets triggered since all this code is in this for-loop. 
Now we draw a point over the coordinate with the colour we have chosen before.
*/
}

7

এমএটিএল , 10 বাইট

YiiYiY~1YG

ব্যাখ্যা

এটি বিদ্যমান অষ্টাভে সমাধান হিসাবে মূলত একই উত্তর : এটি উভয় চিত্রের ফাইলের নাম বা ইউআরএলকে ইনপুট হিসাবে গ্রহণ করে এবং ফলাফলটি স্ক্রিনে প্রদর্শন করে।

Yi    % Read first image from the URL or filename (implicit input)
i     % Get the second URL or filename as input
Yi    % Read that second image
Y~    % XOR the two images
1     % Push 1 (needed to make YG act as imagesc)
YG    % Display result using the MATLAB imagesc function

ব্যবহার

>> matl
 > YiiYiY~1YG
 > 
> 'https://i.stack.imgur.com/UbbfM.png'
> 'https://i.stack.imgur.com/YyZG2.png'

1
এটি 10 ​​বাইট
এরিক আউটগল্ফার

3

পার্ল, 260 বাইট

251 কোডের বাইট +9 বাইটের জন্য -MImager

($i,$j)=map{new Imager(file,pop)}0,1;$p=getpixel;for$x(0..$i->getwidth()-1){$i->setpixel(x=>$x,y=>$_,color=>[map{($j->$p(%t)->rgba)[$c++%3]^$_?0:255}($i->$p(%t=(x=>$x,y=>$_,type=>'8bit'))->rgba)[0..2]])for 0..$i->getheight()-1}$i->write(file=>'a.png')

আমি নিশ্চিত নই যে পার্ল এই চ্যালেঞ্জের জন্য সেরা ভাষা, তবে আমি জানতে চেয়েছিলাম @ অর্ল্পের মন্তব্যের চিত্রটি কী ছিল। এবং এটি আমাকে সেই গ্রাফিক মডিউলগুলির সামান্য ব্যবহার করতে সহায়তা করে, এটি একটি ভাল জিনিস। এবং আমি এটি কোডিং উপভোগ করেছি!

আরও পঠনযোগ্য সংস্করণ:

ইমেজার ব্যবহার ; 
$ img1 = নতুন ইমেজার ( ফাইল =>  $ এআরজিভি [ 1 ] ); 
$ img2 = নতুন ইমেজার ( ফাইল => $ এআরজিভি [ 0 ] );  

জন্য $ x এর ( 0 .. $ img1 -> getwidth - () 1 ) { জন্য $ Y ( 0 .. $ img1 -> getheight () - 1 ) { ( $ R1 , $ G1 , $ B1 ) = $ img1 - > গেটপিক্সেল ( x => $ x , y => $ y , টাইপ => "8 বিট" ) -> আরজিবা (); ( $ r2 , $ g2)    
        
       
    , $ বি 2 ) = $ ইমজি 2 -> গেটপিক্সেল ( x => $ x , y => $ y , টাইপ => "8 বিট" ) -> আরজিবা (); 
    $ r = $ r1 ^ 2 r2 ? 0 : 255 ; 
    $ g = $ g1 ^ $ g2 ? 0 : 255 ; 
    $ খ = $ B1 ^ $ B2 ? 0 : 255 ; 
    $ img1                -> সেটপিক্সেল ( x => $ x , y => $ y , রঙ => [ $ আর , $ জি , $ বি ] ); } } 
$ Img1 -> লেখ ( ফাইল => 'a.png' )  
    
  

আপনি চেষ্টা করতে চাইলে আপনাকে ইমাজার ইনস্টল করতে হবে তবে এটি বেশ সহজ: (echo y;echo) | perl -MCPAN -e 'install Imager'আপনার টার্মিনালটিতে চালান ।


3

LÖVE2D , 199 বাইট

u,c=... i=love.image.newImageData a=math.abs X=i(u)Y=i(c)Z=i(X:getDimensions())Z:mapPixel(function(x,y)r,g,b=X:getPixel(x,y)R,G,B=Y:getPixel(x,y)return a(r-R),a(g-G),a(b-B)end)Z:encode("png","Z")

যথেষ্ট সহজ, কমান্ড লাইনে দুটি চিত্র ফাইল নেয়, "Z" নামে একটি ফাইলকে প্রেমের ডিরেক্টরিতে আউটপুট দেয়। পুরো রঙের চিত্রগুলির জন্যও কাজ করে!


1
@ এমডিএক্সএফ love2d.org
এটিাকো

2

জে, 54 বাইট

load'bmp'
'o'writebmp~256#.255*~:&*&((3#256)#:readbmp)

bmpফর্ম্যাটে প্রতিটি ইনপুট চিত্রের পথ যেখানে দুটি আর্গুমেন্ট নেয় । প্রতিটি চিত্র 24-বিট আরজিবি পূর্ণসংখ্যার ম্যাট্রিক্স হিসাবে পড়া হয় এবং 8-বিট আরজিবি মানগুলির একটি ট্রিপলে বিভক্ত হয়, প্রতিটিটির সাইন নেওয়া হয় এবং দুটি ম্যাট্রিক দুটি একসাথে XOR'd হয়। এরপরে ফলাফলটি 255 দ্বারা মাপানো হয়, বেজ 256 সংখ্যার একটি ট্রিপল থেকে আবার পূর্ণসংখ্যায় রূপান্তরিত হয় এবং একটি আউটপুট bmpনামের নামের লিখিত হয় o


2

সি, 189 বাইট

#include<stdio.h>
s,t[9];
#define o(f,p)int*f=fopen(p,"ab+");
#define f(p,q,r)o(a,p)o(b,q)o(c,r)fscanf(a,"%*s %*d %*d %n",&s);for(fwrite(t,1,fread(t,1,s,b),c);s=~getc(a);putc(~s^getc(b),c))

পিবিএম চিত্রগুলিতে কাজ করে। কলf(a, b, out)উভয় ইনপুট ফাইলের নাম এবং আউটপুট ফাইলের সাথে করুন।

অনুমিতি:

  • উভয় ইনপুট চিত্রের শিরোনাম অভিন্ন (সাদা স্থান অন্তর্ভুক্ত), এবং এর চেয়ে কম 9 * sizeof(int) অক্ষরের

  • আমরা একটি দুর্দান্ত ওএসে রয়েছি যা ফাঁস হওয়া ফাইলগুলি ফ্লাশ করে এবং বন্ধ করে দেয়।

  • EOF == -1

অসম্পূর্ণ এবং ব্যাখ্যা: (ব্যাকস্ল্যাশ বাদ

// Scratch variable and "big enough" buffer
s, t[9];

// Opens a file in read/append binary mode
#define o(f,p)int*f=fopen(p,"ab+");

#define f(p, q, r)

    // Open the three file pointers a, b, c from the paths p, q, r
    o(a, p)
    o(b, q)
    o(c, r)

    // Read from a to locate the end of the PBM header
    fscanf(a, "%*s %*d %*d %n", &s);

    for(
        // Read the header from b into the buffer,
        // then write it back from the buffer to c
        fwrite(t, 1, fread(t, 1, s, b), c);

        // Loop condition: get the next byte from a
        // and check for EOF with a bitwise-not
        // (Assumes that EOF == -1)
        s = ~getc(a);

        // Loop increment: get the next byte from b,
        // flip s back, xor and write to c
        putc(~s ^ getc(b), c)

    ) // Snatch the semicolon from the call syntax :)

সি (স্পেস-নমন), 149 বাইট

#include<stdio.h>
t[7];
#define o(f,p,u)int*f=fopen(p,"ab+");u(t,1,7,f);
#define f(p,q,r)o(a,p,fread)o(b,q,fread)o(c,r,fwrite)putc(getc(a)^getc(b),c)

এখনও পিবিএম ফাইলগুলি ব্যবহার করে তবে এখন:

  • চিত্রটি এক পিক্সেল উচ্চ এবং 8 পিক্সেল প্রশস্ত বা কম হতে হবে, কারণ পিবিএম একটি বাইটে 8 পিক্সেল প্যাক করে।

  • শিরোনামটি 7 বাইট হতে হবে (যেমন P4 8 1একটি পিছনের স্থান সহ)।

উভয় ফাইলই tতাদের শিরোনামটি পূরণ করার সময় সামনে অগ্রিম সন্ধান করা হয়, তারপরে শেষ বাইটগুলি পড়ে, xor'd এবং ফিরে লিখিত হয়। একই ম্যাক্রোর পিছনে শিরোনামে সমস্ত তিনটি ক্রিয়াকলাপকে ফ্যাক্টর করতে একই প্যারামিটার তালিকাগুলির সুবিধা freadও গ্রহণ করে fwrite


2

আর, 45 বাইট

p=png::readPNG;plot(as.raster(+(p(a)!=p(b))))

aএবং b দুটি চিত্রের ফাইলের ফাইলের নাম উপস্থাপন করুন।

উদাহরণ:

a <- "YyZG2.png"
b <- "UbbfM.png"
p=png::readPNG;plot(as.raster(+(p(a)!=p(b))))

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


2

প্রক্রিয়াজাতকরণ, 82 বাইট

void x(PImage a,PImage b){int x=b.width;b.blend(a,0,0,x,x,0,0,x,x,32);set(0,0,b);}

কোনও XORing আসলে এড়াতে আপত্তিজনক প্রসেসিংয়ের বিস্তৃত অঙ্কন কাজগুলি। দুটি চিত্র একসাথে মিশ্রিত করেDIFFERENCE মোডের এবং তাদের স্ক্রিনে টান।

ব্যবহার

x(loadImage("http://i.imgur.com/a0M6o9e.png"),loadImage("http://i.imgur.com/bP1TsjQ.png"));

Ungolfed

void xor(PImage a, PImage b) {
  int x = a.width;
  b.blend(a, 0, 0, x, x, 0, 0, x, x, DIFFERENCE);
  set(0, 0, b);
}

দুর্দান্ত গল্ফ! এটি সত্যিই স্মার্ট যা আপনি 32পরিবর্তে ব্যবহার করেছেন DIFFERENCE। গল্ফিংয়ের জন্য এটি একটি দুর্দান্ত টিপ হবে: কোডগল্ফ.স্ট্যাকেক্সেঞ্জিং
:: প্রশ্নগুলি

2

সি #, 233 বাইট

using System.Drawing;class C{static void Main(){Bitmap
a=new Bitmap("a"),b=new Bitmap("b");for(int
x=0,y=0;;)try{a.SetPixel(x,y,a.GetPixel(x,y)==b.GetPixel(x,y)?Color.Black:Color.White);x++;}catch{if(x<1)break;x=0;++y;}a.Save("c");}}

অজ্ঞাত 6656 টিপটির জন্য ধন্যবাদ যে কমান্ড লাইনের আর্গুমেন্টগুলি প্রয়োজনীয় নয় not প্রোগ্রামটি এখন "a" এবং "b" ফাইলগুলি থেকে পড়ে এবং "c" হিসাবে একই ফর্ম্যাটে "c" ফাইল করতে লিখেছে। এক ত্রুটি দ্বারা বন্ধও স্থির।

যদি রঙ একই হয় তবে অন্যথায় সাদা প্রতিটি পিক্সেলকে কালো করে দেয় sets

বাইটগুলি সংরক্ষণ করতে, এটি বিটম্যাপের প্রস্থ এবং উচ্চতা বৈশিষ্ট্যগুলি পরীক্ষা করার পরিবর্তে সীমা ব্যতিক্রমগুলির বাইরে চলে। প্রতিবার x সীমার বাইরে চলে গেলে এটি 0 এ পুনরায় সেট করা হয় এবং y বৃদ্ধি হয়। যখন y সীমা ছাড়িয়ে যায়, এক্স 0 হয় এবং লুপটি ব্রেক করে ছবিটি সংরক্ষণ করে প্রস্থান করে।

উদাহরণস্বরূপ সিসিএস ব্যবহার করে সংকলন করুন এবং মনো ব্যবহার করে চালান:

csc xor.cs

mono xor.exe

আপনি (string[] v)মূল ঘোষণার ভিতরে টোকেনটি ফেলে দিতে পারেন , কারণ অ্যাপ্লিকেশনটি চালানোর জন্য সি # এর স্পষ্টভাবে প্রয়োজন নেই
অজানা 6656

1

ক্লোজার, 300 বাইট

(ns s(:import[java.io File][java.awt.image BufferedImage][javax.imageio ImageIO]))(defn -main[](let[a(ImageIO/read(File."a.png"))](doseq[i(range(.getHeight a))j(range(.getWidth a))](.setRGB a j i(bit-xor(.getRGB a j i)(.getRGB(ImageIO/read(File."b.png")) j i))))(ImageIO/write a"png"(File."c.png"))))

জাভা জবাব উত্তর ব্লাট্যান্ট । আমি কীভাবে চ্যালেঞ্জ করব তা জানতাম না, তবে কৌতূহল ছিল জাভা সমাধান ক্লোজুরেতে কতটা ভাল অনুবাদ হয়েছিল। এটা বেশ সোজা ছিল। অবহেলিত কোডটি আসলে একরকম সুন্দর।

আমি প্রথম কোড-গল্ফ চ্যালেঞ্জটি করেছি যা আমদানি অন্তর্ভুক্ত করেছে। কিছু বাইট সংরক্ষণ করতে তাদের অনুকূলিত করার একটি উপায় সম্ভবত রয়েছে।

Ungolfed:

(ns bits.golf.bit-or-picts
  (:import [java.io File]
           [java.awt.image BufferedImage]
           [javax.imageio ImageIO]))

(defn -main []
  (let [^BufferedImage a (ImageIO/read (File. "a.png"))
        ^BufferedImage b (ImageIO/read (File. "b.png"))]
    (doseq [i (range (.getHeight a))
            j (range (.getWidth a))]
      (.setRGB a j i
                (bit-xor (.getRGB a j i)
                         (.getRGB b j i))))
    (ImageIO/write a "png" (File. "c.png"))))

1

পিএইচপি, 246 243 বাইট

আমি সম্ভবত এটি আরও নিচে গল্ফ করতে পারেন।

$o=imagecreatetruecolor($w=max(imagesx($a=($i=imagecreatefrompng)($argv[1])),imagesx($b=$i($argv[2]))),$h=max(imagesy($a),imagesy($b)));for(;$k<$w*$h;)imagesetpixel($o,$x=$k%$w,$y=$k++/$w,($t=imagecolorat)($a,$x,$y)^$t($b,$x,$y));imagepng($o);

কমান্ড লাইন থেকে এটি চালান:

php -d error_reporting=0 -r "$o=imagecreatetruecolor($w=max(imagesx($a=($i=imagecreatefrompng)($argv[1])),imagesx($b=$i($argv[2]))),$h=max(imagesy($a),imagesy($b)));for(;$k<$w*$h;)imagesetpixel($o,$x=$k%$w,$y=$k++/$w,($t=imagecolorat)($a,$x,$y)^$t($b,$x,$y));imagepng($o);" "http://i.stack.imgur.com/UbbfM.png" "http://i.stack.imgur.com/YyZG2.png" > output.png

তাদের প্রথম উপস্থিতিতে ফাংশন নাম ভেরিয়েবলগুলি সংজ্ঞায়িত করা সাহায্য করতে পারে: এর $i=imagecreatefrompng;$a=$i($argv[1])চেয়ে এক বাইট দীর্ঘ $a=($i=imagecreatefrompng)($argv[1])। এবং আপনি দুটি রঙের প্যালেট সহ প্যালেট চিত্রগুলি চেষ্টা করতে পারেন।
তিতাস

আমি প্রথম সংক্ষেপে এটি সংজ্ঞায়িত করার চেষ্টা করেছি কিন্তু আমি মারাত্মক ত্রুটি পেতে থাকি। আমার সময় পেলে আবার চেষ্টা করব। সম্ভবত আমি এটি সঠিকভাবে করিনি।
কোডস জনসন

($f=func)(params)পিএইচপি 7 প্রয়োজন
টাইটাস

টাইটাস আহ ঠিক আছে ধন্যবাদ এটি আমাকে 3 বাইট নিচে নিয়ে গেছে।
কোডস জনসন

এখানে 7 আরো বাইট আছেন: প্রতিস্থাপন for(;$k<$w*$h;)সঙ্গে for(;$y<$h;$y+=1/$w), $x=$k%$w, $y=$k++/$w সঙ্গে $x, $yএবং শেষ $xসঙ্গে $x++। (ধরে
নিলাম যে

0

নোড.জেএস, 156 135 বাইট

(a,b)=>(f=require('fs')).writeFile(a+b,((s=f.readFileSync)(a)+'').replace(/\d+$/,(c,d)=>[...c].map((e,f)=>+!(e^(s(b)+b)[f+d])).join``))

ইনপুট এবং আউটপুট চিত্র ফাইলগুলি PBM (P1) ফর্ম্যাটে হওয়া উচিত , যেখানে প্রথম লাইনটি রয়েছে P1 [width] [height]এবং দ্বিতীয় লাইনটি ফাঁকা ছাড়াই b / w ascii মান হবে।

এখানে জোর আউটপুট (32x32 পিক্সেল) এর পরে একটি ইনপুট চিত্র রয়েছে:

ইনপুট # 1 ইনপুট # 2 আউটপুট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.