একটি ছবিতে আপনার কোডটি সংকুচিত করুন


17

এটি একটি প্রকরণ।

ভূমিকা

আমরা সবাই সংক্ষিপ্ত কোড লিখি কারণ কিছু অস্পষ্ট কারণ , তবে আমরা যাই করি না কেন, কমপক্ষে 144 পিক্সেল / বাইট (12px ফন্ট সহ) গ্রহণ করব। তবে কি হবে, যদি আমরা ছবিগুলিতে আমাদের কোডটি এনকোড করব? এটি আজ আপনার কাজ।

চ্যালেঞ্জ

আপনার কাজটি হ'ল আপনার নিজস্ব উত্স কোডে পড়ুন (অ-যথাযথ কুইনগুলি অনুমোদিত, যেমন আক্ষরিক অর্থে উত্স ফাইলটি পড়া) এবং এটি থেকে একটি চিত্র তৈরি করুন, পিক্সেলের লাল, সবুজ এবং নীল উপাদানগুলি ASCII এর ভিত্তিতে সেট করে create চরিত্রের মান।

উদাহরণ:

আমাদের কাছে "হ্যালো ওয়ার্ল্ড!" স্ট্রিং রয়েছে!

Hello world!

আসুন এএসসিআইআই মানগুলিতে রূপান্তর করুন:

72 101 108 108 111 32 119 111 114 108 100 33

এতে আরজিবি মানগুলি মানচিত্র করুন (যদি উত্স কোডের দৈর্ঘ্য 3 দ্বারা বিভাজ্য না হয়, তবে 0 টি বাকী অক্ষর হিসাবে ব্যবহার করুন):

 __________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------

এরপরে আমরা এর থেকে ক্ষুদ্রতম অঞ্চলটি দিয়ে চিত্রটি তৈরি করি। আমাদের কাছে আরজিবি মানগুলির 4 টি সেট রয়েছে, তাই ক্ষুদ্রতম চিত্রটি 2 * 2 চিত্র হবে, উপরের বাম পিক্সেলটি ডানদিকে যাবে:

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

এবং আমরা এই ভয়াবহ রঙিন চিত্র পেয়েছি (পুনরায় আকার দিন, তাই এটি কমপক্ষে দৃশ্যমান হয়, এটি কতটা ছোট হতে পারে তাও প্রমাণ করে)

বিধি / অতিরিক্ত তথ্য

  • কোনও ইনপুট নেই
  • আউটপুটটি আলাদা ফাইল হিসাবে বা পৃথক উইন্ডোতে হওয়া উচিত।
  • মাল্টিবাইট অক্ষরের জন্য, অক্ষরটি 2 বাইটে বিভক্ত করুন।
  • উত্স কোডটি কমপক্ষে 1 বাইট দীর্ঘ হতে হবে
  • চিত্রটি সম্ভাব্য মাপের এক হতে হবে, যেটির প্রস্থ / উচ্চতা অনুপাতটি 1 হয়
  • চিত্রটিতে পিক্সেল গণনাটি অবশ্যই সিল (বাইট কাউন্ট / 3) হওয়া উচিত, কোনও অতিরিক্ত পিক্সেল যুক্ত করা উচিত নয়

স্কোরিং

এটি একটি , তাই বাইটের মধ্যে ক্ষুদ্রতম উত্তরটি জিতল।


7
পিট জমা দেওয়ার জন্য অপেক্ষা করা হচ্ছে ...: পি
Rɪᴋᴇʀ

3
"ক্ষুদ্রতম চিত্র" কী? সবচেয়ে ছোট অঞ্চল? এটি কি সর্বদা একটি সরলরেখা হবে না? ছবিটি কি বর্গক্ষেত্র হতে হবে? যদি তা হয় তবে আমরা স্কোরগুলিতে ফিট না হওয়া পিক্সেলগুলি কীভাবে প্যাড করব? আপনি কিছু নমুনা সমাধান সরবরাহ করতে পারেন? (সোর্স কোডের সাথে অগত্যা, কেবল কোনও স্ট্রিং নয়)
ডিজেএমসিএমহেম

2
এখনও সুপার পরিষ্কার নয়। কোনটি আরও গুরুত্বপূর্ণ, ক্ষুদ্রতম অঞ্চল বা ক্ষুদ্রতম প্রস্থের উচ্চতা অনুপাতের? যদি এটি তিনটি বা অন্য কোনও প্রধান সংখ্যা পিক্সেল হত? পিক্সেল অনুপস্থিত (ক্ষুদ্রতম অনুপাত) সহ আমার কি 1x3 (ক্ষুদ্রতম অঞ্চল) বা 2x2 করা উচিত? অনুপস্থিত পিক্সেলটি কী হওয়া উচিত?
ডিজেএমসিএমহেম

3
এটি কি স্যান্ডবক্সে ছিল? দেখে মনে হচ্ছে এটি সেখানে কিছু সময় ব্যবহার করতে পারত।
মরগান থ্রাপ

1
ক্ষুদ্রতম প্রস্থ / উচ্চতার অনুপাতটি কি প্রযুক্তিগতভাবে সর্বদা হয়ে ওঠে না height = Nএবং width = 1? আমার মনে হয় আপনি প্রস্থ / উচ্চতাটির নিকটতম অর্থ 1. এর কাছাকাছি
রয়েছেন

উত্তর:


1

আসলে, 12 বাইট

Q"P6 4 1 255

এটি অনলাইন চেষ্টা করুন!

এই প্রোগ্রামটি সিরিয়াসলিও কাজ করে।

এই প্রোগ্রামটি একটি পিপিএম চিত্র আউটপুট করে , যা ডিফল্টরূপে গ্রহণযোগ্য

আউটপুট চিত্র (50x ছোট করে দেওয়া হয়েছে):

আউটপুট

ব্যাখ্যা:

Q"P6 4 1 255 
Q             push source code
 "P6 4 1 255  push header for a 4x1 raw (type P6) 8-bit PPM image (the closing " is implicitly added at EOF)

2
ওপি: আউটপুটটি পৃথক ফাইল হিসাবে হওয়া উচিত । এটি কেবল ফাইলের সামগ্রীগুলি STDOUT এ আউটপুট দেয় না ?
অ্যাডম

8

ম্যাটল্যাব, 81 72 69 বাইট

@()image(shiftdim(reshape(evalin('base','char(ans)'),3,1,23)/255,1.))

এটি একটি বেনামে ফাংশন তৈরি করে যা কমান্ড উইন্ডোতে আটকানো এবং ব্যবহার করে চালানো যেতে পারে ans()। যখন চালান এটি একটি 23-পিক্সেলের চিত্র তৈরি করে (একটি প্রাথমিক) অতএব সর্বাধিক বর্গ প্রতিনিধিত্ব পিক্সেলের একটি সাধারণ অ্যারে।

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

ব্যাখ্যা

কমান্ড উইন্ডোতে আটকানো হলে, বেনামে ফাংশনটি স্বয়ংক্রিয়ভাবে ভেরিয়েবলের কাছে নিজেকে নির্ধারণ করে ans। তারপরে বেনামে ফাংশনটির মধ্যে থেকে আমরা ব্যবহার করি:

evalin('base', 'char(ans)')

যা char(ans)বেনামে ফাংশনটির স্থানীয় নেমস্পেসের পরিবর্তে কমান্ড উইন্ডোর নেমস্পেসের মধ্যে মূল্যায়ন করে। সুতরাং এটি বেনামে ফাংশনটি নিজেই একটি স্ট্রিং উপস্থাপনায় রূপান্তর করতে সক্ষম।

তারপরে আমাদের নীচের ক্রিয়াকলাপগুলি রয়েছে যা আরও সহজ are

%// Reshape the result into a 3 x 1 x 23 matrix where the first dimension is RGB
%// due to column-major ordering of MATLAB
R = reshape(string, 3, 1, 23);

%// Divide the result by 255. This implicitly converts the char to a double
%// and in order for RGB interpreted properly by MATLAB, doubles must be
%// normalized between 0 and 1.
R = R / 255;

%// Shift the dimensions to the left 1 to move the RGB channel values into
%// the third dimension. Note the extra decimal point. This is because it
%// is far shorter to lengthen the code by one byte than to pad the string
%// to give us a length divisible by 3
R = shiftdim(R, 1.);

%// Display the RGB image
image(R);

1
ansধারণার জন্য +1 !
flawr

কাজ করতে কি এই দু'বার চালাতে হবে না? প্রথমবারের কাছাকাছি, আমি আশা করব ansযে প্রথম রানটি শেষ না হওয়া পর্যন্ত এটি মানের উপর ভিত্তি করে একটি চিত্র তৈরি করবে , যার ফলশ্রুতি ansনিজেই হয়ে ওঠে। দ্বিতীয়বারের মতো, এটি "নিজস্ব নিজস্ব" কোড ব্যবহার করছে (ভাল আসলে এটি একটি পৃথক তবে অভিন্ন বেনাম ফাংশনের কোড)। বলা হচ্ছে, আমি ম্যাটল্যাব জানি না, তাই আমার ভুল হতে পারে।
অ্যাডম

2
@ Nᴮᶻ বেস ওয়ার্কস্পেসে evalinকল করতে ব্যবহার করার সৌন্দর্য char(ans)এটি। evalinশুধুমাত্র এ মূল্যায়ন করা হয় রান-টাইম তাই যদিও ansসংজ্ঞায়িত করা হয় না যখন আপনি এটি কমান্ড উইন্ডোতে পেস্ট, যখন আপনি কল ans()এই বেনামী ফাংশন চালানোর জন্য, ans হয় সংজ্ঞায়িত করা হয় এবং evalinবেনামী ফাংশন ভিতরে কল এটি ব্যবহার করতে পারেন। সুতরাং আপনি এটি দুইবার চালাতে হবে না। যদি আমি এটিতে দুবার চালিত হওয়ার উপর নির্ভর করতে পারি, evalin('base', 'char(ans)')তবে কেবলমাত্র প্রতিস্থাপন করা হবেchar(ans)
সুয়েভার

4

জাভাস্ক্রিপ্ট (ES6) 324 312 309 বাইট

আমি নিশ্চিত যে এটি কিছুটা গল্ফ করা যেতে পারে:

f=()=>{s="f="+f;l=s.length/3;c=document.createElement('canvas');for(i=0;++i<l/i;l%i?0:w=i,h=l/w);c.s=c.setAttribute;c.s("width",w);c.s("height",h);(i=(t=c.getContext('2d')).createImageData(w,h)).data.map((a,b)=>i.data[b]=b%4<3?s.charCodeAt(b-~~(b/4)):255);t.putImageData(i,0,0);open(c.toDataURL('image/png'))}
  • একটি ক্যানভাস তৈরি করে
  • এতে চিত্র তৈরি করে build
  • নতুন ট্যাবে চিত্রের জন্য ডেটা url খুলুন

পাঠযোগ্যতার জন্য নতুন লাইন:

f=()=>{
    s="f="+f;l=s.length/3;
    c=document.createElement('canvas');
    for(i=0;++i<l/i;l%i?0:w=i,h=l/w);
    c.s=c.setAttribute;
    c.s("width",w);
    c.s("height",h);
    (i=(t=c.getContext('2d')).createImageData(w,h)).data.map((a,b)=>i.data[b]=b%4<3?s.charCodeAt(b-~~(b/4)):255);
    t.putImageData(i,0,0);
    open(c.toDataURL('image/png'))
}

আউটপুট

জাভাস্ক্রিপ্ট


যেহেতু আমি এটি নির্দিষ্ট করে নেই, আপনাকে এটি অটো চালানোর দরকার নেই।
বিলিন্ট

এছাড়াও, খালি অনুচ্ছেদগুলি ব্যবহার না করে কেবল একটি ডামি ভেরিয়েবল সন্নিবেশ করান
বেলিন্ট

খালি অনুচ্ছেদ? কোথায়?
শান এইচ

f=()=>{এখানে, কেবল f=_=>-1 বাইট করুন, কেবল এটি ব্যবহার করবেন না, জাভাস্ক্রিপ্টটি আলগাভাবে টাইপ করা হয়েছে
বুলিঙ্ক

আহ প্যারামিটারগুলি, বর্তমানের প্যারেনগুলি ছেড়ে 3 টি দ্বারা সমান বিভাজ্য না হ্যান্ডলিংয়ের চেয়ে সস্তা
শন এইচ

3

জাভাস্ক্রিপ্ট ES6 - 216 বাইট

f=(  )=>((d=(x=(v=document.createElement`canvas`).getContext`2d`).createImageData(v.width=9,v.height=8)).data.set([..."f="+f].reduce((p,c,i)=>(c=c.charCodeAt(0),[...p,...i%3<2?[c]:[c,255]]))),x.putImageData(d,0,0),v)

Ungolfed:

f=(  )=>(                                           // define function f (extra spaces to account for missing pixel + alpha channel calculation)
 (d=(x=(v=document.createElement`canvas`).          // assign html5 canvas to v
          getContext`2d`).                          // assign graphics context to x
          createImageData(v.width=9,v.height=8)).   // create & assign ImageData to d
                                                    //   set width and height of both d and v
 data.set([..."f="+f].                              // get f's source, convert to array of chars
   reduce((p,c,i)=>(c=c.charCodeAt(0),              // convert char array to int array
                    [...p,...i%3<2?[c]:[c,255]]))), // insert alpha values 255
 x.putImageData(d,0,0),                             // draw source RGBA array to canvas
 v)                                                 // return canvas

দ্রষ্টব্য: fএকটি ক্যানভাস প্রদান করে।

উদাহরণ রান (ধরে নেওয়া যায় যে এতে <body>সংযোজন করার দরকার আছে):

document.body.appendChild(f())

নিম্নলিখিত চিত্রটি পৃষ্ঠায় ফেলে দেওয়া উচিত (বর্ধিত):

QuineImage


সর্বশেষ পিক্সেলটি সম্পূর্ণ খালি, আপনি এটি তৈরি করতে পারেন, সুতরাং এটি মোট 71১ পিক্সেল?
বিলিন্ট

@ বিলিন্ট ওফস, খালি পিক্সেল অংশটি দেখেনি। আকর্ষণীয়ভাবে যথেষ্ট, যদি আমি ছবিটি x১x1 করার চেষ্টা করি, যা আমার বাইট গণনাটি 214-এ বৃদ্ধি করে এবং ঘটনাক্রমে, পিক্সেলটির গণনা 72 হয়, যা 9x8, যা বাইট গণনাটি 213 এ ফিরিয়ে দেয় It এটি আলফা চ্যানেল গণনাটিকেও নষ্ট করে দেয় । বর্তমানের সবচেয়ে পরিষ্কার সমাধান যা সমস্ত রেকসগুলির সাথে মিলিত হয় তা হল সমাধানটিতে 3 রিলান্ড্যান্ট চর যোগ করা ...
ডেনড্রোবিয়াম

2

পাওয়ারশেল ভি 4, 64 বাইট

"P6 11 2 255"+[char[]](gc $MyInvocation.MyCommand.Name)|sc a.ppm

এটি তার নিজস্ব ফাইলের সামগ্রীর সামগ্রী পায়, স্ট্রিংটিকে চর অ্যারে হিসাবে কাস্ট করে, কিছু পিপিএম শিরোনাম যুক্ত করে এবং আউটপুট হিসাবে সামগ্রীটিকে a.ppm এ সেট করে। 64 বাইট এটিকে 11x2 পিক্সেল করে তোলে:

পাওয়ারশেল উত্স চিত্র হিসাবে এনকোড করা হয়েছে


1

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

(F=x=>require('fs').writeFile('P6','P6 7 3 255 (F='+F+')()'))()

চিত্রটি পিপিএম (পি 6) ফর্ম্যাটে P6থাকা একটি ফাইলের মধ্যে আউটপুট দেয় ।

এখানে একটি পিএনজি উপস্থাপনা (7x3 পিক্সেল):

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


1

পিএইচপি, 226 বাইট

Golfed

<?$b=strlen($w=join(file('p.php')));$z=imagecreatetruecolor(5,15);for($c--;++$c<$b+1|$i%3;$i%3?:$a=!imagesetpixel($z,$x%5,(int)$x++/5,$a))$a+=($c<$b?ord($w[$c]):0)*256**(2-$i++%3);header("Content-Type:image/png");imagepng($z);

উদার সংস্করণ

<?
// Read the file into an array and join it together. Store the length of the resulting string.
$b=strlen($w=join(file('p.php')));

// Create the image. Our file is 226 bytes, 226/3 = 75 = 5 * 15
$z=imagecreatetruecolor(5,15);

// Loop through the script string, converting each character into a pixel.
// Once three characters have been converted, draw the pixel with the converted RGB value and reset the color to 0.
for($c--;++$c<$b+1|$i%3;$i%3?:$a=!imagesetpixel($z,$x%5,(int)$x++/5,$a))$a+=($c<$b?ord($w[$c]):0)*256**(2-$i++%3);

// Tell the program we're sending an image
header("Content-Type:image/png");

// And send it!
imagepng($z);

এই স্ক্রিপ্টটি 'p.php' নামের একটি ফাইলে প্রবেশ করুন এবং এটি চালান। আপনার পিএইচপি স্ক্রিপ্ট চালানোর নিজস্ব পদ্ধতি দরকার কারণ এটি একটি স্থানীয় ফাইল থেকে পড়ে reads

আউটপুট চিত্র:

রঙ কোডড


0

জাভা 511 অক্ষর

সমাধানটির দৈর্ঘ্য একটি বৃহত্তর চিত্রকে নিয়ে যায় যা দুর্দান্ত।

import java.awt.image.*;import java.io.*;import java.nio.file.*;import javax.imageio.*; public class Q{public static void main(String[]a)throws Throwable{int w=19,h=9;byte[]e=Files.readAllBytes(Paths.get("Q.java"));String t=new String(e);while(t.length()%3!=0)t+='\0';BufferedImage I=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);int r,c=r=0;for(int i=0;i<t.length();i++){I.setRGB(c,r,255<<24|t.charAt(i)<< 16|t.charAt(++i)<< 8|t.charAt(++i));if(++c==w){c=0;r++;}}ImageIO.write(I,"png",new File("Q.png"));}}

নোট করুন যে এখানে একটি অদৃশ্য ট্রেলিং নিউলাইন রয়েছে! এটি উত্স ফাইলটি পড়ে, যা "Q.java" হতে হবে এবং একটি চিত্র "Q.png" তৈরি করে যা দেখতে দেখতে এটি:

কোড দ্বারা উত্পন্ন ছবিটি

বা 100x স্কেল করা হয়েছে এখানে চিত্র বর্ণনা লিখুন


0

এপিএল (ডায়ালগ) , 33 বাইট

প্রয়োজন ⎕IO←0অনেক সিস্টেমে পূর্বনির্ধারিত। এছাড়াও, অটোফর্ম্যাটটি ঠিক মতো প্রোগ্রাম সংরক্ষণের জন্য বন্ধ করা উচিত।

(⊂⎕NPUT⊃)'P',⍕⎕AV⍳'␍ɫ␉⍣',⊃⌽⎕NR'f'  

Hex B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
ইউনিকোড 28 2282 2395 4E 50 55 22 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27

তৈরি করেছে P: পি 3 11 1 255 185 186 253 78 80 85 84 187 248 13 80 13 194 205 253 65 86 178 13 3 11 1 255 13 194 187 200 253 78 82 13 22 13
আপনি যা সেভ করে দেখুন তা এখানে দেখুন:কোড ইমেজ

⎕NR'f'প্রোগ্রামটির এন এসস্টেড আর এর উপস্থিতি

⊃⌽ সর্বশেষ (বিপরীত প্রথম লিটার) উপাদান (লাইন) বাছুন

'␍ɫ␉⍣', চারটি অক্ষর (ফাইল টাইপ, প্রস্থ, উচ্চতা, সর্বাধিক) প্রেন্ডেন্ড করুন

⎕AV⍳একটি টমিক ভি ভি ইক্টরের (অক্ষর সেট)  সাথে সম্পর্কিত সূচকগুলি সন্ধান করুন

 পাঠ্য হিসাবে বিন্যাস

'P', একটি চিঠি প্রস্তুত

() নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

 সম্পূর্ণ যুক্তি গ্রহণ করুন [এবং একটি]

⎕NPUTএন এটিভ [ফাইল,] একটি ফাইলের নাম সহ [এটি রাখুন ]

 প্রথম চরিত্র ("পি")


এই কোডেজ কি ধরে?
বিলিন্ট

@ বুলিন্ট সম্পাদনা দেখুন।
অ্যাডাম

ফলাফলের চিত্রটি কীভাবে 14 এর পরিবর্তে 42 পিক্সেল হয়? এটি কি কারণ আপনার "বাইটস" মাল্টি-বাইট অক্ষরের সাথে মিলে যায়?
সোয়েভার

@ স্যুভার ফিক্সড ধন্যবাদ।
অ্যাডম

বিটিডাব্লু, আমি মনে করি, যদি চ্যালেঞ্জের আগে সংস্করণটির একটি সংকলক থাকে, তবে এটি আইনী।
বিলিন্ট

-1

পাইথন, 81 বাইট

q=open(__file__).read()
print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),q))

আউটপুট পিপিএম ফর্ম্যাটে রয়েছে।

চিত্রটি দেখতে এটির মতো:

ভাবমূর্তি

আপ কমিয়ে এনেছে:

আপ কমিয়ে এনেছে


আমি আপনাকে পুনঃব্যবহার করতে দেখছি নাq
মালটিসেন

আপনি যদি P6ফর্ম্যাটটি ব্যবহার করেন তবে আপনাকে অর্ডিনালে রূপান্তর করতে হবে না। অতিরিক্ত হিসাবে, 8-বিট আরজিবি এর 255পরিবর্তে ব্যবহার করা উচিত 256
মেগো

যদি আপনি কেবল qএকবার ব্যবহার করেন , যেমনটি মনে হয় যে আপনি করছেন, অ্যাসাইনমেন্টটি পরিত্রাণ পান এবং সরাসরি এটি বিকল্প করুন - এটি আপনাকে তিনটি বাইট সাশ্রয় করবে।
তহবিল মনিকার লসুইট

দেখে মনে হচ্ছে আপনি ফাইলের বিষয়বস্তু মুদ্রণ করেছেন, কিন্তু ওপি বলেছেন আউটপুটটি আলাদা ফাইল হিসাবে হওয়া উচিত
অ্যাডম

হ্যালো, @ কিপ্যায়েট্যাক্সেস বলেছিলেন print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))। এটি -4 বাইট, তাই!
এরিক আউটগলফার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.