জীবন রঙিন হতে পারে!


30

জীবনের মতো সেলুলার অটোমেটনের প্রতিটি কক্ষকে কেবল এটির জন্য একটি বিট প্রয়োজন কারণ এটি কেবল জীবিত বা মৃত হতে পারে। এর অর্থ মাত্র দুটি রঙ রয়েছে; বেশ বিরক্তিকর.

সাধারণ চিত্রগুলিতে প্রতি পিক্সেলটিতে 24 বিট থাকে (প্রতিটি আরজিবিতে 8 টি)। এর অর্থ হল পিক্সেল সহ একটি সাধারণ চিত্রটিতে কোষ হিসাবে আপনি একবারে 24 লাইফ-জাতীয় গেম সিমুলেট করতে পারবেন!

চ্যালেঞ্জ

আপনার কাজটি এমন একটি প্রোগ্রাম লিখতে হবে যা একটি জীবন-মতো সেলুলার অটোমেটনের নিয়মগুলির একটি প্রজন্মকে 24-বিট গভীরতার চিত্রটিতে (আপনার পছন্দ মতো কোনও পরিচিত ফর্ম্যাটে) প্রয়োগ করতে পারে এবং ফলাফলটি কার্যকর করে।

24 টি স্তরের প্রত্যেকটি একই স্তরের মধ্যে কঠোরভাবে একই জীবন-সংক্রান্ত নিয়মকোষ ব্যবহার করবে। 24 স্তর একে অপরের সাথে যোগাযোগ করে না।

এছাড়াও

  • জেরোস মৃত কোষ এবং সেগুলি হ'ল লাইভ কোষ cells
  • সীমানা পরিস্থিতি পর্যায়ক্রমিক (একটি টরাস গঠন)।
  • যে কোনও চিত্রের মাত্রা কাজ করা উচিত।

ইনপুট আউটপুট

আপনার প্রোগ্রামটির স্টিডিন বা কমান্ড লাইনের মাধ্যমে (বা আপনার ভাষার নিকটতম সমতুল্য) মাধ্যমে 3 টি আর্গুমেন্ট নেওয়া দরকার:

  1. ইনপুট চিত্রের নাম of
  2. ক্রমবর্ধমান ক্রমে 0 থেকে 8 সংখ্যার একটি স্ট্রিং যা নতুন কোষগুলির জন্মের সময় বোঝায়:
    • অঙ্ক তাহলে স্ট্রিং তাহলে মৃত কোষ জীবন্ত তারা আছে জীবিত প্রতিবেশীদের।
    • উদাহরণ: 3স্বাভাবিক জীবন - ঠিক ৩ টি জীবিত প্রতিবেশী সহ মৃত কোষগুলি জীবনে আসে।
  3. ক্রমবর্ধমান ক্রমে 0 থেকে 8 সংখ্যার একটি স্ট্রিং যা বিদ্যমান কোষগুলি বেঁচে থাকার সময় নির্দেশ করে:
    • অঙ্ক তাহলে স্ট্রিং তাহলে সঙ্গে বসবাস কোষ জীবিত প্রতিবেশীদের পরবর্তী প্রজন্মের কাছে টেকা, অন্যথায় তারা মারা যায়।
    • উদাহরণ: 23স্বাভাবিক জীবন - পরের রাউন্ডে ঠিক 2 বা 3 প্রতিবেশী শুধুমাত্র কক্ষগুলি বেঁচে থাকে।

নোট করুন যে মুর পাড়া সর্বদা ব্যবহৃত হয়। জীবনের মতো অটোম্যাটন এবং অনেক আকর্ষণীয় নিয়মকোণগুলি কীভাবে সংজ্ঞায়িত করে সে সম্পর্কে আরও তথ্যের জন্য এটি বা এটি পড়ুন ।

1-প্রজন্মের-পরবর্তী আউটপুট চিত্রটি প্রদর্শিত হয় বা out.png( bmpবা যাই হোক না কেন) হিসাবে সংরক্ষণ করা উচিত ।

নমন

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

কিছু অ-তুচ্ছ রুলসেটের জন্য আপনাকে কমপক্ষে একটি পরীক্ষার চিত্র এবং এর তত্ক্ষণাত্ পরবর্তী প্রজন্ম অন্তর্ভুক্ত করতে হবে । আপনি আরও ভাল কিছু ভাবতে না পারলে আপনার অবতার এবং সাধারণ জীবনের নিয়মাবলী ব্যবহার করুন।

আপনি যদি পছন্দ করেন তবে আপনি এই গসিপার গ্লাইডার গানটি ব্যবহার করতে পারেন যেখানে কেবলমাত্র জীবিত বিট সবুজ 128 স্তরে রয়েছে (এটি কেবলমাত্র সাধারণ জীবনে কাজ করা নিশ্চিত):

গ্লাইডার বন্দুক

আকর্ষণীয় সিকোয়েন্স বা এমনকি অ্যানিমেশনগুলি পোস্ট করা অত্যন্ত উত্সাহিত।


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

1
@ হাওয়ার্ড তবে আপনি কি ছবিগুলি দেখতে আগ্রহী নন?

3
হ্যাঁ। পিপিসি.এসই মজাদারসুন্দর চিত্র নয়, বেদনা ও যন্ত্রণার জায়গা । যদি তিনি বোনাস ধারণাটি একটি প্রয়োজনীয়তা তৈরি করে থাকেন তবে অবশ্যই প্রশ্নটি যথেষ্ট আসল হতে হবে?
ফ্লোন্ক

3
সম্প্রদায়ের স্পষ্ট আগ্রহ হ'ল প্রোগ্রামগুলি অন্য প্রশ্নের উত্তর থেকে সামান্য পরিবর্তন সহ অনুলিপি করা হবে না। এই সাইটটি "আমি মনে করি এটি মজাদার হতে পারে, তাই এটি ঠিক আছে" এর ভিত্তিতে কাজ করে না। এটাই 4 চঞ্চন।
পিটার টেলর

4
@ নীচে আমি এইটিকে আর সদৃশ হিসাবে গণনা করি না। অবশ্যই যদি কোডগলফ.স্ট্যাকেক্সচেঞ্জ / প্রশ্নগুলি / 34505 / simulate- rule-110 এবং কোডগলফ.স্ট্যাকেক্সচেঞ্জ / প্রশ্নগুলি / 4370/… সহাবস্থান করতে পারে তবে এটি মোটেই সদৃশ নয়।
ক্যালভিনের শখ

উত্তর:


16

ম্যাটল্যাব: 275

পরামিতি আমি চেষ্টা করছে তার আমার প্রিয় 45678, 568যা বড় ঝিকিমিকি একটি আকাশে একটি ধীরে ধীরে বিভেদ ফলাফল নিম্নলিখিত। এই চিত্রটিতে চিত্রিত করা হয়েছে, "স্মৃতির অধ্যবসায়ের বিচ্ছিন্নতা"।

অগল্ফড জিআইএফ-উত্পাদনকারী কোড (এক্সটেনশন ছাড়াই পিএনজি গ্রহণ করে):

B = input('B', 's') - 48;
S = input('S', 's') - 48;
f0 = input('file: ', 's');
frames = 60;

f = sprintf('%s.png',f0);
fout = sprintf('%s.gif',f0);
first = 1;
img = imread(f);
for i = 1:60
    out = img * 0;
    [r, c, turd] = size(img);
    for b=0:7
        bimg = ~~bitand(img,2^b);
        pimg = [bimg,bimg,bimg;bimg,bimg,bimg;bimg,bimg,bimg];
        fun = @(ro,co) pimg(r+ro:r+r+ro-1,c+co:c+c+co-1,:);
        sum = fun(0,0)+fun(0,1)+fun(0,2)+fun(1,0)+fun(1,2)+fun(2,0)+fun(2,1)+fun(2,2);
        bnew = uint8(bimg & ismember(sum,S) | ~bimg & ismember(sum, B));
        out = out + 2^b * bnew;
    end
    %imwrite(out,'out.png');
       if first
           [img1,img2] = rgb2ind(img,256);
           imwrite(img1,img2,fout,'gif','Loop',Inf);
          imwrite(img1,img2,fout,'gif','WriteMode','append');
           first = 0;
       end
       img = out;
       [img1,img2] = rgb2ind(img,256);
       imwrite(img1,img2,fout,'gif','WriteMode','append');%,'DelayTime', 2*delay);
end

গল্ফযুক্ত কোড যা একটি সম্পূর্ণ ফাইলের নাম গ্রহণ করে (যা জিআইএফ, জেপিইজি এবং সম্ভবত অন্যান্য স্টাফ হতে পারে) এবং এতে লিখেছেন out.png:

I=@()input('','s');B=I();S=I();i=imread(I());o=0;[r,c,t]=size(i);for b=0:7
g=~~bitand(i,2^b);p=repmat(g,3);F=@(z,Z)p(r+z:r+r+z-1,c+Z:c+c+Z-1,:);M=@(A)ismember(F(0,0)+F(0,1)+F(0,2)+F(1,0)+F(1,2)+F(2,0)+F(2,1)+F(2,2),A-48);o=o+2^b*uint8(g&M(S)|~g&M(B));end
imwrite(o,'out.png')

পূর্বে আবিষ্কৃত সত্য যে পরামিতি হয় 12, 1একটি Sierpinski কার্পেট মত ফ্র্যাক্টাল জেনারেট করতে ব্যবহার করা যাবে। প্রতিটি বিট এলোমেলোভাবে স্থাপন করা বীজ পয়েন্ট সহ এখানে একটি:


14

গণিত, 359

i=InputString;f=Transpose;b=(p=FromDigits/@Characters@#&)@i[];s=p@i[];Map[FromDigits[#,2]&/@#~ArrayReshape~{3,8}&,f[(g=#;{#,Total[g~RotateRight~#&/@Drop[Join@@Table[{i,j},{i,-1,1},{j,-1,1}],{5}],1]}~f~{3,1,2}/.{l_,n_}:>Boole[l<1&&!b~FreeQ~n||l>0&&!s~FreeQ~n])&/@Apply[Join,IntegerDigits[ImageData[Import@i[],y="byte"],2,8],{2}]~f~{2,3,1},{3,1,2}],{2}]~Image~y

আমি (1) জন্ম বিধি, (2) বেঁচে থাকার নিয়ম, (3) ফাইলের নাম অনুসারে স্ট্রিং প্রম্পট থেকে ইনপুট নিচ্ছি এবং আমি ফলাফলটি ম্যাথামেটিকায় প্রদর্শিত করছি।

যতক্ষণ না ফাইলটির 24-বিট গভীরতা থাকে ততক্ষণ সর্বাধিক জনপ্রিয় ফর্ম্যাটগুলির সাথে ডিল করতে সক্ষম হওয়া উচিত।

এখানে কিছুটা অবারিত সংস্করণ দেওয়া হয়েছে:

i = InputString;
f = Transpose;
b = (p = FromDigits /@ Characters@# &)@i[];
s = p@i[];
Map[
  FromDigits[#,2] & /@ #~ArrayReshape~{3, 8} &,
  f[
   (
      g = #;
      {#, 
         Total[g~RotateRight~# & /@ 
           Drop[Join @@ Table[{i, j}, {i, -1, 1}, {j, -1, 1}], {5}], 
          1]}~f~{3, 1, 2} /. {l_, n_} :> 
        Boole[l < 1 && ! b~FreeQ~n || l > 0 && ! s~FreeQ~n]
      ) & /@ 
    Apply[Join, 
      IntegerDigits[ImageData[Import@i[], y = "byte"], 2, 8], {2}]~
     f~{2, 3, 1},
   {3, 1, 2}
   ],
  {2}
  ]~Image~y

রেনবোল্টের অবতার ব্যবহার করে এখানে দুটি উদাহরণ দেওয়া হয়েছে :

Rainbolt

20 প্রজন্মের স্ট্যান্ডার্ড গেম অফ লাইফ ব্যবহার করে [3,23]:

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

20 প্রজন্ম ব্যবহার করছে [456,34567]:

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

এবং এখানে পরবর্তী নিয়মের প্রথম 200 প্রজন্মের একটি জিআইএফ রয়েছে। জিআইএফ প্রতি তৃতীয় ফ্রেম এড়িয়ে যায়, কারণ আমি এটি 2MB এর নীচে সংক্ষেপ করতে পারি না:

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


2
কি আকর্ষণীয় নিয়ম
গর্বিত হাসেলেলার

10

পাইথন 2, 427

যাদের গাণিতিক নেই;)

import Image as I
t=raw_input
r=range
A=I.open(t())
G=map(int,t())
S=map(int,t())
w,h=A.size
B=I.new('RGB',(w,h))
A=[[map(int,("{:08b}"*3).format(*A.load()[x,y]))for y in r(h)]for x in r(w)]
for x in r(w):
 for y in r(h):
  p=''
  for i in r(24):
    c=A[x][y][i]
    n=sum(A[(x+k-1)%w][(y+j-1)%h][i]for j in r(3)for k in r(3))-c
    p+=str(~~[n in G,n in S][c])
  B.load()[x,y]=tuple(int(p[i*8:i*8+8],2)for i in r(3))
B.save('out.bmp')

এটি ফাইলের নাম, তারপরে জন্মের ক্ষেত্রে এবং তারপরে বেঁচে থাকার কেসগুলির জন্য অনুরোধ জানায়। তাই স্বাভাবিক জীবন নিয়ম করার জন্য আপনাকে হয়তো ইনপুট test.bmp, তারপর 3, তারপর 23(কোন কোট কিছু প্রয়োজন)।

আমি সূচীতে স্ট্রিং ফর্ম্যাটিংটি ব্যবহার করেছি এবং রঙ বিটগুলি পুনরায় সমন্বিত করতে পারি, যদিও আমি আশঙ্কা করি যে এটি সম্ভবত অনুকূল নয়।

নোট যে এটি বেশ ধীর।

উদাহরণ

উচ্চ জীবন এবং দুর্দান্ত শিল্প মিশ্রণ না? (বিধি 36/ 23।)

মোনা লিসা অরিজিনাল প্রজন্ম 1 আসল / জেনারেশন 1

প্রজন্ম 2 প্রজন্ম 3 প্রজন্ম 2 / জেনারেশন 3


6

জাভা, 1085 বাইট

import java.awt.image.*;import java.io.*;import javax.imageio.*;class F{static int n(boolean[][][]a,int x,int y,int z){int k=0;for(X=Math.max(x-1,0);X<Math.min(x+2,w);X++)for(Y=Math.max(y-1,0);Y<Math.min(y+2,h);Y++)if(a[X][Y][z])k++;return k-(a[x][y][z]?1:0);}static int p(String k){return Integer.parseInt(k,2);}static int w,h,x,y,z,X,Y;public static void main(String[]a)throws Exception{BufferedImage i=ImageIO.read(new File(a[0]));w=i.getWidth();h=i.getHeight();boolean[][][]G=new boolean[w][h][24];for(x=0;x<w;x++)for(y=0;y<h;y++){String k="".format("%24s",Integer.toBinaryString(0xFFFFFF&i.getRGB(x,y)));for(z=0;z<24;z++){G[x][y][z]=k.charAt(z)>48;}}for(x=0;x<w;x++)for(y=0;y<h;y++){String r="",g="",b="",k;for(z=0;z<8;){k=""+n(G,x,y,z);r+=(-1!=(G[x][y][z++]?a[1].indexOf(k):a[2].indexOf(k)))?1:0;}for(;z<16;){k=""+n(G,x,y,z);g+=(-1!=(G[x][y][z++]?a[1].indexOf(k):a[2].indexOf(k)))?1:0;}for(;z<24;){k=""+n(G,x,y,z);b+=(-1!=(G[x][y][z++]?a[1].indexOf(k):a[2].indexOf(k)))?1:0;}i.setRGB(x,y,new java.awt.Color(p(r),p(g),p(b)).getRGB());}ImageIO.write(i,"png",new File("out.png"));}}

উদাহরণ (নিয়ম 368/245):

জেনারেল 0:

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

জেনার 1:

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

জেনার 2:

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

জেনারেল 3:

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

জেনারেল 4:

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

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