बुलबुले और स्मोल - भाग I


10

स्थापित करना

एक विषम आकार के बॉक्स पर विचार करें जिसमें 29 नंबर कोशिकाएं हों जैसा कि चित्र 1 में दिखाया गया है।

बुदबुदाहट और धुँआ

इस 2 डी बॉक्स के अंदर चौकोर आकार के जानवरों की दो प्रजातियां हैं: बुलबुले और स्मोल। अंजीर। 1 (ए) कुछ बुलबुले नीले रंग में दिखाता है, और कुछ लाल रंग में। प्रत्येक प्राणी ठीक एक ग्रिड सेल में रहता है। बॉक्स में 0 और 26 बुलबुले के बीच कहीं भी हो सकता है, लेकिन हमेशा दो स्मोल्स होंगे।

गुरुत्वाकर्षण के अधीन होने के कारण, शबल्स और स्मॉल्स बॉक्स के निचले हिस्से पर बैठते हैं, उनके नीचे किसी भी चीज के शीर्ष पर स्टैकिंग। दोनों प्रजातियाँ असाधारण रूप से आलसी हैं और सदा गतिहीन रहती हैं।

बॉक्स में एक स्टॉट भी होता है, जिसे काले वर्ग के रूप में दर्शाया गया है, जो बिल्कुल एक ग्रिड सेल पर कब्जा कर लेता है। स्टॉट है गुरुत्वाकर्षण के अधीन नहीं है

बॉक्स में सेल 28 के नीचे स्थित एक उद्घाटन है, जैसा कि चित्र में दिखाया गया है।

शाब्दिक रूप से बबल्स, स्मोल्स, और डंडे के विन्यास का प्रतिनिधित्व करने के लिए, हम एक 29-कैरेक्टर स्ट्रिंग, ग्रिड सेल प्रति एक कैरेक्टर, प्रगणित क्रम में, .एक खाली सेल का प्रतिनिधित्व करने के साथ , oएक शंट का xप्रतिनिधित्व करते हुए, एक स्मॉल का प्रतिनिधित्व करते हैं। और @स्टॉट का प्रतिनिधित्व करते हैं। उदाहरण के लिए, अंजीर 1 (ए) का विन्यास स्ट्रिंग द्वारा दर्शाया गया है.........@...o....ooo..xox...

जोड़ - तोड़

बॉक्स को 90 ° के किसी भी गुणन द्वारा घुमाया जा सकता है । जबकि बॉक्स को घुमाया जा रहा है, उनके ग्रिड कोशिकाओं के भीतर बुलबुले और स्मॉल्स स्थिर रहते हैं। जैसे ही एक घुमाव पूरा होता है, वे सीधे नीचे की ओर तब तक गिरते रहते हैं जब तक कि i ) वे नीचे एक दीवार से अवरुद्ध नहीं हो जाते, ii ) वे एक मलबे, स्मोल, या नीचे स्टॉट, या iii द्वारा अवरुद्ध हो जाते हैं। ) वे सेल 28 में छेद से गिर जाते हैं और बॉक्स से बाहर निकलें। स्टॉट नहीं गिरता है; यह अपने वर्तमान सेल में स्थिर रहता है, भले ही जीव इसके ऊपर आराम करते हों।

बॉक्स को फिर से घुमाया नहीं जा सकता है जब तक कि जीव गिरते नहीं हैं और एक नए स्थिर कॉन्फ़िगरेशन तक पहुंच गए हैं।

शाब्दिक रूप से +, एक 90 ° दक्षिणावर्त रोटेशन के लिए, |180 ° रोटेशन और- 90 ° वामावर्त घुमाव के लिए ।

इसके अतिरिक्त, एक ग्रिड सेल की वृद्धि में चार कम्पास दिशाओं में स्टॉट को स्थानांतरित किया जा सकता है । एक चाल नहीं हो सकती: i ) स्टॉट और एक प्राणी के बीच टकराव का कारण बनता है (यानी गंतव्य ग्रिड सेल खाली होना चाहिए), ii ) स्टॉट और दीवार के बीच टकराव का कारण बनता है, और न ही iii ) स्टॉट बॉक्स से बाहर निकलने का कारण बनता है सेल 28 में छेद।

इसके अलावा, यदि कोई प्राणी इसके ऊपर (वर्तमान गुरुत्वाकर्षण के संबंध में) विश्राम कर रहा है , तो स्टॉट नहीं चल सकता है

मूल रूप से <, बाईं ओर, >दाईं ओर, ^ऊपर और vनीचे के लिए , स्टॉट चालें निरूपित की जाती हैं । आंकड़े में दर्शाए गए "मानक" (नॉन-रोटेटेड) फ्रेम के संबंध में स्टॉट चाल हमेशा निर्दिष्ट होती है । यही है, अगर स्टॉट सेल 10 में है, तो चाल ^हमेशा इसे सेल 5 में ले >जाएगी , और यह चाल हमेशा इसे सेल 11 तक ले जाएगी। बॉक्स का ओरिएंटेशन कदम की दिशा को प्रभावित नहीं करता है।

जोड़-तोड़ के अनुक्रम बाएं-से-दाएं वर्ण तार का उपयोग करके एन्कोड किए गए हैं। उदाहरण के लिए, स्ट्रिंग +<<^-इंगित करता है कि बॉक्स को दक्षिणावर्त 90 ° घुमाया जाता है, फिर स्टॉट को दो बार छोड़ दिया जाता है और एक बार (मानक फ्रेम के संबंध में), फिर बॉक्स को 90 ° वामावर्त में घुमाया जाता है।

चुनौती

पूरी तरह से अच्छे कारणों (है कि मैं खुलासा नहीं कर सकते), हम बॉक्स के सभी shubbles निकलने करना चाहते हैं के लिए बिना एक स्मोक को निकाले निकालना चाहते हैं। इसे पूरा करने के लिए, हम ऊपर वर्णित विशेष रूप से जोड़तोड़ का उपयोग कर सकते हैं।

इस समस्या को हल करने से पहले, हमें यह अनुकरण करना है कि हमारे विभिन्न जोड़तोड़ बॉक्स की सामग्री को कैसे प्रभावित करेंगे, जो इस चुनौती का फोकस है।

आपको एक प्रोग्राम लिखना होगा जो stdin(या समतुल्य) से दो तर्क स्वीकार करता है :

  • बॉक्स की प्रारंभिक स्थिति का वर्णन करने वाली एक स्ट्रिंग
  • जोड़तोड़ का एक क्रम

आप यह मान सकते हैं कि दोनों तर्क वाक्यगत रूप से मान्य हैं, कि बॉक्स मानक अभिविन्यास में शुरू होता है, और यह कि बॉक्स की प्रारंभिक स्थिति स्थिर और कानूनी है।

कार्यक्रम को stdoutया तो आउटपुट (या समतुल्य) होना चाहिए :

  • ( स्थिति 1 ) बॉक्स की अंतिम स्थिति, एक स्ट्रिंग के रूप में व्यक्त की जाती है, यदि चालों का क्रम कानूनी है (यह स्टॉट चाल नियमों का उल्लंघन नहीं करता है) और बॉक्स से बाहर निकलने के लिए किसी भी प्रकार का कारण नहीं बनता है। बॉक्स का अंतिम अभिविन्यास महत्वहीन है।

  • ( केस 2 ) एक एकल विस्मयादिबोधक चिह्न, !अगर चालों का क्रम अवैध है या बॉक्स से बाहर निकलने के लिए किसी भी स्मेल का कारण बनता है

स्कोरिंग

जीतने का कार्यक्रम बाइट काउंट का सबसे छोटा कार्यक्रम है , जो कुछ बेहद आकर्षक बोनस गुणकों के अधीन है:

  • 0.65 के गुणक का दावा करें यदि केस 1 के लिए एन्कोडेड आउटपुट को प्रिंट करने के बजाय, प्रोग्राम अपने अंतिम राज्य और अभिविन्यास में बॉक्स के एक ASCII चित्र को आउटपुट करता है, तो बुलबुले, स्मोल्स, स्टॉट और खाली कोशिकाओं के लिए विशेष वर्णों का उपयोग करके, और रखकर। *सेल 28 में छेद के ठीक बाहर सेल में। लीडिंग और ट्रेलिंग व्हाट्सएप को नजरअंदाज किया जाता है।

    उदाहरण के लिए, यदि चित्र 1 (ए) को 90 ° घुमाया जाता है, तो आउटपुट होगा

       .  .
      .....
      .o...
      xo.@.
     *ooo..
      x  .
    
  • 0.22 के गुणक का दावा करें अगर केस 1 के लिए एन्कोडेड आउटपुट को प्रिंट करने के बजाय, प्रोग्राम एक छवि फ़ाइल को आउटपुट करता है या अपने अंतिम राज्य और अभिविन्यास में बॉक्स की एक तस्वीर के साथ एक जीयूआई विंडो प्रदर्शित करता है। चित्र अंजीर 1 (ए) की शैली में होना चाहिए, जिसमें रंगीन बक्से का उपयोग करके ग्रिड कोशिकाओं, दीवारों और प्राणियों / स्टॉट को दिखाया गया है।

  • 0.15 के गुणक का दावा करें यदि केस 1 के लिए एन्कोडेड आउटपुट को प्रिंट करने के बजाय, प्रोग्राम 1 सेकंड के अंतराल पर सभी मध्यवर्ती राज्यों को दिखाते हुए एक एनिमेटेड .gif या एनिमेटेड GUI विंडो आउटपुट करता है। 0.22 गुणक के लिए एक ही चित्र नियम लागू होते हैं। एनीमेशन का पहला फ्रेम सिमुलेशन की प्रारंभिक स्थिति को चित्रित करना चाहिए। इसके अतिरिक्त, एनीमेशन को "छिपे हुए" मध्यवर्ती राज्यों को दिखाना चाहिए, जो कि हैं

    • रोटेशन के बाद एक सेल प्रति एनीमेशन फ्रेम द्वारा स्थिर कॉन्फ़िगरेशन में गिरने वाले बुलबुले / स्मोल्स

    • एक 180 ° रोटेशन में बॉक्स के मध्यवर्ती 90 °-उत्तेजित अवस्था

  • 0.12 के गुणक का दावा करें यदि प्रोग्राम उपरोक्त शैली का एक एनिमेटेड .gif या एनिमेटेड GUI विंडो बनाता है, लेकिन 20 एफपीएस पर चलता है और दिखाता है

    • बॉक्स को घुमाते हुए चिकनी, निरंतर एनिमेशन

    • एक स्थिर विन्यास में गिरने वाले धब्बों / धब्बों की चिकनी, निरंतर एनिमेशन और

    सेल 28 में छेद के माध्यम से गिरने वाले बुलबुले को बॉक्स से बाहर निकलते हुए दिखाया जाना चाहिए, और एक बार पूरी तरह से बाहर गायब हो जाना चाहिए। आप एनीमेशन के लिए अपना समय स्वयं चुन सकते हैं जब तक कि 1 से अधिक हेरफेर / सेकंड का प्रदर्शन न किया जाए।

कुल स्कोर है floor( base score * multiplier )केवल एक गुणक का दावा किया जा सकता है।

यह सब के बाद एक स्मोकी दुनिया है। ;)


2
कल्पना के लिए +1, लेकिन मैं भाग नहीं लूंगा, शायद।
जॉन ड्वोरक

यह मजेदार लगता है। बस यह सुनिश्चित करने के लिए: बॉक्स का आकार पूरी तरह से तय है, हाँ? तो हम किसी भी अन्य आकार के लिए खाता नहीं है?
इंगो बुर्क

@ IngoBürk: सही है। बॉक्स का आकार तय हो गया है।
सीओटीओ

छवि आउटपुट के लिए, क्या हम आपकी छवि को संसाधन (या किसी भी प्रकार के संसाधन) के रूप में उपयोग कर सकते हैं या क्या हमें इसे पूरी तरह से कोड में खींचना होगा? यदि हम इसका उपयोग कर सकते हैं, तो यह कैसे गिना जाता है? मैं इसे विदा देने की कोशिश करूंगा, लेकिन मैं अभी छुट्टी पर हूं।
इंगो बुर्क

1
जब तक आप कार्यक्रम के लिए कुल में अपनी बाइट काउंट को शामिल करते हैं, तब तक आप बाहरी ग्राफिक संसाधनों (जैसे चित्र, एसवीजी मार्कअप) का उपयोग कर सकते हैं। मूल छवि को बहुत जटिल नहीं होना चाहिए। ग्रिड बनाने वाली 12 लाइनें; दिवार; और बॉक्स के अंदर रंगीन बक्से। यदि आप पसंद करते हैं, तो एक रंगीन बॉक्स एक पूरे ग्रिड सेल को भर सकता है, और दीवार सबसे बाहरी कोशिकाओं की सीमा के साथ पता लगा सकती है। इस प्रकार पूरी तस्वीर को 6x6 वर्ग के समन्वय ग्रिड पर आयतों, रेखाओं और एक पॉलीलाइन को खींचकर परिभाषित किया जा सकता है।
COTO

जवाबों:


2

MATLAB, के रूप में अभी तक ungolfed * 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
क्या आप वास्तव में एनीमेशन का GIF दिखा सकते हैं?
मार्टिन एंडर

ठंडा! मैं इन शाम को इसकी जाँच करूँगा (और कुछ परीक्षण मामलों को पोस्ट करूँगा)।
सीओटीओ

प्रोग्राम को एक एनिमेटेड .gif आउटपुट करने की आवश्यकता नहीं है, लेकिन यदि आप एक, फ़ेरसुम उत्पन्न करना चाहते हैं, तो यह लेख बताता है कि कैसे आसानी से ऐसा किया जा सकता है।
COTO
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.