रैंडमाइज्ड ब्रेनफैक कंपाइलर


10

जो आपका औसत BF डेवलपर है। जब वह अपने बॉस से कॉल लेता है तो वह अपने रिपॉजिटरी के कोड परिवर्तन में जाँच करने वाला होता है। "जो! नए ग्राहक की मशीन टूट गई है! ब्रेनफॉक दुभाषिया प्रोग्राम निष्पादन से पहले सभी कोशिकाओं को यादृच्छिक मूल्यों पर सेट करता है। इसे ठीक करने का कोई समय नहीं है, आपके कोड को इससे निपटना होगा।" जो इसके बारे में ज्यादा नहीं सोचते हैं, और पहली मिलियन कोशिकाओं को शून्य पर सेट करने के लिए एक कार्यक्रम लिखने वाले हैं, जब उनका बॉस उन्हें फिर से बाधित करता है - "... और जानवर बल का उपयोग करने के बारे में मत सोचो, कोड के लिए है जितना संभव हो उतना छोटा हो। ” अब आपको गरीब जो की मदद करनी है!

विशेष विवरण

  • आपको इनपुट के रूप में कुछ मान्य ब्रेनफक कोड मिलेगा
  • आपका प्रोग्राम फिर कोड को संशोधित करेगा ताकि यह एक यादृच्छिक ब्रेनफैक दुभाषिया पर काम करे
  • इसका मतलब यह है कि कार्यक्रम के निष्पादन से पहले, कोशिकाओं को किसी भी मूल्य पर सेट किया जा सकता है।
  • नए कार्यक्रम में ठीक वैसा ही व्यवहार होना चाहिए, चाहे प्रारंभिक परिस्थितियां ही क्यों न हों।
  • दुभाषिया में रैपिंग के साथ अधिकतम सेल मूल्य 255 होगा, और एक अनंत लंबाई टेप।

स्कोरिंग

आपका स्कोर बाइट्स में संकलक आकार से 10 गुना अधिक है और परीक्षण मामले के आकार का योग है । न्यूनतम स्कोर स्पष्ट रूप से जीतता है। टेस्ट-केस ऑप्टिमाइज़ेशन के खिलाफ कम करने के लिए, मैं टेस्ट-केस बदलने का अधिकार सुरक्षित रखता हूं अगर मुझे कुछ भी संदेह है, और शायद एक विजेता चुनने से पहले ऐसा करेगा।

परीक्षण के मामलों

(मैं इनको esolangs पेज और इस वेबपेज से प्राप्त किया है: http://www.hevanet.com/cristofd/brainfuck/ )। आखिरी टेस्ट केस के लिए @Sparr को भी धन्यवाद।

  • नमस्ते दुनिया: ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
  • रिवर्स इनपुट: >,[>,]<[.<]
  • दो की शक्तियां (अनंत धारा): >++++++++++>>+<+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<]>.>[->[ <++>-[<++>-[<++>-[<++>-[<-------->>[-]++<-[<++>-]]]]]]<[>+<-]+>>]<<]
  • 10000 के तहत वर्ग: ++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
  • फिबोनाची स्ट्रीम: >++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]
  • ASCII अनुक्रम इनपुट तक: ,[.[>+<-]>-](इसमें इनपुट के आधार पर अलग-अलग सेल नंबर की आवश्यकता होती है)

टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
मार्टिन एंडर

जवाबों:


8

sed, 46 बाइट संकलक

s/</<</g
s/>/>[->[-]>[-]+<<]>/g
s/^/[-]>[-]+</

मैंने ध्यान नहीं दिया कि प्रोग्राम लिखने के बाद तक आउटपुट को गोल्फ माना जाता था, इसलिए मैं शॉर्ट कंपाइलर के लिए जाऊंगा। इसके अलावा यह परीक्षण करने के लिए बहुत अधिक काम था, इसलिए कृपया सूचित करें कि क्या यह सही ढंग से काम नहीं करता है :)


1
मैं उलझन में हूं। आपकी तीसरी पंक्ति खाली स्ट्रिंग को बदल देती है? खाली स्ट्रिंग सेड में क्या मेल खाता है? "sed: फर्स्ट
आरईई

@ सब ठीक है, इसके बजाय देखभाल के साथ प्रयास करें।
feersum

3
ठीक है, चलो देखते हैं कि क्या मैं अनुसरण करता हूं ... सेल 0 को शून्य करें, सेल को 1 पर सेट करें। सभी <के साथ << और> को> X> से बदलें। अब किसी भी समय मूल प्रोग्राम एक्सेस सेल n नया प्रोग्राम सेल 2 एन एक्सेस करता है, यहां तक ​​कि गिने हुए सेल भी। एक्स शून्य सेल पर पारित किया जा रहा है, और अगर यह शून्य नहीं है, तो यह अगले सेल (यहां तक ​​कि सेल) को शून्य करता है और अगले विषम सेल को 1 पर सेट करता है। क्या मेरे पास यह अधिकार है?
स्पियर

2
तुम्हें पता है, यदि आप एक संक्षिप्त संकलक के लिए जा रहे हैं, तो यह रेटिना में केवल 35 बाइट्स होगा । ;)
मार्टिन एंडर

1
@ मार्टिनबटनर बेशर्म प्लग! : P
ऑप्टिमाइज़र

2

सी ++

संकलक का आकार: 630 बाइट्स (-10 बाइट्स Zacharý के लिए धन्यवाद)
नमस्ते विश्व संकलन परिणाम का आकार: 139
वर्ग अंडर : 2019

संकलक:

#include<string>
#include<map>
#include<stack>
#define B break
#define C case
#define S 30000
#define R m[(p<0)?(p%S)+S:p]
using s=std::string;using P=std::pair<int,int>;s a(s c){char m[S];memset(m,0,S);int p=0,i=0;P r{0,0};std::map<int,int>j;std::stack<int>t;for(int d=0;d<c.size();++d){if(c[d]==91)t.push(d);if(c[d]==93){j[d]=t.top();j[t.top()]=d;t.pop();}}while(i<c.size()){switch(c[i]){C'>':++p;B;C'<':--p;B;C'+':++R;B;C'-':--R;B;C'[':if(!R)i=j[i];B;C']':i=j[i]-1;B;default:B;}++i;r.first=p<r.first?p:r.first;r.second=p>r.second?p:r.second;}s n;for(int i=r.first;i<r.second;++i){n+="[-]>";}n+="[-]"+s(r.second,60)+c;return n;}

यादृच्छिक दिमाग़ी दुभाषिया:

void interpret(const std::string& code) {
    char memory[30000];
    for (int i = 0; i < 30000; ++i)
        memory[i] = std::rand()%256;
    int memPtr = 0, insPtr = 0;
    std::map<int, int> jump_map;

    {
        std::stack<int> jstack;
        for (int i = 0; i < code.size(); ++i) {
            if (code[i] == '[')
                jstack.push(i);
            if (code[i] == ']') {
                jump_map[i] = jstack.top();
                jump_map[jstack.top()] = i;
                jstack.pop();
            }
        }
    }
    while (insPtr < code.size()) {
        switch (code[insPtr]) {
        case '>': ++memPtr; break;
        case '<': --memPtr; break;
        case '+': ++memory[memPtr]; break;
        case '-': --memory[memPtr]; break;
        case '.': std::cout << memory[memPtr]; break;
        case ',': std::cin >> memory[memPtr]; break;
        case ']': if (memory[memPtr] != 0) insPtr = jump_map[insPtr]; break;
        case '[': if (memory[memPtr] == 0) insPtr = jump_map[insPtr]; break;
        default:break;
        }
        ++insPtr;
    }
}

कुछ नोट:

  • कंपाइलर उपयोग किए जाने वाले मेमोरी सेल्स को निर्धारित करने के लिए प्रोग्राम को निष्पादित करेगा। यदि आपका प्रोग्राम अनंत लूप है, तो कंपाइलर अनंत रूप से लूप करेगा।

आप का नाम बदलकर अपने स्कोर को कम कर सकते हैं piiकरने के लिए P, और की परिभाषा को बदलने Rके लिए m[p<0?p%30000+30000:p], और उसके अनुसार उन्हें सभी कॉल / संदर्भ को संशोधित। इसके अलावा, उन्होंने परीक्षण मामलों को संशोधित किया। मैंने इसे चेक नहीं किया है, लेकिन यह कुछ बाइट्स को कुछ परिभाषित करने के लिए बचा सकता है 30000, क्योंकि आप इसे अक्सर उपयोग करते हैं।
Zacharý

1
काम Rकरने के लिए बदल जाएगा m[p<0?p%S+S:p]?
Zacharý

कोष्ठक को हटाने की परिभाषा में Rकुछ बाइट्स को सहेजना चाहिए।
ज़ाचारि

1

rs , 33 बाइट्स, स्कोर: 2659

ज्यादातर sedजवाब का सिर्फ एक सरल बंदरगाह ।

</<<
>/>[->[-]>[-]+<<]>
[-]>[-]+<

1
क्या आपने कल से पहले इस भाषा को प्रकाशित किया था? एक सवाल के निर्माण को स्थगित करने वाली भाषाएं जवाब प्रस्तुत करने के लिए मान्य नहीं हैं।
स्पियर

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