ঝোলা এবং স্মোলস - প্রথম ভাগ


10

সেটআপ

নীচে চিত্র 1 এ দেখানো হয়েছে এমন 29 টি সংখ্যাযুক্ত কোষযুক্ত একটি অদ্ভুত আকারের বাক্সটি বিবেচনা করুন।

shubbles এবং স্মলস

এই 2 ডি বাক্সের অভ্যন্তরে দুটি প্রজাতির স্কোয়ার আকৃতির প্রাণী রয়েছে: শাবলস এবং স্মোমল। চিত্র 1 (ক) নীল রঙের কিছু শেবল দেখায় এবং কিছুটা লাল রঙে ধোঁয়াটে। প্রতিটি প্রাণী ঠিক একটি গ্রিড ঘর দখল করে। বাক্সে 0 থেকে 26 টি বুদবুদের মধ্যে যে কোনও জায়গা থাকতে পারে তবে এতে সর্বদা ঠিক দুটি ধূমপান থাকে।

মাধ্যাকর্ষণ সাপেক্ষে শাবল এবং স্মাইলগুলি বাক্সের নীচে বসে থাকে এবং নীচের যেকোন কিছুতে উপরে দাঁড়িয়ে থাকে। উভয় প্রজাতিই ব্যতিক্রমী অলস এবং স্থির অবিরাম থাকে remain

বাক্সে একটি স্টটও রয়েছে, এটি একটি কালো বর্গ হিসাবে দেখানো হয়েছে, যা ঠিক একটি গ্রিড ঘর দখল করে। স্টট মাধ্যাকর্ষণ সাপেক্ষে নয়

এই বাক্সটির একটি সেল খোলা রয়েছে যা ২৮ ঘরের নীচে রয়েছে, যা চিত্রটিতে চিত্রিত হয়েছে।

পাঠ্যভাবে বাক্সে শাবলস, স্মুয়েলস এবং স্টটগুলির কনফিগারেশন উপস্থাপন করার জন্য, আমরা একটি 29 টি চরিত্রের স্ট্রিং, গ্রিড সেল প্রতি একটি অক্ষর, .একটি খালি ঘর oউপস্থাপন করে, একটি শাবল xউপস্থাপন করে, একটি স্মুথকে প্রতিনিধিত্ব করে, একটি গ্রিড সেল প্রতি একটি অক্ষর ব্যবহার করি, এবং @স্টট প্রতিনিধিত্ব। উদাহরণস্বরূপ, চিত্র 1 (ক) এর কনফিগারেশনটি স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হয়েছে .........@...o....ooo..xox...

হেরফেরের

বাক্সটি 90 any এর যে কোনও একক দ্বারা ঘোরানো যেতে পারে ° বাক্সটি ঘোরানোর সময় শাবলগুলি এবং স্মুয়লগুলি তাদের গ্রিড কোষের মধ্যে স্থির থাকে। ঘূর্ণন শেষ হওয়ার সাথে সাথে এগুলি সরাসরি নীচে নেমে আসে যতক্ষণ না হয় i ) নীচের দেয়াল দ্বারা তারা অবরুদ্ধ থাকে, ii ) এগুলি কোনও শাবল, স্মুথ বা নীচে স্টট দ্বারা ব্লক করা হয় বা iii ) তারা 28 কোষের গর্তের মধ্য দিয়ে পড়ে এবং বাক্স থেকে প্রস্থান করুন। স্টট পড়ে না; এটি তার বর্তমান কক্ষে স্থির থাকে, এমনকি প্রাণীরা যদি তার উপরে থাকে তবে।

বাক্সগুলি আবার ঘোরানো যাবে না যতক্ষণ না প্রাণীরা পড়ে যাওয়া শেষ করে এবং একটি নতুন স্থিতিশীল কনফিগারেশন না পৌঁছে।

পাঠ্যক্রমে, বাক্সের আবর্তনগুলি +90 ° ঘড়ির কাঁটার ঘোরার জন্য, |180 ° ঘূর্ণনের -জন্য এবং 90 ° বিপরীত দিকে ঘোরার জন্য চিহ্নিত করা হয় ।

অতিরিক্তভাবে, স্টটটি একটি গ্রিড কক্ষের ইনক্রিমেন্টে চারটি কম্পাসের দিকনির্দেশে সরানো যায়। একটি পদক্ষেপ নাও হতে পারে: i ) স্টট এবং কোনও প্রাণীর মধ্যে সংঘর্ষের কারণ ঘটায় (যেমন গন্তব্য গ্রিড সেলটি খালি থাকতে হবে), ii ) স্টট এবং প্রাচীরের মধ্যে সংঘর্ষের কারণ হতে পারে না iii ) স্টটটি বাক্সের মধ্য দিয়ে প্রস্থান করতে পারে 28 কোষে গর্ত।

এছাড়াও, এটির উপরে কোনও প্রাণীর বিশ্রাম থাকলে (বর্তমান মহাকর্ষের সম্মানের সাথে) স্টটটি স্থানান্তর করতে পারে না

পাঠ্যক্রমে, স্টট মুভগুলি <বাম >জন্য, ডানদিকে, ^উপরে এবং vনীচে দ্বারা চিহ্নিত করা হয়। স্টট মুভগুলি সর্বদা পরিসংখ্যানগুলিতে চিত্রিত "স্ট্যান্ডার্ড" (আবর্তিত নয়) ফ্রেমের প্রতি শ্রদ্ধার সাথে নির্দিষ্ট করা হয় । এটি হ'ল, যদি স্টট 10 সেলে থাকে তবে নড়াচড়াটি ^সর্বদা এটি সেল 5 এ চলে >যাবে এবং নড়াচড়াটি সর্বদা এটি সেল ১১-এ স্থানান্তরিত হবে the বাক্সের ওরিয়েন্টেশনটি মুভের দিককে প্রভাবিত করে না।

বাম থেকে ডান বর্ণের অক্ষরের স্ট্রিংগুলি ব্যবহার করে ম্যানিপুলেশনগুলির সিকোয়েন্সগুলি এনকোড করা হয়। উদাহরণস্বরূপ, স্ট্রিংটি +<<^-নির্দেশ করে যে বাক্সটি ঘড়ির কাঁটার দিকে 90 ° ঘোরানো হয়েছে, তারপরে স্টটটি দু'বার বাম দিকে এবং একবার (স্ট্যান্ডার্ড ফ্রেমের প্রতি সম্মানের সাথে) সরানো হয়, তারপরে বাক্সটি 90 ° ঘড়ির কাঁটার বিপরীতে ফিরে তার মূল অরিয়েন্টেশনে পরিণত হয়।

চ্যালেঞ্জ

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

এই সমস্যাটি সমাধানের আগে, আমাদের বিভিন্ন হেরফেরগুলি কীভাবে বাক্সের বিষয়বস্তুগুলিকে প্রভাবিত করবে তা অনুকরণ করা আমাদের মজাদার করে, যা এই চ্যালেঞ্জের কেন্দ্রবিন্দু।

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম লিখতে হবে যা stdin(বা সমমানের) থেকে দুটি যুক্তি গ্রহণ করবে :

  • বাক্সের প্রাথমিক অবস্থা বর্ণনা করে এমন একটি স্ট্রিং
  • কারসাজির ক্রম

আপনি ধরে নিতে পারেন যে উভয় যুক্তি সিনথেটিকভাবে বৈধ, যে বাক্সটি স্ট্যান্ডার্ড ওরিয়েন্টেশনে শুরু হয় এবং বাক্সের প্রাথমিক অবস্থা স্থিতিশীল এবং আইনী।

প্রোগ্রামটি অবশ্যই stdout(বা সমমানের) এ আউটপুট দিতে হবে :

  • ( কেস 1 ) বাক্সের চূড়ান্ত অবস্থা, স্ট্রিং হিসাবে প্রকাশ করা হয়েছে, যদি চলার ক্রমটি আইনী হয় (এটি স্টট সরানোর নিয়ম লঙ্ঘন করে না) এবং বাক্স থেকে বেরিয়ে আসার কোনও ধোঁয়াশার কারণ না করে। বাক্সের চূড়ান্ত ওরিয়েন্টেশন গুরুত্বহীন।

  • ( কেস 2 ) একটি একক বিস্ময়কর চিহ্ন, !যদি চলার ক্রমটি অবৈধ হয় বা কোনও স্মোককে বাক্স থেকে বেরিয়ে আসে

স্কোরিং

বিজয়ী প্রোগ্রামটি হ'ল বাইট গণনা দ্বারা সংক্ষিপ্ততম প্রোগ্রাম , কিছু অতি লোভনীয় বোনাস গুণিতকগুলির বিষয়:

  • একটি দাবি 0.65 এর গুণক যদি পরিবর্তে ক্ষেত্রে 1 এনকোডেড আউটপুট মুদ্রণ, প্রোগ্রাম তার চুড়ান্ত রাষ্ট্র এবং সজ্জাতে বাক্সের একটি ASCII ছবি আউটপুট, shubbles, smoles, stots, এবং খালি কোষ জন্য বৈশিষ্ট অক্ষর ব্যবহার করে, এবং একটি স্থাপন *২৮ ঘরের গর্তের ঠিক বাইরে কোষে Lead

    উদাহরণস্বরূপ, যদি চিত্র 1 (ক) 90 rot আবর্তিত হয় তবে আউটপুট হবে

       .  .
      .....
      .o...
      xo.@.
     *ooo..
      x  .
    
  • যদি কেস 1 এর জন্য এনকোডড আউটপুট প্রিন্ট করার পরিবর্তে প্রোগ্রামটি 0.22 এর গুণক দাবি করে তবে প্রোগ্রামটি একটি চিত্র ফাইল আউটপুট দেয় বা তার চূড়ান্ত অবস্থা এবং অভিযোজনে বাক্সের ছবি সহ একটি জিইউআই উইন্ডো প্রদর্শন করে। ছবিটি চিত্র 1 (ক) এর শৈলীতে হওয়া উচিত, গ্রিড কোষ, দেয়াল এবং রঙিন বাক্স ব্যবহার করে জীব / স্টট দেখানো উচিত।

  • যদি কেস 1 এর জন্য এনকোডড আউটপুট প্রিন্ট করার পরিবর্তে প্রোগ্রামটি 0.15 এর গুণক দাবি করে তবে প্রোগ্রামটি 1 সেকেন্ডের ব্যবধানে সিমুলেশনে সমস্ত মধ্যবর্তী অবস্থা দেখায় একটি অ্যানিমেটেড .GIF বা অ্যানিমেটেড জিইউআই উইন্ডো আউটপুট দেয়। 0.22 গুণক প্রয়োগ হিসাবে একই চিত্র বিধি। অ্যানিমেশনের প্রথম ফ্রেমে সিমুলেশনের প্রাথমিক অবস্থা চিত্রিত করা উচিত। অতিরিক্তভাবে, অ্যানিমেশনটি "লুকানো" মধ্যবর্তী রাষ্ট্রগুলি প্রদর্শন করা উচিত, যা

    • ঘূর্ণনের পরে অ্যানিমেশন ফ্রেমে প্রতি একক সেল দ্বারা স্থিতিশীল কনফিগারেশনে পড়ে শাবলস / স্মুবলগুলি

    • একটি 180 ° ঘূর্ণনের মধ্যে বাক্সের মধ্যবর্তী 90 rot -পরিবর্তিত অবস্থা

  • যদি প্রোগ্রামটি উপরের স্টাইলের একটি অ্যানিমেটেড .gif বা অ্যানিমেটেড জিইউআই উইন্ডো উত্পাদন করে তবে 0.12 এর গুণক দাবি করুন , তবে 20 fps এবং শোতে চলে

    • ঘোরানো বক্সের মসৃণ, অবিচ্ছিন্ন অ্যানিমেশনগুলি

    • স্থির চলমান চলমান মসৃণ, অবিচ্ছিন্ন অ্যানিমেশনগুলি এবং স্থিতিশীল কনফিগারেশনের মধ্যে পড়ে শাবলস / স্মুয়লের

    28 সেলে থাকা গর্তের মধ্য দিয়ে পড়া শাবলগুলি বাক্সের বাইরে বের হওয়া দেখানো উচিত এবং একবার বাইরে সম্পূর্ণ অদৃশ্য হয়ে যেতে হবে। অ্যানিমেশনের জন্য আপনি নিজের সময় পছন্দ করতে পারেন যতক্ষণ না 1 এর বেশি ম্যানিপুলেশন / সেকেন্ড সঞ্চালিত হয়।

মোট স্কোর floor( base score * multiplier )শুধুমাত্র একটি গুণক দাবি করা যেতে পারে।

এটি সর্বোপরি একটি স্মাইল ওয়ার্ল্ড। ;)


2
অনুমানের জন্য +1, তবে আমি সম্ভবত অংশ নেব না।
জন ডিভোরাক

এই মজা মত শোনাচ্ছে। কেবল তা নিশ্চিত করার জন্য: বাক্সটির আকৃতি পুরোপুরি ঠিক করা হয়েছে, হ্যাঁ? সুতরাং আমাদের অন্য কোনও আকারের জন্য অ্যাকাউন্ট করতে হবে না?
ইনগো বার্ক

@ ইনগোবার্ক: সঠিক। বক্স আকৃতি স্থির করা হয়েছে।
সিটিও

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

1
আপনি যতক্ষণ না প্রোগ্রামের মোট বাইট গণনা অন্তর্ভুক্ত করেন আপনি বহিরাগত গ্রাফিক সংস্থানগুলি (যেমন চিত্রগুলি, এসভিজি মার্কআপ) ব্যবহার করতে পারেন। মূল চিত্রটি মারাত্মক জটিল হতে হবে না। গ্রিড আপ 12 লাইন; প্রাচীর; এবং বাক্সের ভিতরে রঙিন বাক্সগুলি। আপনি যদি পছন্দ করেন তবে একটি রঙিন বাক্স পুরো গ্রিড ঘরটি পূরণ করতে পারে এবং প্রাচীরটি বাইরেরতম কক্ষগুলির সীমানা বরাবর ট্রেস করতে পারে। সুতরাং পুরো ছবিটি 6x6 বর্গাকার স্থানাঙ্ক গ্রিডে আয়তক্ষেত্র, লাইন এবং একটি পললাইন অঙ্কন করে সংজ্ঞায়িত করা যায়।
COTO

উত্তর:


2

ম্যাটল্যাব, এখনও নিখরচায় * 0.15

এটি সঠিকভাবে কাজ করে কিনা সে সম্পর্কে কেউ যদি অনুমান করতে পারে তবে দুর্দান্ত হবে।

n = @()input('', 's');
E = @()fprintf('!');
M = zeros(7,9);
G = M;
I = [9:7:44 17:7:52 18:7:46 12:7:47 20:7:55];
M0 = M;
M0(I) = 1;
M([I 49]) = 1;
G(I) = n()-46;
trot = 0;
Xtr = [0 1-10i 11-7i 8+i];
X0 ='c66++66++oozzoozzn'-i*'YYNNAA--  ++88LLYY'-22+22i;
for a = [97 n()]
    a = find('-|+a^<v>'==a);
    if a<5
        R = @(m) rot90(m, a);
        G = R(G);
        [nr,nc] = size(G);
        M = R(M);
        M0 = R(M0);
        trot = mod(trot+a,4);
        X = exp(i*pi*trot/2)*X0 + 11*Xtr(trot+1);
    else
        z = find(G==18);
        J = z + [-nr,1]*[0,-1;1,0]^(trot+a)*[1;0];
        if ~M0(J) | G(J) | G(z+1)
            E();return
        end
        G(z) = 0;
        G(J) = 18;
    end
    fall = 1; 
    while fall
        clf
        plot(X/11,'k','LineW',3);
        for x = 2:nc; for y = 2:nr
             ch = G(y,x);
             if M0(y,x) 
                 rectangle('Po',[x,-y,1,1],'F',~ch|ch==[74 1 65]);
             end
        end;end
        pause(1);
        G2 = G;
        for r = nr-1:-1:2
            s = G2 > 30;
            f = G2(r,:) .* (s(r,:) & ~s(r+1,:) & M(r+1,:) & G(r+1,:)~=18);
            if r==size(G,1)-1 & any(f==74)
                E();return
            end
            G2(r:r+1,:) = G2(r:r+1,:) + [-f;f];
        end
        G2 = G2 .* M0;
        fall = any(any(G2 ~= G));
        G = G2;
    end 
end

কিছু এলোমেলো পদক্ষেপের জন্য নমুনা শেষের ফলাফল:

.........@...o....ooo..xox...
+>|<-v+^+

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


1
আপনি আসলে অ্যানিমেশনটির একটি জিআইএফ প্রদর্শন করতে পারেন?
মার্টিন এন্ডার

শান্ত! আমি আজ সন্ধ্যায় এটি পরীক্ষা করব (এবং কয়েকটি পরীক্ষার কেস পোস্ট করব)।
COTO

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