হালকা সাজসজ্জা অ্যানিমেট করুন


22

আমার শ্বশুরবাড়ির ঘরে ক্রিসমাস লাইটের সম্মানজনকভাবে এই চ্যালেঞ্জটি।


চ্যালেঞ্জটি হ'ল "আসল সময়" এ সজ্জা প্রদর্শন করে একটি গ্রাফিকাল আউটপুট তৈরি করা।

ভিডিওতে (জিআইএফ বা অন্যান্য ফর্ম্যাট) এন-বাই-এম উল্লম্ব এবং অনুভূমিক "লাইট" থাকবে। 5 <= মি, এন <= 40 । ফ্রেম আকার এবং রেজোলিউশন n এবং m এর উপর নির্ভরশীল হতে পারে তবে এন, মি = 5 (ভেক্টরের গ্রাফিক্স ঠিক আছে) এর জন্য কমপক্ষে 50x50 পিক্সেল হওয়া উচিত । সহ একটি চিত্র এবং এর মতো দেখতে পাবেন:n=6m=5

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


সাজসজ্জা:

রং:

সকল লাইট নিম্নলিখিত 6 আরজিবি-রং থাকবে {255,0,0}, {0,255,0}, {0,0,255}, {255,255,0}, {0,255,255}এবং {255,0,255}

অ্যানিমেশন:

  • nএবং mযেকোন যুক্তিসঙ্গত বিন্যাসে এবং আপনার পছন্দ মতো ক্রমে ইনপুট হিসাবে নেওয়া হবে
  • চিত্র প্রতি পরিবর্তন হবে dt = 25 ms। বিবর্তনগুলি ঠিক আছে যদি এটি "বাইরের কারণগুলির" কারণে হয় যেমন দোভাষীর সীমাবদ্ধতা, ধীর কম্পিউটার ইত্যাদি to
    • যদি সময় পদক্ষেপটি ম্যানুয়ালি সেট করা অসম্ভব হয়, তবে ডিফল্ট সময় পদক্ষেপটি গৃহীত হয়।
  • সমস্ত লাইট লাল হবে ( {255,0,0}) এ t=0
  • প্রথম আলো (উপরের-বাম) রঙ পরিবর্তন করার সম্ভাবনা রয়েছে always সমস্ত রঙ (বর্তমানে এটির রঙ ছাড়া) সমান সম্ভাবনা থাকা উচিত।
  • প্রতিটি আলো (প্রথম ব্যতীত) তার বাম দিকে আলোর রঙ পাবেন। আলো যদি খুব বাম দিকে থাকে তবে এটি উপরের সারিটিতে ডানদিকে ডানদিকে আলোর রঙ পাবেন। নীচে প্রদর্শিত হিসাবে লাইট নাম্বার করা হয়। হালকা নাম্বারটি kআলোক সংখ্যার রঙ পাবেন k-1

     1  2  3  4  5  6
     7  8  9 10 11 12
    13 14 15 16 17 18
    
  • আউটপুটটি তত্ত্ব হিসাবে চিরকাল চলতে হবে (যদি না আপনার ভাষা / দোভাষীর কিছু সীমাবদ্ধতা থাকে যা এটি প্রতিরোধ করে)।

  • কমপক্ষে 5 সেকেন্ডের নমুনা সরবরাহ করুন, উত্তরে আরও বেশি (এটি একটি উত্সাহ, প্রয়োজন নয়)। (টিআইও বা এর সাথে একটি লিঙ্ক অবশ্যই ঠিক আছে: ডি)
  • ফ্রেম, অক্ষ, গ্রিড লাইন ইত্যাদি গ্রহণ করা হয়।

6-দ্বারা-5

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

15-বাই-30

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


দোভাষী যদি ধীর গতিতে থাকে, তবে বিরতির সময়টি সামঞ্জস্য করা উচিত যাতে চিত্রের আপডেটের মধ্যে মোট সময় উদাহরণগুলির সাথে মিল থাকে? বিরতি প্রয়োজন না হলে (কোডটি ইতিমধ্যে যথেষ্ট ধীর হয়ে গেছে) কী হবে? এটি বাইটগুলি বাঁচাতে পারে, সম্ভবত চ্যালেঞ্জের চেতনার বিরুদ্ধে
লুইস মেন্ডো

1
যেহেতু আপনি বাস্তবায়নের স্বাচ্ছন্দ্যের জন্য রঙগুলি বেছে নিয়েছেন - কিউ বেসিকের মতো ভাষায় যেগুলি রঙের একটি সীমাবদ্ধ অন্তর্নির্মিত সেট রয়েছে, আপনি যেগুলি নির্দিষ্ট করেছেন তার নিকটতম উপলব্ধ রঙগুলি ব্যবহার করা কি গ্রহণযোগ্য? (লাল, সবুজ, নীল, হলুদ, সায়ান, ম্যাজেন্টা)
ডিএলকস

যদি নির্দিষ্ট রঙগুলি ব্যবহার করা অসম্ভব হয় তবে হ্যাঁ, নিকটতম বিকল্পগুলি ব্যবহার করা ঠিক আছে। যদি এটি কিছুটা দীর্ঘ হয় তবে না। r,g,y,b,ইত্যাদি কয়েকটি ভাষায় সংক্ষিপ্ত হয়।
স্টিভি গ্রিফিন 21

@ লুইস মেন্ডো, দেরিতে জবাবের জন্য ক্ষমা চাইছি। আপনার উত্তরে আপনি যেভাবে এটি করেছেন তা আমি পছন্দ করি। 25 এমএস ব্যবহার করা ঠিক হবে, এমনকি এটি অ্যানিমেশনটিকে আরও ধীর করে দেয়। drawnowফলাফলটি খুব ধীর হওয়ার কারণে আমি ম্যাটল্যাব এ প্রয়োগ করেছি তখন এড়ানো হয়েছিল। আমি মনে করি উত্তরটি অবশ্যই হওয়া উচিত: যদি এটি কোনও ডিজাইনের পছন্দ হয় যে দোভাষীর একটি নির্দিষ্ট ন্যূনতম সময় রেজোলিউশন> = 25 এমএস থাকে তবে এটি ঠিক আছে। যদি এটি দুর্বল / সরল বাস্তবায়নের কারণে, একটি অনলাইন দোভাষী যা অতিরিক্ত বোঝা / ধীর ইত্যাদি হয় তবে এটি ঠিক নেই।
স্টিভি গ্রিফিন

1
@ স্টেভি বুঝতে পেরেছেন, ধন্যবাদ। এবং দুর্দান্ত চ্যালেঞ্জ!
লুইস মেন্ডো

উত্তর:


6

জাভাস্ক্রিপ্ট / সিএসএস / এইচটিএমএল, 436 বাইট

b="red"
f=_=>{o.textContent='';o.style.width=w.value*10+"px";o.style.height=h.value*10+"px"}
setInterval(_=>o.insertBefore(document.createElement("s"),o.firstChild).style.background=b=["red","yellow","lime","aqua","blue","fuchsia"][Math.random()*100|0]||b,25)
#o{overflow:hidden;background:red}s{display:block;float:left;width:10px;height:10px}
<div oninput=f()><input id=h type=number min=1><input id=w type=number min=1></div><div id=o>


6

গণিত, 186 161 158 বাইট

(b=Table[{1,0,0},1##];Dynamic@Image[Partition[Pause@.025;If[Random[]<.06,b[[1]]={1,1,0,0}~RandomSample~3];b=RotateRight@b;b[[1]]=b[[2]];b,#],ImageSize->50#])&

ব্যাখ্যা

b=Table[{1,0,0},1##];

লাল দিয়ে পূর্ণ 1D তে প্রাথমিক বোর্ড তৈরি করুন। যে স্টোর b

Pause@.025

25 মিনিটের জন্য বিরতি দিন

If[Random[]<.06,b[[1]]={1,1,0,0}~RandomSample~3]

যদি একটি (সিউডো-) এলোমেলো আসল সংখ্যা 0.06 এর কম হয় তবে তালিকার bএকটি এলোমেলো নমুনা দৈর্ঘ্যের সাথে প্রথম উপাদানটি প্রতিস্থাপন করুন । (যেমন যে কোনও একটি )3{1,1,0,0}{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}

b=RotateRight@b

চক্রাকার ডানদিকে ঘোরান।

b[[1]]=b[[2]]

প্রথম কক্ষের মানটি দ্বিতীয় কক্ষের মানতে পরিবর্তন করুন (অর্থাত্ প্রথম কক্ষের শিফটটি পূর্বাবস্থায় ফেরা)

Partition[ ... ;b,#]

b(উচ্চতা) মধ্যে বিভাজন ।

Dynamic@Image[ ... ,ImageSize->50#]

এটিকে একটি গতিশীল (ক্রমাগত আপডেট করা) চিত্রে পরিণত করুন, যার প্রস্থ 50 (প্রস্থ)

সেলুলার অটোমেটনের সংস্করণ (186 বাইট)

(b=Table[{1,0,0},1##];Dynamic@Image[Partition[Pause@.025;If[Random[]<.06,b[[1]]={1,1,0,0}~RandomSample~3];i=2;b={#[[2-Boole[i--<0],2]]&,{},{1,1}}~CellularAutomaton~b,#],ImageSize->50#])&

নমুনা আউটপুট (ইনপুট: 16, 10)

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


6

ম্যাটল্যাব, 255 210 বাইট

এটি আমার প্রথম গল্ফ, সুতরাং সম্ভবত উন্নতি করার দরকার আছে।

আমাকে 45 বাইট বাঁচাতে সাহায্য করার জন্য লুইসকে ধন্যবাদ :)

function f(n,m)
c=dec2bin(1:6)-48;r=1;p=c(r,:);x=zeros(1,n*m,3);x(:,:,1)=1;while 1
x=circshift(x,[0,1,0]);if rand>0.94;r=randi(6);end
x(1,1,:) = c(r,:);imagesc(permute(reshape(x,n,m,3),[2 1 3]));pause(1/40);end

ব্যাখ্যা:

c=dec2bin(1:6)-48  % c is the colormap
r=1;p=c(r,:);                % p is color number r (starting at 1) from the colormap c
x=zeros(1,n*m,3);x(:,:,1)=1; % 2D matrix in the third dimension. The first layer is 1
while 1                      % while true
x=circshift(x,[0,1,0]);      % shift the vector horizontally along the second dimension
if rand()>0.94;              % 5 percent chance of changing color
k=randperm(6);k=k(k~=r);r=k(1); % Create a vector with color numbers 1..6. Discard the current color, and choose the first color
x(1,1,:) = c(r,:);           % The first light gets color number r
imagesc(permute(reshape(x,n,m,3),[2 1 3]));  % Reshape the vector so that it's a 3D matrix
% Permute it so that the dimensions are correct
% Use imagesc to display
pause(1/40)  % 0.025 seconds pause

দুর্ভাগ্যক্রমে, এটি অ্যানিমেশনটি সংরক্ষণ করে না, এটি কেবল এটি চালায়। এটি সংরক্ষণ করার জন্য আমার হয় একটি স্ক্রিন ক্যাপচার প্রোগ্রামের প্রয়োজন, বা এটি ব্যবহার করে পুনরায় লিখুন imwrite। পরিবর্তে, আমি জন্য, দুটি ভিন্ন সময়ের দেখাচ্ছে ছবি সরবরাহ করব n=15,m=30

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

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


1
কিছু গল্ফিং পরামর্শ: dec2bin([4 2 1 6 3 5])-48পরিবর্তে [1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1].95পরিবর্তে 0.95। আপনি এটি .95দ্বারা প্রতিস্থাপন করতে পারেন এবং .94পরিত্রাণ পেতে পারেন k=k(k~=r);(কারণ 0.94 + 0.06 / 6 = 0.95; আরও বিস্তারিত ব্যাখ্যাের জন্য আমার উত্তর দেখুন)
লুইস মেন্ডো

1
আরও ভাল c=dec2bin(1:6)-48, যেমন আদেশের কোনও বিষয় নেই
লুইস মেন্ডো

প্রথম উত্তর! যাইহোক, আমি ভয় করি যে আমি আপনাকে 40% ছাড়িয়েছি
Sanchises

এটি কিছুটা নিচে নামিয়েছেন :) লুইসের সহায়তার জন্য ধন্যবাদ। ! :) ভাল কাজ সানচাইসেস!
সিজি

4

MATL , 52 47 বাইট

6:BoHZGKipY"`tGe!2YG50Yr3>?t1)}6Yr]0(1YS.015Y.T

ইনপুট একটি অ্যারে হয় [ncols nrows]। আউটপুট ভেক্টর গ্রাফিক্স সহ একটি চিত্র।

15 কলস × 10 সারিগুলির জন্য দৌড়ানো উদাহরণ:

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

কিভাবে এটা কাজ করে

প্রসেসিং সময়টির জন্য ক্ষতিপূরণ দেওয়ার জন্য বিরতি সময়টি 15 এমএসে নির্ধারণ করা হয়েছে (25 বেলারুশ হিসাবে একই বাইট গণনার জন্য)।

19/20 সম্ভাব্যতার সাথে রঙটি রাখতে (1/20 দিয়ে এটি পরিবর্তন করুন), আমরা নিম্নরূপে এগিয়ে চলি:

  • 47/50 সম্ভাব্যতার সাথে আমরা রঙটি রাখি।
  • 3/50 সম্ভাব্যতার সাথে আমরা 6 টি বর্ণের মধ্যে একটি নতুন রঙ চয়ন করি uniform এটি ঘটতে পারে যে "নতুন" রঙটি পুরানোটির মতো এবং এটি সম্ভাব্যতা 1/6 এর সাথে ঘটে।

সুতরাং রঙটি রাখার সম্ভাবনা 47/50 + 3 / (50 * 6) = 19/20।

6:        % Push [1 2 3 4 5 6]
B         % Convert to binary. This gives a 6×3 matrix, where each row 
          % corresponds to a number. First row is [0 0 1] (blue), second is
          % [0 1 0] (green), etc
o         % Convert to double
HZG       % Set as colormap (creates a figure)
K         % Push 4
i         % Take input array
p         % Product of array. This gives the total number of squares
Y"        % Repeat 4 that many times. This gives a row vector representing the
          % image. The initial value, 4, corresponds to red in the colormap
`         % Do...while
  t       %   Duplicate
  Ge      %   Reshape to size given by the input. Gives a matrix where each
          %   entry  will be interpreted as a pointer to the colormap
  !       %   Transpose. This is required because the color shifting will be
          %   done in column-major order: down, then across; whereas we want
          %   the opposite
  2YG     %   Show matrix as image using the defined colormap
  50Yr    %   Push a uniformly distributed random integer between 1 and 50
  3>      %   True if greater than 3. This happens with probability 47/50
  ?       %   If true
    t1)   %     Duplicate and get first entry (to repeat the first color)
  }       %   Else
    6Yr   %     Push a uniformly distributed random integer between 1 and 6.
          %     This is the new color (possibly the same as the old)
  ]       %   End
  0(      %   Assign that color (repeated or new) to the last entry of the row
          %   vector representing the image
  1YS     %   Circularly shift to the right. The last value becomes the first
 .015Y.   %   Pause 0.015 ms
 T        %   Push true
          % End (implicit). Since the top of the stack is true, this creates
          % an infinite loop

3

ম্যাটল্যাব, 153 147 বাইট

দ্রষ্টব্য : প্রদর্শিত জিআইএফটি পুরানো সংস্করণে রয়েছে, এটি অক্ষর প্রদর্শন না করার কারণে এটি দুর্দান্ত (সম্পাদনা ইতিহাস দেখুন), তবে বাস্তবায়নের কারণে অত্যন্ত ধীর ছিল imshow। বর্তমান সংস্করণের জন্য, চেলসি জি এর ম্যাটল্যাব উত্তর বা লুইস মেন্ডোর এমএটিএল উত্তরগুলি আমার বর্তমান সংস্করণ হিসাবে একই ফলাফল দেখায়।

আকারটি 2x1ভেক্টর হিসাবে নেওয়া হয় , সুতরাং যেমন কল করুন:

>> l([5 5])

function l(s)
c=eye(3);x=eye(s);while 1
a=rand>.94;x=[a*randi(6)+~a*x(1),x(1:end-1)];imagesc(reshape(x,s)',[1,6]);colormap([c;1-c])
pause(.025)
end

এই উত্তরটি ম্যাটল্যাব ভাষার সূক্ষ্মতা ব্যবহার করে। উদাহরণস্বরূপ, শূন্য ম্যাট্রিক্স xহিসাবে উদ্ভাবিত m x n, তবে তথাকথিত লিনিয়ার সূচকগুলি সূচক 1-মাত্রিক সূচকগুলি দিয়ে বিজ্ঞপ্তি পরিবর্তন করতে দেয়। দুর্বল টাইপিং লজিক্যালগুলি দিয়ে গুণ করার অনুমতি দেয়, যাতে বিবৃতি এড়ানো যায় ( টিআই -৪৪ ক্যালকুলেটরের প্রোগ্রামিংয়ের দিনগুলিতে আমি ভারী ব্যবহৃত হয়েছিল)। রঙিন মানচিত্রটি সারি অনুসারে পড়লেও, ম্যাটল্যাব এটিকে একটি সাধারণ ম্যাট্রিক্স হিসাবে বিবেচনা করে, যাতে এটি লাল, সবুজ এবং নীল এবং অন্য তিনটি রঙ তৈরি করতে ব্যবহার করা যায় । একটি সাধারণ লিনিয়ার ভেক্টরটিকে ম্যাট্রিক্স ফর্মে ফিরিয়ে আনে, যা ব্যবহার করে পছন্দসই রঙে ম্যাপ করা হয় । অবশেষে, উভয় থেকেই ম্যাট্রিক্স সূচনা করতে ব্যবহার করা যেতে পারে এবং এটি লাল হিসাবে বিবেচিত হয়।ifeye(3)1-eye(3)reshapeind2rgbimagesc, চিত্রটি প্রদর্শন করে, ডিফল্ট আকারের আকারে প্রদর্শিত হয় (যা প্রয়োজনীয়তার জন্য যথেষ্ট বড়)। ভাগ্যের এটি যেমন থাকবে, imagescনির্দিষ্ট রেঞ্জের বাইরে থাকা মানগুলি মনে করবেন না, সুতরাংeye10

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


1
ওফস, আপনাকে উজ্জীবিত করতে ভুলে গেছি ... আমি আপনার সমস্ত ছোট কৌশল পছন্দ করি :-)
সিজি।

এটি কি সঠিক যে আপডেট সংস্করণে এলোমেলো রঙ কখনও লাল হয় না? এটি অক্টোবায় অন্তত এমনভাবে দেখা যায় (ম্যাটল্যাব নেই)।
স্টিভি গ্রিফিন

@ স্টেভি গ্রিফিন আমি যখন এটি তৈরি করছিলাম তখন আমি অবশ্যই ঘুমিয়ে ছিলাম। আপনি অবশ্যই পুরোপুরি সঠিক - এবং এটি আমাকে একটি
বাইটও

(এটি দুটি বাইট তৈরি করুন)
সানচিইস

2

পাইথন ৩.6 (৩১6 বাইট)

এএনএসআই রঙ কোডগুলি এবং পাইথন ৩.6 ( পিইপি 489 ) এর নতুন ফর্ম্যাটযুক্ত স্ট্রিং লিটারেলগুলি (f"{X}" যাদু) ।

অন্যথায় এটি কেবল বেশ প্রাথমিক, তবে অজগর অচল। কমান্ড লাইনে যুক্তি হিসাবে প্রস্থ এবং উচ্চতা পাস করা হয়।

import random as n,time,sys
r=range
X="\x1b["
C=[f"{X}1;4{x}m " for x in r(1,7)]
w,h=list(map(int,sys.argv[1:]))
a=[C[0]for i in r(w*h)]
while 1:
 print(f"{X}0m{X}2J{X}f");f=a[0];a.pop();a[:0]=n.choice([x for x in C if x!=f])if n.random()<=.05 else f,
 for i in r(0,h*w,w):print(*a[i:i+w],sep="")
 time.sleep(.025)

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


আপনি 6 টি বাইট ব্যবহার করে বাঁচাতে পারবেন w,h=map(int,sys.argv[1:]), যেকোন পুনরাবৃত্ত (সঠিক আকারের) সাথে কাজগুলি আনপ্যাকিং করে , তালিকায় কলটি অতিমাত্রায়।
সেবাস্তিয়ান রিস

আরও কয়েকটি বাইট ডাউন: "\x1b["=> "\33["(হেক্সের পরিবর্তে অষ্টাল ব্যবহার করে পালিয়ে যায়), তারপরে এক্স সংক্ষেপণ এবং ফর্ম্যাট স্ট্রিংগুলি প্রকৃতপক্ষে এটি দীর্ঘতর করে তোলে (এবং f""আপনাকে পরিত্রাণ দিয়ে যে কোনও পাইথন 3 এর সাথে সামঞ্জস্য পেতে পারে)। (এটি এটিকে 301 বাইটে নামিয়ে আনবে)।
সেবাস্তিয়ান রিস

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