আমাদের তারার রং


90

একটি স্ট্রিং বা পাঠ্য ফাইলের মধ্যে নিয়ে যাওয়া একটি প্রোগ্রাম লিখুন যার প্রথম লাইনে ফর্ম রয়েছে

width height

এবং পরবর্তী প্রতিটি লাইনের ফর্ম রয়েছে

x y intensity red green blue

কোথায়:

  • widthএবং heightকোনও ধনাত্মক পূর্ণসংখ্যার হতে পারে।
  • xএবং yকোনও পূর্ণসংখ্যা হতে পারে।
  • intensity কোনও অ-নেতিবাচক পূর্ণসংখ্যার হতে পারে।
  • red, green, এবং blue0 থেকে 255 সমেত কোনো পূর্ণসংখ্যার করা যেতে পারে।

তোমার প্রোগ্রাম আবশ্যক আউটপুট একটি truecolor কোনো সাধারণ অবচয়হীন ইমেজ ফাইল ফরম্যাট যার মাত্রা হয় ইমেজ widthদ্বারা height। প্রতিটি x y intensity red green blueলাইন রঙিন তারা বা কক্ষকে উপস্থাপন করে যা অবশ্যই চিত্রটিতে আঁকতে হবে। অঙ্কন করার জন্য কয়েকটি সংখ্যক তারা থাকতে পারে, সহ 0 টি রয়েছে You আপনি স্ট্রিং বা ফাইলটির অনুমানযোগ্য নতুন লাইন রয়েছে বলে ধরে নিতে পারেন।

চিত্র আঁকার জন্য অ্যালগরিদম নিম্নরূপ: যদিও আপনি ফলাফলটি অভিন্ন হিসাবে আপনি এটি যে কোনও উপায়ে প্রয়োগ করতে পারেন:

প্রতি পিক্সেল (জন্য এক্স , ওয়াই ছবিতে) (যেখানে এক্স বামদিকের প্রান্ত এবং 0 প্রস্থ -1 ডানদিকের প্রান্ত এ, এবং ওয়াই উপরের প্রান্ত এবং 0 উচ্চতা -1 নীচে প্রান্ত এ) রঙ চ্যানেল, সি ϵ { লাল , সবুজ , নীল } (0 থেকে 255 এর মধ্যে পিন করা একটি মান) সমীকরণ দ্বারা দেওয়া হয়:

রঙ চ্যানেল সমীকরণ

যেখানে ডিস্ট ফাংশন হয় ইউক্লিডিয়ান দূরত্ব :

ইউক্লিডিয়ান দূরত্বের সমীকরণ

বা ম্যানহাটনের দূরত্ব :

ম্যানহাটনের দূরত্বের সমীকরণ

গল্ফযোগ্যতা বা নান্দনিকতার উপর ভিত্তি করে আপনি যে কোনও দূরত্বের ক্রিয়াটি পছন্দ করেন তা চয়ন করুন।

প্রথমটি ছাড়াও ইনপুটটিতে থাকা প্রতিটি লাইনই তারার সেটগুলির একটি উপাদান । সুতরাং, উদাহরণস্বরূপ, এস এক্স প্রতিনিধিত্ব করে xইনপুট লাইন এক মান, এবং S সি পারেন প্রতিনিধিত্ব করে red, greenঅথবা blue, যা তার উপর নির্ভর করে রং চ্যানেলটি বর্তমানে গণনা করা হচ্ছে।

উদাহরণ

উদাহরণ ক

যদি ইনপুট হয়

400 150
-10 30 100 255 128 0

আউটপুট হওয়া উচিত

উদাহরণ এ, ইউক্লিডিয়ান

আপনি যদি ইউক্লিডিয়ান দূরত্ব ব্যবহার করেন, এবং

উদাহরণ এ, ম্যানহাটন

যদি আপনি ম্যানহাটনের দূরত্ব ব্যবহার করেন।

উদাহরণ খ

যদি ইনপুট হয়

200 200
100 100 10 255 255 255
20 20 40 255 0 0
180 20 40 255 255 0
180 180 40 0 255 0
20 180 40 0 0 255

ইউক্লিডিয়ান এবং ম্যানহাটনের দূরত্বের জন্য সংশ্লিষ্ট আউটপুটগুলি হওয়া উচিত

বি, ইউক্লিডিয়ান উদাহরণএবং বি, ম্যানহাটন উদাহরণ

উদাহরণ সি

যদি ইনপুট হয়

400 400
123 231 10 206 119 85
358 316 27 170 47 99
95 317 3 202 42 78
251 269 17 142 150 153
43 120 3 145 75 61
109 376 6 230 231 52
331 78 21 31 81 126
150 330 21 8 142 23
69 155 11 142 251 199
218 335 7 183 248 241
204 237 13 112 253 34
342 89 18 140 11 123

আউটপুট হওয়া উচিত

সি, ইউক্লিডিয়ান উদাহরণ

আপনি যদি ইউক্লিডিয়ান দূরত্ব ব্যবহার করেন, এবং

সি, ম্যানহাটন উদাহরণ

যদি আপনি ম্যানহাটনের দূরত্ব ব্যবহার করেন।

উদাহরণ ডি

যদি ইনপুট হয়

400 400
123 231 5 206 119 85
358 316 5 170 47 99
95 317 5 202 42 78
251 269 5 142 150 153
43 120 5 145 75 61
109 376 5 230 231 52
331 78 5 31 81 126
150 330 5 8 142 23
69 155 5 142 251 199
218 335 5 183 248 241
204 237 5 112 253 34
342 89 5 140 11 123

আউটপুট হওয়া উচিত

উদাহরণ ডি, ইউক্লিডিয়ান

আপনি যদি ইউক্লিডিয়ান দূরত্ব ব্যবহার করেন, এবং

উদাহরণ ডি, ম্যানহাটন

যদি আপনি ম্যানহাটনের দূরত্ব ব্যবহার করেন।

উদাহরণ ই

যদি ইনপুট হয়

100 1

তারপরে আউটপুটটি 100 পিক্সেল প্রশস্ত 1 পিক্সেল লম্বা চিত্র হওয়া উচিত যা সম্পূর্ণ কালো।

নোট

  • ইনপুট স্ট্রিং বা কোনও পাঠ্য ফাইলের নাম নিন যা এতে স্টিডিন বা কমান্ড লাইন থেকে অন্তর্ভুক্ত রয়েছে, অথবা আপনি কোনও ফাংশন লিখতে পারেন যা স্ট্রিংয়ের মধ্যে পড়ে।
  • চিত্র "আউটপুটটিং" এর অর্থ হয়:
    • এটি আপনার পছন্দের নাম সহ কোনও ফাইলে সংরক্ষণ করা।
    • Stdout এ কাঁচা চিত্র ফাইল ডেটা মুদ্রণ।
    • চিত্রটি প্রদর্শিত হচ্ছে যেমন পিআইএল এর সাথে image.show()
  • আমি দেখতে পাচ্ছি না যে আপনার চিত্রগুলি পিক্সেল নিখুঁত (স্ট্যাক এক্সচেঞ্জ ক্ষতিকারকভাবে চিত্রগুলি সংকুচিত করে) তবে আমি খুব সন্দেহজনক হয়ে উঠতে পারি যদি আমি দৃশ্যত কোনও পার্থক্য বলতে পারি।
  • আপনি গ্রাফিক্স / চিত্র লাইব্রেরি ব্যবহার করতে পারেন।

জয়লাভ

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়। সম্পর্কের ক্ষেত্রে, প্রাথমিকতম জমাটি জয়লাভ করে।

ফান বোনাস: সত্যই দর্শনীয় আউটপুট চিত্রের জন্য ইনপুট দিন।


38
+1 বাহ এটি চমত্কার। (এবং পোস্ট করার জন্য উপযুক্ত সময়, যেমনটি আমরা একটি স্বাস্থ্যকর নিউ দিগন্ত মহাকাশযানের কাছ থেকে শুনি!)
ব্রেইনস্টিল

ইনপুটটি কি সেই স্থানটি পৃথক বিন্যাসে থাকতে হবে, বা এটি কমা দ্বারা পৃথক করা যায়? যাইহোক, +1।
মালটিসেন

1
@ মাল্টেসেন স্পেস বিচ্ছিন্ন হয়েছে। (আমি জানি এটি কৃপণু তবে এক ডজন ইনপুট ভেরিয়েন্টগুলিকে অনুমতি দেওয়ার চেয়ে সহজ))
ক্যালভিনের

4
Orbs বা তারকারা আরও সুন্দর কিনা তা আমি সিদ্ধান্ত নিতে পারি না।
ট্রাইকোপলাক্স

পিক্সেল-পারফেকশনের জন্য আপনি বিটম্যাপের
হ্যাশটির

উত্তর:


26

পাইথ - 46 বাইট

এই মজা ছিল! অবশেষে পাইথের চিত্র I / O বৈশিষ্ট্যগুলি ব্যবহার করতে পেলাম। গল্ফতার কারণে ইউক্লিডিয়ান দূরত্ব তৈরি করে, যদিও ম্যানহাটন হ'ল একটি স্বল্প পরিবর্তন।

Krz7.wcmmsm/*@b+3k@b2h.a,<b2_.DdhKrR7.zU3*FKhK

সূত্রটির সাথে এটি সমস্ত পিক্সেলের মধ্যেই লুপ করে যদিও এটি পিক্সেল লুপটিকে একটি লুপে ঘনীভূত করে এবং ব্যবহার করে divmodযেহেতু পাইথটি কেবল 3 নেস্টেড মানচিত্রকে সমর্থন করে এবং গণনাগুলি দুটি নেয় (আরজিবির জন্য একটি এবং তারার জন্য একটি)।

হিসাবে ইমেজ সংরক্ষণ করুন o.png। খুব ধীরে ধীরে, <2 মিনিটে প্রথম 2 টি পরীক্ষা করে, তবে অন্যান্য 2 আধা ঘন্টার অর্ডার নেয়।

এতে একটি ত্রুটি রয়েছে .wযে কেউ তা লক্ষ্য করেছে না কারণ এটি কেউ ব্যবহার করে না;) তবে আমি একটি অনুরোধ রেখেছি যাতে শীঘ্রই সংযুক্ত না হয় কিনা তা পরীক্ষা করার জন্য আমার কাঁটা ব্যবহার করুন। একীভূত!

উদাহরণ আউটপুট

উদাহরণ ক

উদাহরণ ক

উদাহরণ খ

উদাহরণ খ

উদাহরণ সি

উদাহরণ সি

উদাহরণ ডি

উদাহরণ ডি


7
বাহ, পাইথ জানত না যে এটি করতে পারে। একদিন আমরা পাইথের ব্যবসায় সফ্টওয়্যারটি লিখে শেষ করতে পারি। এটি লেখার জন্য কম কোড, সুতরাং এটি চুল্লী করার জন্য দ্রুত এবং সহজ হওয়া উচিত। : ডি
ক্রিশ্চিয়ান লুপাস্কু

7
@ ডাব্লু0এলএফ "প্রোগ্রামার সময়টি এক্সিকিউশন টাইমের চেয়ে বেশি গুরুত্বপূর্ণ" এবং আমরা সবাই জানি পাইথ প্রোগ্রামার সময় হ্রাস করতে সহায়তা করে :) পাইথকে গ্রাফিকাল আউটপুট চ্যালেঞ্জ থেকে বাদ দেওয়ার পরে চিত্র I / O সম্প্রতি যুক্ত হয়েছিল। এটি অভ্যন্তরীণভাবে বালিশ ব্যবহার করে।
মালটিসেন

11
নিট এটি কত দ্রুত লেখার সাথে এটির কোনও সম্পর্ক নেই। আমার আগের মন্তব্যটি একটি রসিকতা ছিল।
ক্রিশ্চিয়ান লুপাস্কু

2
আপনি ছেলেরা একটি গুরুত্বপূর্ণ বিষয় ভুলে গেছেন - কোডটি কম হওয়ায় এটিও খুব সহজেই ডিবাগ করা সহজ;)
অপ্টিমাইজার

14
প্রোগ্রামার সময় হ্রাস করে আপনার অর্থ "তারা পাইথের সাথে কোড গল্ফ খেলছে এবং তাই 'আসল' কোড লেখার জন্য কম সময় আছে"?

42

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

function X(a){for(l=a.match(/\d+/g),h=document,v=h.body.appendChild(h.createElement("canvas")),v.width=W=l[0],v.height=H=l[1],w=v.getContext("2d"),e=w.createImageData(W,H),d=e.data,N=W*H;N--;)for(i=2,c=N*4,d[c+3]=255;i<l.length;)for(x=N%W-l[i++],y=~~(N/W)-l[i++],k=l[i++],q=0;q<3;)d[c+q++]+=k*l[i++]/-~Math.sqrt(x*x+y*y);w.putImageData(e,0,0);}

সম্পাদনা: ওল্ফহ্যামার এর দুর্দান্ত পরামর্শগুলি প্রয়োগ করে কোডটি অনেক ছোট করে ফেলেছে

পরীক্ষা

দ্রষ্টব্য: রেন্ডার করতে নীচের স্নিপেটের জন্য কয়েক সেকেন্ড অপেক্ষা করুন (আমার মেশিনে 4 ডলার লাগবে)।

এছাড়াও আপনি এটা চালাতে পারেন JSFiddle

বোনাস: নীলগ্রহণ

function X(a){for(l=a.match(/\d+/g),h=document,v=h.body.appendChild(h.createElement("canvas")),v.width=W=l[0],v.height=H=l[1],w=v.getContext("2d"),e=w.createImageData(W,H),d=e.data,N=W*H;N--;)for(i=2,c=N*4,d[c+3]=255;i<l.length;)for(x=N%W-l[i++],y=~~(N/W)-l[i++],k=l[i++],q=0;q<3;)d[c+q++]+=k*l[i++]/-~Math.sqrt(x*x+y*y);w.putImageData(e,0,0);}

var j = 0;
var renderFrame = function () {
  if(window.h && window.v){h.body.removeChild(v);} // clear prev frame
  X("225 150\n" +
    (70 + j) + " " + (120 - j) + " 170 135 56 0\n" + 
    j * 5 + " " + j * 3 + " 64 0 50 205");       
  if(++j < 50) { setTimeout(renderFrame, 1); } else { console.log('done!'); }
};
setTimeout(renderFrame, 10);

এছাড়াও আপনি এটা চালাতে পারেন JSFiddle

বিবরণ

এটি একটি সোজা জাভাস্ক্রিপ্ট + এইচটিএমএল 5 ক্যানভাস বাস্তবায়ন: একটি ফাংশন যা স্ট্রিং আর্গুমেন্ট নেয় (ফাঁকা স্থান / নিউলাইনগুলি ছাড়াই) এবং ডিওমে আউটপুট প্রদর্শন করে। এটি ইউক্লিডিয়ান দূরত্ব ব্যবহার করে।

এখানে পঠনযোগ্য কোডটি রয়েছে:

X = function (str) {
  var lines = str.split("\n");  
  var canvas = document.createElement('canvas');
  var z = lines[0].split(u=' ');
  var width = z[0], height = z[1];

  canvas.width = width;
  canvas.height = height;
  document.body.appendChild(canvas);

  var ctx = canvas.getContext("2d");
  var imageData = ctx.createImageData(width, height);

  for(var y = 0; y < height; y++){
    for(var x=0; x < width; x++){
      var coord = (y * width + x) * 4;

      for(i=1; i < lines.length;i++){
        var t = lines[i].split(u);

        var 
          dx = x - t[0], 
          dy = y - t[1];

        var distance = Math.sqrt(dx * dx + dy * dy);

        for(var channel = 0; channel < 3; channel++) {
          var channelIndex = coord + channel;
          imageData.data[channelIndex] += t[2] * t[3 + channel] / (distance + 1);
        }
      }

      var alphaIndex = coord + 3;
      imageData.data[alphaIndex] = 255;
    }
  }

  ctx.putImageData(imageData, 0, 0);
};

আমি পছন্দ করি কিভাবে নীলোরাণে হলোস একসাথে আটকানো হয়েছিল, আপনি কি ম্যানহাটনের স্টাইল যুক্ত করতে পারেন?
PTwr

1
@ পিটিউইউর শিওর, এটি এখানে: jsfiddle.net/pjLnazw1
ক্রিশ্চিয়ান লুপাস্কু

অসাধারণ! (আরও 7 টি যেতে ...
উঘ

@ w0lf আপনি x এবং y পুনরাবৃত্তকারীকে একত্রিত করে আপনার ফাংশন থেকে কিছু বাইট শেভ করতে পারেন। jsfiddle
ওল্ফহ্যামার

@ ওল্ফহ্যামার বাহ, এটি এখন "কিছু বাইট", এটি অনেক উন্নতি করেছে। আমি পরে এটি একবার দেখে নেব, কারণ আমি বিশ্বাস করি যে সূচীকরণ সম্পর্কে কিছু ঠিক করার দরকার আছে (বামদিকে নমুনা চিত্র 2, 3 এবং 4 পিক্সেলের চারপাশে মোড়ানো দেখা যায়)। ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু

26

জাভা - 627 বাইট

জাভা সত্যিই সেরা গল্ফিং ভাষাগুলির মধ্যে একটি :)

import java.awt.image.*;class M{void f(String n)throws Exception{String[]p=n.split("\n");int[]b=s(p[0]);BufferedImage o=new BufferedImage(b[0],b[1],2);for(int i=0;i<b[0];i++)for(int j=0;j<b[1];j++){int[]c=new int[3];for(int l=1;l<p.length;l++){int[]r=s(p[l]);for(int k=0;k<3;k++){c[k]+=r[2]*r[3+k]/(Math.sqrt(Math.pow(i-r[0],2)+Math.pow(j-r[1],2))+1);if(c[k]>255)c[k]=255;}}o.setRGB(i,j,new java.awt.Color(c[0],c[1],c[2]).getRGB());}javax.imageio.ImageIO.write(o,"png",new java.io.File("o.png"));}int[]s(String s){String[]a=s.split(" ");int[]r=new int[a.length];for(int i=0;i<a.length;i++)r[i]=Integer.valueOf(a[i]);return r;}}

নীচের ইনপুটটি ব্যবহার করে, আপনি আমাদের সৌরজগতের কিছুটা বাস্তববাদী মডেল তৈরি করতে পারেন (কিছু গ্রহের আকার ভুল হলেও তাদের মধ্যে দূরত্বটি সঠিক হওয়া উচিত)। আমি শনিতে রিং দেওয়ার চেষ্টা করেছি, তবে এটি কার্যকর হয়নি ... উত্স

1950 50
-15 25 25 255 255 0
39 25 1 255 0 0
55 25 3 255 140 0
68 25 4 0 191 255
92 25 2 255 0 0
269 ​​25 10 245 222 179
475 25 7 245 245 220
942 25 6 0 250 150
1464 25 6 0 0 255
1920 25 1 255 245 238

প্লুটো দিয়ে সোলার সিস্টেম

ফুল এইচডি ছবি , যা থায়াত দুর্দান্ত দেখাচ্ছে না ... কেউ যদি এটির উন্নতি করতে পারে তবে খুশি হবেন!


15
সৌরজগতের জন্য +1। প্লুটোর যাব (এখন এমনকি আমরা তার বাস্তব রঙ এবং আকার জানি) এর জন্য -1
অপ্টিমাইজার

1
এছাড়াও, যদি একটি পুরো 1080 পি ওয়ালপেপারটি লিঙ্ক করা থাকে তবে এটি খুব সুন্দর হবে :)
অপ্টিমাইজার

@ অপ্টিমাইজার আমি প্লুটো যুক্ত করেছি;) ওয়ালপেপার সম্পর্কে আমি কী করতে পারি তা দেখতে দিন
কমনগ্যুই

1
@ এসপি 3000 আপস, আমি যখন প্লুটো যুক্ত করলাম তখন তীব্রতাটি ভুলে গিয়েছিলাম
কমনগ্যুই

2
দ্রষ্টব্য যে শনি শুধুমাত্র রিং সহ গ্রহ নয়। যদি আপনি কাজ করার জন্য রিং পান তবে আপনার সেগুলি ইউরেনাসেও যুক্ত করা উচিত।
mbomb007

20

বাশ, 147 145 বাইট

ইমেজম্যাগিক ছবি ব্যবহার করতে ব্যবহৃত হয়। ইউক্লিডিয়ান দূরত্ব ব্যবহৃত হয়।

read w h
o=o.png
convert -size $w\x$h canvas:black $o
while read x y i r g b
do
convert $o -fx "u+$i*rgb($r,$g,$b)/(hypot(i-$x,j-$y)+1)" $o
done

আপনি এটি দিয়ে একটি বাইট সংরক্ষণ করতে পারেন $w\x$h
ডেলটাব

... এবং সাথে অন্য একটি o=o.png
ডেলটাব

16

পাইথন 3, 189 বাইট

আমি বিশেষজ্ঞ গল্ফার সম্পর্কে কারও ধারণা নই, তবে এখানে রয়েছে।

প্রথম, ম্যানহাটনের দূরত্ব:

import sys
(w,h),*S=[list(map(int,l.split()))for l in sys.stdin]
print('P3',w,h,255,*(min(int(sum((I*C[z%3]/(abs(X-z//3%h)+abs(Y-z//3//h)+1))for
X,Y,I,*C in S)),255)for z in range(h*w*3)))

এবং দ্বিতীয়ত, ইউক্লিডিয়ান দূরত্ব:

import sys
(w,h),*S=[list(map(int,l.split()))for l in sys.stdin]
print('P3',w,h,255,*(min(int(sum((I*C[z%3]/(abs(X-z//3%h+(Y-z//3//h)*1j)+1))for
X,Y,I,*C in S)),255)for z in range(h*w*3)))

আমি পরিবর্তে পূর্ণসংখ্যা বিভাগ ব্যবহার করে চারটি বাইট সংরক্ষণ করতে পারতাম int(), এবং প্রকৃত চিত্রগুলি যা মনে হয় - আপনি কেবল স্টার আভের অন্ধকার প্রান্তে কিছু স্ট্রাইজ করতে পারেন যা সঠিকভাবে উপস্থিত নেই কোড। যদিও এটি দাঁড়িয়েছে, এই কোডটি চিত্রগুলি নয়, বর্ণনাকে অনুসরণ করে।

Ungolfed সংস্করণ, এবং অনেক optimisations যা অন্যদের নির্দিষ্ট না আমি নিজের উপর পদস্খলিত আগে আমার মূল golfing, হয় এই সারকথা

সম্পাদনা: আমি একক (বা ) ফাংশনে সরিয়ে for xএবং 7 বাইট সংরক্ষণ করেছি , তবে এটি একটি দীর্ঘ লাইনযুক্ত একটি পিএনএম ফাইল তৈরি করে, যা কিছু সমস্যা বা হতে পারে না।for yprinto

সম্পাদনা 2: মাল্টেসেন আমাকে আরও 20 বাইট সংরক্ষণ করেছিলেন। ধন্যবাদ!

আবার সম্পাদনা করুন: এখন যেহেতু কেবলমাত্র একটি print, oউপনামটি একটি দায়বদ্ধতা, সঞ্চয় নয়। আরও 4 বাইট বন্ধ।

আরও কিছু সম্পাদনা করুন: এসপি 3000 আমাকে আরও 2 বাইট সংরক্ষণ করেছে। এদিকে, aliasing mapকরার mপাঠযোগ্যতা (!) স্বার্থে কিছু সংরক্ষণ করা হয় নি, তাই আমি এটা আবার প্রসারিত করেছি। এটি এখন একটি দুর্দান্ত রাউন্ড 2 8 বাইট।

শেষটি সম্পাদনা করুন (?): এখন ইউক্লিডিয়ান দূরত্ব সমর্থন দিয়ে - এবং জটিল সংখ্যার অপব্যবহার করে, আমি এটি ঠিক একই সংখ্যক বাইটে করেছি!

সম্পাদনা, হলিউডের রিবুট: এসপি 3000 এর পরবর্তী পরামর্শটি 5 বাইট ছিটকে গেল।

এডিআইটি, বোকামিযুক্ত সিক্যুয়াল: 6 বাইট ছাঁটাই, মাল্টেসেন একটি পরামর্শের জন্য ধন্যবাদ জানিয়েছে যে এসপি 3000 এর পুনরাবৃত্তি না হওয়া অবধি আমি বুঝতে পারিনি ... তারপরে অপব্যবহারের থেকে আরও 8 বাইট %। এবং আড্ডায় এটি কথা বলা একটি অভূতপূর্ব নক আউট2126 বাইট। আমি নম্র।


@ মাল্টেসেন: একদম ঠিক আছে। ২০ টি বাইট সংরক্ষণ করা হয়েছে!
টিম পেডারিক 9

আরও কিছু: জটিল সিস্টেমে স্টিস্টেনের পরিবর্তে EOFআপনি সেন্ডিনেলiter() মানগুলি ব্যবহার করতে পারেন : ডকস.পিথথন.আর. / 2 / লিবারি / ফাংশনস.চ.টি.এম.এল.একটি হিসাবে iter(raw_input,''), w,h,Sএকই বর্ধিত আনপ্যাকিংয়ের সাথে একই লাইনে রাখুন।
মালটিসেন

@ মালটিসেন: আমি নিশ্চিত না যে এটি কার্যকর হবে। আমি প্রায় ঠিক আগেই এটি করছিলাম, তবে এটি হিট হয়েছে EOFError(এবং তাই আমার একটি tryব্লকের দরকার ছিল ), কারণ ইনপুট ফাইলে কোনও ফাঁকা রেখা নেই এবং আমি নিশ্চিত নই যে চ্যালেঞ্জটি আমাকে একটি যুক্ত করতে দেয়। নাকি আমি কিছু মিস করছি?
টিম পেডারিক

আমি মনে করি আপনি যদি সেন্ডিনেল মান জিনিসটি করেন তবে আপনি কেবল একটি ফাঁকা লাইন দিয়ে ফাইলটি খাওয়ানো বনাম সমাপ্ত করতে পারেন, তবে, হ্যাঁ, ফাইলটি কাজ করবে না।
মালটিসেন

@ স্প 3000: আশ্চর্যরকম, হ্যাঁ! আমি এটির অভিযোগের প্রত্যাশা করছিলাম যা stdinকোনও পুনরুক্তিকারী নয়।
টিম পেডারিক

10

সি ++, 272 বাইট

#include<png.hpp>
#define G(a)i>>C;for(x=0;x<w*h;++x){auto&p=img[x%h][x/h];c=p.a+I*C/(abs(x/h-X)+abs(x%h-Y)+1);p.a=c>255?255:c;}
auto&i=std::cin;main(){int w,h,x,X,Y,I,c,C;i>>w>>h;png::image<png::rgb_pixel>img(w,h);while(i>>X>>Y>>I){G(red)G(green)G(blue)}img.write("a");}

একটি লেন্সিয়েন্ট সি ++ 11 সংকলক (জিসিসি 4.9.2 কেবল সামান্য অসন্তুষ্ট) এবং পিএনজি ++ লাইব্রেরি প্রয়োজন, যা নিজেই প্রয়োজন libpng। ম্যানহাটনের দূরত্ব ব্যবহৃত হয়েছে। ইনপুট নেয় stdin, পিএনজি ফর্ম্যাটে বর্তমান ডিরেক্টরিতে "এ" নামে একটি ফাইল আউটপুট দেয়।

উদাহরণ ডি:

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


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


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


1
আমি PCGছবিটি পছন্দ করি :) (যদিও PPCGএটি আমার পছন্দসই সংক্ষেপণ;))
ক্যালভিনের

8

পাইথন 2, 240 232 228 বাইট

from PIL.Image import*
def f(S):
 L=map(int,S.split());t=a,b=L[:2];I=new("RGB",t)
 for k in range(a*b):I.load()[k/a,k%a]=tuple(sum(x[2]*x[c]/(abs(x[0]-k/a)-~abs(x[1]-k%a))for x in zip(*[iter(L[2:])]*6))for c in(3,4,5))
 I.show()

ম্যানহাটনের দূরত্ব ব্যবহার করে। এটি পাইথন 3 এ সম্ভবত আরও ছোট হবে তবে আমি সম্প্রতি আমার পাইথন প্যাকেজগুলিতে গোলমাল করেছি এবং বালিশ পুনরায় ইনস্টল করতে আমার সমস্যা হচ্ছে। পিপিএম সম্ভবত আরও খাটো হবে তবে আমি পিআইএল পছন্দ করি।

মজাদার জন্য, আমি পরিবর্তে L * a * b * রঙের জায়গার মতো অ্যালগরিদমটি প্রয়োগ করার চেষ্টা করেছি , ভেবেছিলাম এটি আরও ভাল রঙের মিশ্রণ দেবে (বিশেষত উদাহরণস্বরূপ বি)। দুর্ভাগ্যক্রমে, ক্যালভিনের অ্যালগরিদম চ্যানেলগুলিকে তাদের সর্বোচ্চ মানগুলি অতিক্রম করতে দেয়, যা চিত্রগুলি আমার প্রত্যাশার চেয়ে কিছুটা কম দুর্দান্ত দেখায় ...

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


6

গণিত, 146 বাইট

Image@Table[Total[#3{##4}/255&@@@{##2}/(1+#~ManhattanDistance~{x,y}&/@({#1,#2}&@@@{##2}))],{y,0,Last@#-1},{x,0,#&@@#-1}]&@@#~ImportString~"Table"&

একটি স্ট্রিং গ্রহণ করা একটি খাঁটি ফাংশন। সময় একটি যুক্তিসঙ্গত পরিমাণ এটি চালানোর জন্য, প্রতিস্থাপন 1মধ্যে 1+#~ManhattanDistance...একটি সঙ্গে 1.; এটি প্রতীকী পরিবর্তে সংখ্যা গণনা জোর করে।

Ungolfed:

Image[
    Table[
        Total[
        (#3 * {##4} / 255 & @@@ {##2})
            / (1 + ManhattanDistance[#, {x, y}]& /@ ({#1, #2}& @@@ {##2}) )
        ], {y, 0, Last[#]-1}, {x, 0, First[#]-1}
    ] (* Header is #, data is {##2} *)
]& @@ ImportString[#, "Table"]&

6

পাইথন 2, 287 251 বাইট

আমি চিত্রগুলি উত্পন্ন করতে ব্যবহৃত মূল কোডটির একটি গল্ফযুক্ত সংস্করণ। সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে (আমার চেয়ে আরও ভাল গল্ফার দ্বারা)। এটি এমন একটি ফাংশন যা পুরো ইনপুট স্ট্রিংটি গ্রহণ করে। পিআইএল এর চিত্র মডিউল দিয়ে চিত্র প্রক্রিয়াকরণ সম্পন্ন হয়েছে । ম্যানহাটনের দূরত্ব ব্যবহার করে।

from PIL import Image
def S(I,r=range):
 I=map(int,I.split());w,h=I[:2];M=Image.new('RGB',(w,h));P=M.load()
 for z in r(w*h):
  P[z%w,z/w]=tuple(int(sum(I[i+2]*I[i+j+3]/(1.+abs(I[i]-z%w)+abs(I[i+1]-z/w))for i in r(2,len(I),6)))for j in r(3))
 M.show()

ইউক্লিডিয়ান দূরত্ব ব্যবহার করা 5 বাইট দীর্ঘ (256 বাইট):

from PIL import Image
def O(I,r=range):
 I=map(int,I.split());w,h=I[:2];M=Image.new('RGB',(w,h));P=M.load()
 for z in r(w*h):
  P[z%w,z/w]=tuple(int(sum(I[i+2]*I[i+j+3]/(1+((I[i]-z%w)**2+(I[i+1]-z/w)**2)**.5)for i in r(2,len(I),6)))for j in r(3))
 M.show()

এখানে একটি সম্পূর্ণ পরীক্ষার স্যুইট যা উভয় দূরত্বের মেট্রিকের জন্য প্রশ্ন থেকে ই এর মাধ্যমে উদাহরণগুলি চালায়:

from PIL import Image
def S(I,r=range):
 I=map(int,I.split());w,h=I[:2];M=Image.new('RGB',(w,h));P=M.load()
 for z in r(w*h):
  P[z%w,z/w]=tuple(int(sum(I[i+2]*I[i+j+3]/(1.+abs(I[i]-z%w)+abs(I[i+1]-z/w))for i in r(2,len(I),6)))for j in r(3))
 M.show()

def O(I,r=range):
 I=map(int,I.split());w,h=I[:2];M=Image.new('RGB',(w,h));P=M.load()
 for z in r(w*h):
  P[z%w,z/w]=tuple(int(sum(I[i+2]*I[i+j+3]/(1+((I[i]-z%w)**2+(I[i+1]-z/w)**2)**.5)for i in r(2,len(I),6)))for j in r(3))
 M.show()

A = """400 150
-10 30 100 255 128 0"""
B = """200 200
100 100 10 255 255 255
20 20 40 255 0 0
180 20 40 255 255 0
180 180 40 0 255 0
20 180 40 0 0 255"""
C = """400 400
123 231 10 206 119 85
358 316 27 170 47 99
95 317 3 202 42 78
251 269 17 142 150 153
43 120 3 145 75 61
109 376 6 230 231 52
331 78 21 31 81 126
150 330 21 8 142 23
69 155 11 142 251 199
218 335 7 183 248 241
204 237 13 112 253 34
342 89 18 140 11 123"""
D = """400 400
123 231 5 206 119 85
358 316 5 170 47 99
95 317 5 202 42 78
251 269 5 142 150 153
43 120 5 145 75 61
109 376 5 230 231 52
331 78 5 31 81 126
150 330 5 8 142 23
69 155 5 142 251 199
218 335 5 183 248 241
204 237 5 112 253 34
342 89 5 140 11 123"""
E = """100 1"""
for i in (A, B, C, D, E):
    S(i) #S for Star
    O(i) #O for Orb

তারা সবাই অবিচ্ছিন্ন দেখায়। বড়গুলি চালাতে কয়েক সেকেন্ড সময় নিতে পারে।


আমি বিশ্বাস করি আপনি for x in r(I[0]):...for y in r(I[1]):এটি পরিবর্তন করে একগুচ্ছ বাইট সংরক্ষণ করতে পারেন for x in r(I[0]*I[1]):। তারপরে আপনি প্রতিটি ইনডেন্ট স্তরটি নীচে 1 এর মধ্যে নিয়ে যেতে পারেন এবং এর xসাথে x/I[1]এবং এর yসাথে প্রতিস্থাপন করতে পারেন y%I[1]
কেদে

আপনি প্রতিস্থাপন 5 বাইট বাঁচাতে পারে from PIL import Imageথেকেfrom PIL import*
sagiksp

6

সি, 247 বাইট

জিততে যাচ্ছি না, তবে আমি সি তে গল্ফ চাই স্টিডিনে ইনপুট নেয়। গল্ফতার জন্য ম্যানহাটনের দূরত্ব ব্যবহার করে।

j,w,h,k,*b,t[6];main(){scanf("%d %d",&w,&h);b=calloc(w*h,24);for(;~scanf("%d",t+j++%6);)for(k=0;j%6?0:k<3*w*h;k++)b[k]=fmin(b[k]+t[2]*t[3+k%3]/(abs(k/3%w-*t)+abs(k/3/w-t[1])+1),255);printf("P6\n%d %d\n255\n",w,h);for(k=0;k<3*w*h;putchar(b[k++]));}

এখানে ইউক্লিডিয়ান দূরত্বের বৈকল্পিক (257 বাইট):

j,w,h,k,*b,t[6];main(){scanf("%d %d",&w,&h);b=calloc(w*h,24);for(;~scanf("%d",t+j++%6);)for(k=0;j%6?0:k<3*w*h;k++)b[k]=fmin(b[k]+t[2]*t[3+k%3]/(sqrt(pow(k/3%w-*t,2)+pow(k/3/w-t[1],2))+1),255);printf("P6\n%d %d\n255\n",w,h);for(k=0;k<3*w*h;putchar(b[k++]));}

6

সিজেম, 86 বাইট

q~]"P3 "\_2>:T;2<_S*" 255 "@:,~\m*{(+0a3*T6/{_2<3$.-:z~+)d\2>(f*\f/.+}/:i255fe<\;S*S}/

যদিও এটি গল্ফিং ভাষার জন্য এক প্রকার দীর্ঘ দেখায় তবে আমি বিশ্বাস করি যে এখন পর্যন্ত পোস্ট করা সমাধানগুলির মধ্যে এটি সবচেয়ে সংক্ষিপ্ত যা চিত্রের আউটপুট কার্যকারিতা ব্যবহার করে না। এটি ASCII আকারে একটি পিপিএম ফাইল তৈরি করে। নীচের চিত্রটি জিএমপি ব্যবহার করে পিপিএম থেকে পিএনজিতে রূপান্তরিত হয়েছিল।

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

উদাহরণ সি

ব্যাখ্যা:

q~      Read and parse input.
]       Wrap it in an array.
"P3 "   Output start of PPM header.
\       Swap input to top.
_2>     Slice off first two values, leaving the star descriptors.
:T;     Store star descriptors in variable T.
2<      Get first two values in input, which is the image size.
_S*     Leave a copy of the size in the output for the PPM header.
" 255 " Rest of PPM header, range of color values.
@       Pop sizes to top.
:,      Expand sizes to ranges.
~       Unwrap size ranges into separate stack elements.
\       Swap ranges, since we need x-range second for Cartesian product.
m*      Generate all coordinate pairs with Cartesian product.
{       Loop over pixel coordinate pairs.
  (+      Swap values in coordinate pair to get x-coordinate first again.
  0a3*    Generate [0 0 0] array. Will be used to sum up colors from stars.
  T       Get list of stars.
  6/      Split into sub-lists with 6 values for each star.
  {       Loop over the stars.
    _2<     Get the first two values (position) of the star.
    3$      Pull current pixel coordinates to top of stack.
    .-      Subtract pixel coordinates from star position.
    :z      Absolute value of difference.
    ~+      Unpack differences and add them to get Manhattan distance.
    )d      Add 1 and convert to double to get denominator of formula.
    \       Swap star values to top.
    2>      Slice off first two values, leaving intensity and color.
    (       Pop off intensity.
    f*      Multiply it with color values.
    \       Swap denominator to top.
    f/      Perform division of color components by denominator.
    .+      Add it to sum of colors.
  }/      End loop over stars.
  :i      Convert double values for colors to integer.
  255fe<  Cap color components at 255.
  \;      Swap pixel coordinate to top and pop it.
  S*S     Join color components with space, and add another space.
}/      End loop over coordinate pairs.

5

সি # 718 বাইট

আমি বুঝতে পেরেছি যে সি # গল্ফিংয়ের জন্য ভয়ানক, তবে এখানে 718 বাইটে আমার চেষ্টা রয়েছে

namespace System{using Collections.Generic;using Drawing;using Linq;using O=Convert;class P{int j,i;List<S> s=new List<S>();Image G(string t){var l=t.Replace("\r","").Split('\n');var w=O.ToInt32(l[0].Split(' ')[0]);var h=O.ToInt32(l[0].Split(' ')[1]);for(i=1;i < l.Length;i++){var p=l[i].Split(' ');s.Add(new S{X=O.ToInt32(p[0]),Y=O.ToInt32(p[1]),I=O.ToSingle(p[2]),R=O.ToByte(p[3]),G=O.ToByte(p[4]),B=O.ToByte(p[5])});}var b=new Bitmap(w,h);for(j=0;j<h;j++)for(i=0;i<w;i++)b.SetPixel(i,j,C());return b;}Color C(){return Color.FromArgb(X(x=>x.R),X(x=>x.G),X(x=>x.B));}int X(Func<S,float>f){return(int)Math.Min(s.Sum(x=>x.I*f(x)/(Math.Sqrt((x.X-i)*(x.X-i)+(x.Y-j)*(x.Y-j))+1)),255);}class S{public float X,Y,R,G,B,I;}}}

এটি সংক্ষিপ্ত করার জন্য কারও কাছে যদি কোনও পরামর্শ থাকে তবে নির্দ্বিধায় আমাকে জানান।


আপনি রঙটি মিস করেছেন romফর্মআরগবি (ইন, ইনট, ইনট) ওভারলোড। 4 টি বাইট সাশ্রয় করবে ...
মেলভিন

এছাড়াও, আপনার সম্ভবত ব্যবহার করা উচিত .কাউন্ট () এর পরিবর্তে দৈর্ঘ্য। এক বাইট কম, এবং আরও দক্ষ। এবং উপায় দ্বারা, আপনি যদি ইচ্ছুক হন তবে সি # 6 এর নতুন এক্সপ্রেশন-দেহী সদস্যদের ব্যবহার করে আপনি আরও অনেকগুলি বাইট সঞ্চয় করতে পারবেন।
মেলভিন

দৈর্ঘ্য এবং ওভারলোড উভয়ই ভাল পয়েন্ট, এখনই সামঞ্জস্য। এবং অভিব্যক্তি দেহী সদস্যদের সন্ধান করা। আগে যারা দেখেনি। ধন্যবাদ
অ্যালান হার্পার

4

পাইথন, 259 বাইট

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

from PIL.Image import new
N,*s=[list(map(int,i.split()))for i in iter(input,'')]
q,m=new("RGB",(N[0],N[1])),[]
[m.append(tuple(sum(k[2]*k[i]//(abs(k[1]-x)+abs(k[0]-y)+1)for k in s)for i in(3,4,5)))for x in range(N[1])for y in range(N[0])]
q.show(q.putdata(m))

আমি জানি তাদের সবার জন্য একটি গণনা করার একটি উপায় অবশ্যই আছে, তবে আমি সত্যই পাইথনকে এটি ভাল জানি না।
নিকোলস সিপলিস


তোমার এখনও সঠিকভাবে কাজ করে না, সুইচ আছে k[0]এবং k[1]গণনার হবে।
মালটিসেন

এটি আমার মেশিনে কেন কাজ করছে তা বুঝতে 10 মিনিটের মতো সময় নিয়েছিল, আমি তাদের উল্টিয়েছি কিন্তু এখানে এটি পরিবর্তন করতে ভুলে গেছি।
নিকোলের সিপলিস

2

সিজেম, 70 বাইট

"P3"l_~\:W*255\,[q~]6Te]6/f{\[Wmd\]f{.-Z/~\)\~mh)/f*}:.+{i255e<}/}~]S*

ইউক্লিডিয়ান দূরত্ব, ASCII পিপিএম আউটপুট। এটি অনলাইনে চেষ্টা করুন

আরও কয়েকটি বাইট নিচু করা উচিত, তবে আমি খুব বেশি সময় ব্যয় করতে চাই না।

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