Brainfuck में एक URL एनकोडिंग


11

इस सवाल से प्रेरित होकर , आज आपका लक्ष्य एक ब्रेनफॉक्स में एक यूआरएल को एनकोड करना है।

मेरा ब्राउज़र हैक कर लिया गया है! लोकेशन बार को ब्रेनफैक दुभाषिया में बदल दिया गया है। मुझे एक प्रोग्राम की आवश्यकता है जो एक URL को एक ब्रेनफक प्रोग्राम में बदल दे। मेरा कंप्यूटर भी बहुत धीमा है, इसलिए यदि ब्रेनफक प्रोग्राम छोटा है तो बेहतर है।

ओह और मेरे पास केवल एक काम करने वाला टैब खुला है, मेरा ट्विटर। तो आप केवल मुझे एक ट्वीट में कार्यक्रम भेज सकते हैं।


  1. एक प्रोग्राम लिखें जो किसी भी भाषा में एक ट्वीट (140 वर्णों) में फिट बैठता है जो एक स्ट्रिंग को इनपुट के रूप में लेता है और एक ब्रेनफैक प्रोग्राम को आउटपुट करता है।

  2. यह ब्रेनफैक प्रोग्राम बिना इनपुट के चलाया जाएगा और एक आउटपुट उत्पन्न करेगा।

  3. यह आउटपुट Google Chrome के स्थान बार में डाला जाएगा, और निष्पादित किया जाएगा।

  4. यदि Google Chrome का व्यवहार # 1 से इनपुट स्ट्रिंग दर्ज करके आपको प्राप्त होने वाले व्यवहार के समान है, तो समाधान मान्य है। URL शॉर्टर्स द्वारा पुनर्निर्देशन को अलग व्यवहार माना जाता है - कम से कम एक ही डोमेन पर रहें।

आप मान सकते हैं कि ब्रेनफॉक दुभाषिया में प्रत्येक सेल में अनंत सटीक हस्ताक्षरित पूर्णांक और कोशिकाओं की असीमित मात्रा है।

आपका स्कोर URL के निम्नलिखित सेट को एन्कोड करने के लिए उत्पन्न ब्रेनफक कार्यक्रमों की लंबाई के योग से निर्धारित होता है:

https://www.google.com/
/codegolf/47895/
http://www.golfscript.com/golfscript/examples.html
http://en.wikipedia.org/wiki/Percent-encoding
ftp://ftp.freebsd.org/pub/FreeBSD/
https://github.com/isaacg1/pyth/blob/master/doc.txt#L92
http://ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README

सबसे छोटा स्कोर जीतता है।


क्या हम यह मान सकते हैं कि इनपुट को इस तरह स्वरूपित किया http://www.google.com/जाएगा : या क्या यह कभी बस होगा google.com? (जहां तक ​​Google Chrome का संबंध है, दोनों वैध हैं, लेकिन आपकी सूची में केवल पूर्ण रूप हैं) PS I लगभग क्रोम के लिए एक एक्सटेंशन लिखने की इच्छा रखता है जो ऐसा करता है ...
BrainSteel

2
@BrainSteel आपके एनकोडर के लिए इनपुट बिल्कुल वैसा ही होगा जैसा प्रश्न में है (प्रत्येक पंक्ति एक इनपुट है)। ब्रेनफक का आउटपुट Google क्रोम द्वारा स्वीकार किया गया कोई भी प्रारूप हो सकता है, जब तक कि उसका मूल इनपुट स्ट्रिंग के समान व्यवहार न हो। तो अपने कार्यक्रम इनपुट लेता है, तो http://www.google.com/brainfuck कार्यक्रम यह मई उत्पादन का उत्पादन google.com, www.google.com, आदि, क्योंकि वे एक ही पेज में सभी परिणाम। लेकिन उदाहरण के लिए के ftp://ftp.freebsd.org/pub/FreeBSD/रूप में ही नहीं है ftp.freebsd.org/pub/FreeBSD/
orlp

आह, स्पष्ट करने के लिए धन्यवाद! क्षमा करें, मैं आज सुबह थोड़ा धीमा हूं।
ब्रेनसैट

मैं स्पष्ट करना चाहूंगा कि मैं विफल रहा, और ftp://ftp.freebsd.org/pub/FreeBSD/यह वास्तव ftp.freebsd.org/pub/FreeBSD/में Google Chrome की तरह ही है । यह मेरे इरादे से चुनौती को थोड़ा आसान बनाता है, लेकिन यह जीवन है। मैं आवश्यकताओं को नहीं बदलूंगा, इसलिए पहले से कुछ भी छीन लेना सुरक्षित है ://
orlp

जवाबों:


7

पायथ - 118 बाइट्स, स्कोर: 154 + 567 + 597 + 620 + 530 + 875 + 1092 = 6630 6623 4653 4435

अब कारक गुणन अहंकार का उपयोग कर!

यह एक बहुत ही सरल एल्गोरिथ्म है, हालांकि उपरोक्त लोगों की तुलना में थोड़ा बेहतर है। मैं पायथ का उपयोग करने की योजना बना रहा था, लेकिन वर्तमान एल्गोरिथ्म के साथ पायथन फिट बैठता है <140 बाइट्स

=zecz"//"=z?>z4}"www."zz=z?Pzqez\/zFNzKCNJ/^K.5 1=d\+pk+holN[?*-KZd>KZ*-ZK\-+\>*dK+++++\>*Jd"[>"*Jd"<-]>"*-K*JJd)\.=ZK

बाहर यह पहली स्ट्रिप्स http://का उपयोग करके split("//")और www.और /अंत में। तब यह जाँच करने के लिए न्यूनतम फ़ंक्शन का उपयोग करता है जो कि तीन विकल्पों में से सबसे अच्छा माना जाता है:

  1. का प्रयोग करें +या -इच्छित सेल मूल्य के लिए वर्तमान सेल मान अपडेट
  2. नए सेल में जाओ और बस के साथ भरने +के
  3. नए सेल पर जाएं और sqrt (n) * sqrt (n) + शेष करके अपडेट करने के लिए गुणा का उपयोग करें क्योंकि वर्ग में स्थिर क्षेत्र की न्यूनतम परिधि है। http://cydathria.com/bf/bf_ex3.html

मैं तो हमेशा एक .चार उत्पादन करने के लिए डाल दिया ।

नए कोड का एक विस्तृत विवरण जल्द ही आ रहा है। मैं एक तरह से गॉल्फिंग का आश्वासन देता हूं, विशेष रूप से स्ट्रिपिंग का www.और /अंत में, लेकिन मैं परेशान नहीं हो सकता क्योंकि मैं 20 बाइट्स सीमा के तहत हूं।

यह आश्चर्यजनक रूप से ftp://यूआरएल पर काम करता है क्योंकि यह क्रोम है और क्रोम स्वचालित रूप से बनाता ftp.freebsd.org/pub/FreeBSD/हैftp://ftp.freebsd.org/pub/FreeBSD/

मैं अगले सेल मूल्यों को संग्रहीत करने के लिए एक शब्दकोश का उपयोग करने की योजना बनाता हूं और देखता हूं कि क्या चरित्र पहले से ही एक सेल में बनाया गया था।


ब्रेनफैक ऑम्निबॉक्स एक्सटेंशन

ये सही है! जब मैंने @ BrainSteel की टिप्पणी देखी, मुझे पता था कि मुझे इसे बनाना होगा। यह न केवल जब आप ऐसा करेंगे पूरे ऑम्निबॉक्स से अधिक ले करता है, , ।bf tabइसके अलावा, क्योंकि omnibox एपीआई अजीब है, यह मुझे omnibox के लिए कोड को आगे नहीं करने देता है, मुझे इसे स्वयं संभालना होगा। इसलिए मैं अपनी http://जाँच स्वयं करता हूँ और फिर टैब का यूआरएल सेट करता हूँ।

चूँकि मुझे ऐसा महसूस नहीं हुआ कि $ 5 का भुगतान करने के लिए आपका विस्तार वेबस्टोर पर करना आवश्यक है, इसलिए आप लोगों को इसे मैन्युअल रूप से स्थापित करना होगा। बस यहाँ से जिप डाउनलोड करें: https://drive.google.com/file/d/0B0qkKIzGc0QiNzBzVUJjZkRIZ0k/view?usp=sharing , unzip, क्रोम में एक्सटेंशन पेज पर जाएं, टॉप-राइट पर देव मोड विकल्प बॉक्स पर क्लिक करें, और अनपैक किए गए एक्सटेंशन को लोड करें।

आशा है कि आप लोग आनंद लेंगे! :)


यह ftp://URL पर काम नहीं करेगा ।
पुरकाकूदरी

1
@ Pietu1998 जो मैंने पहले सोचा था, लेकिन क्रोम ने मुझे चौंका दिया। अपने एड्रेस बार में ftp.freebsd.org/pub/FreeBSD/ में डालने का प्रयास करें और Chrome इसे ftp बनाएगा: // ftp.freebsd.org/pub/FreeBSD/
Maltysen

@ माल्टीसेन उफ़। मैंने इस अनुकूलन को रोकने के लिए जानबूझकर उस URL को शामिल किया था, लेकिन ऐसा लगता है कि मैं विफल रहा। यह URL वास्तव में अलग है, लेकिन ऐसा लगता है कि Chrome वास्तव में पहचानने और जोड़ने के लिए पर्याप्त स्मार्ट है ftp://। ओह अच्छा।
orlp

4

सी, 140 134 132 138 138 128 139 बाइट्स

263 + 816 + 911 + 955 + 827 + 1355 + 1779 = 7269 6906 बाइट्स

अद्यतन: 6 बाइट्स कम, नटकी के लिए धन्यवाद!

फिर से अपडेट करें, 128 बाइट्स। कोड काफी कम पठनीय है। अब यह URL को ftp://भी छीनने का प्रयास करता है।

139 बाइट पर तीसरा अपडेट करें। कोड थोड़ा अधिक पठनीय है, और कुछ अनिर्दिष्ट व्यवहार से छुटकारा मिला है। अब, यदि साइट का नाम पहले से है www., तो यह छीन लिया गया है। मैं 7k से कम था, लेकिन मुझे लगता है कि मुझे माल्टीसेन को पाइथ के साथ जीतना चाहिए। बहुत बढ़िया।

#define p putchar
a;main(int c,char**V){while(*V[1]++-47);*++V+=1;for(*V+=**V-'w'?0:4;c=**V;*V+=1,p(46))for(;c-a;a+=c>a?1:-1)p(c>a?43:45);}

थोड़ा उघाड़ा:

#define p putchar
a;
main(int c,char**V){
    while(*V[1]++-47);
    *++V+=1;
    for(*V+=**V-'w'?0:4;c=**V;*V+=1,p(46))
        for(;c-a;a+=c>a?1:-1)
            p(c>a?43:45);
}

यह कोड कमांड लाइन पर एक URL लेता है, और इसे केवल और ., का उपयोग करके BF में परिवर्तित करता है । कोड की स्ट्रिंग पट्टी का प्रयास करता , , , और बीएफ को परिवर्तित करने से पहले। यहाँ आउटपुट के आउटपुट की एक सूची है:-+ftp://http://https://www.

google.com/
codegolf.stackexchange.com/questions/47895/
golfscript.com/golfscript/examples.html
en.wikipedia.org/wiki/Percent-encoding
ftp.freebsd.org/pub/FreeBSD/
github.com/isaacg1/pyth/blob/master/doc.txt#L92
ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README

एक आंतरिक लूप का उपयोग करने के बारे में कैसे: for(;c-a;a+=c>a,a-=c<a)p(c>a?43:45)काम करना चाहिए।
नटकी

@ कुटकी प्रभावशाली! धन्यवाद!
ब्रेनसैटल

"ध्यान दें कि यदि हम मान सकते हैं कि कोई भी URL http: //, https: //, या ftp: // के अलावा किसी भी चीज़ से शुरू नहीं होता है, तो हम इस समाधान से 10 बाइट छोड़ सकते हैं।" आपके समाधान के लिए केवल ऊपर के डाटासेट के लिए काम करना है, इसलिए आप मान सकते हैं कि आप जो भी चाहते हैं, जब तक कि डाटासेट अभी भी सही ढंग से संभाला जाएगा /
orlp

@orlp हुर्रे! लगता है कि 12 बाइट्स के साथ खेलने के लिए! इस चुनौती के लिए धन्यवाद, यह बहुत मजेदार रहा!
ब्रेनसैट

4

ब्रेनफक, 77 बाइट्स, स्कोर = 31647

स्कोर codepoint+4हर चरित्र के लिए योग है ।

+++++[>+++++++++<-]>+[>++>+>++>+>+<<<<<-]>+>->->>--->,[[<.>-]<<.<.<.<.>>>>>,]

(EOF = 0. के साथ बीएफ कार्यान्वयन का उपयोग करता है)

उदाहरण:

input:
!bar

output:
+++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]

0

जावास्क्रिप्ट (ईएस 6) - 137 बाइट्स, स्कोर - 7413

यह केवल का उपयोग करता है ., +और -। आप इसे फ़ायरफ़ॉक्स कंसोल में टेस्ट कर सकते हैं।

B=s=>[...s.replace(/^h.+\/\//,'')].map((c,i,a)=>(v=i?c[C]()-a[i-1][C]():c[C='charCodeAt']())?'-+'[v>0|0].repeat(v>0?v:-v):'').join('.')+'.'

यह मेरा स्कोर काउंटर है:

[
    'https://www.google.com/',
    'http://codegolf.stackexchange.com/questions/47895/',
    'http://www.golfscript.com/golfscript/examples.html',
    'http://en.wikipedia.org/wiki/Percent-encoding',
    'ftp://ftp.freebsd.org/pub/FreeBSD/',
    'https://github.com/isaacg1/pyth/blob/master/doc.txt#L92',
    'http://ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README'
].map(B).join('').length
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.