ROT-47… ROT-47 में लागू करें


23

चुनौती: ROT-47 को उस कोड में लागू करें जो स्वयं और ROT-47 संस्करण दोनों के रूप में काम करता है।

स्कोरिंग:

आपके स्कोर की गणना प्रतिशत के रूप में की जाती है, दोनों संस्करणों के कुल बाइट्स (सभी वर्ण) द्वारा विभाजित कार्यक्रम के दोनों संस्करणों में कुल ROT-47 पात्र बाइट्स

एक प्रयुक्त, ROT-47 पात्र बाइट कोई भी वर्ण है जिसे ROT-47 सिफर द्वारा परिवर्तित किया जाएगा जो कि एक टिप्पणी का हिस्सा नहीं है या संकलक / दुभाषिया द्वारा अनदेखा नहीं किया गया है। उदाहरण के लिए, एक ब्रेनफक प्रोग्राम में कोई भी चरित्र जिसे +-<>[],.उपयोग की गई बाइट नहीं माना जाता है, और सी प्रोग्राम में किसी भी चरित्र को शामिल किया गया है और उसके बाद //या उसके अंदर /* */का उपयोग नहीं किया जाता है। APL में सभी विशेष प्रतीकों का उपयोग नहीं किया जाता है, जैसा कि एक व्हाट्सएप प्रोग्राम (क्षमा करें) में सभी वर्ण हैं।

सबसे अपवित्र के साथ कार्यक्रम से संबंधों को तोड़ दिया जाएगा। यदि अभी भी एक टाई है, तो सबसे छोटा कार्यक्रम जीत जाता है।

उदाहरण स्कोरिंग:

C: 62/64 = 96.875%

ध्यान दें कि इस कार्यक्रम में एक स्थान है। जाहिर है, यह कार्यक्रम एक वैध प्रविष्टि नहीं है क्योंकि यह संकलन भी नहीं करता है, लेकिन मैं यह दिखाना चाहता था कि स्कोरिंग कैसे काम करता है।

main(){printf("Hello World!");}

4
और किस भाषा में >2:?WXLAC:?E7WQw6==@ (@C=5PQXjNसंकलित है?
२०:५० पर होशो

@ hosch250 लोल, यह सिर्फ एक गूंगा उदाहरण था
डुर्रोन 597 20

1
"ROT-47 पात्र" से आपका मतलब "ASCII रेंज 33 से 126 में" है? Ie अगर मेरे C प्रोग्राम में स्पेस या न्यूलाइन्स या टैब हैं, तो क्या वे ROT-47 के रूप में गिने जाते हैं या नहीं? इस तथ्य के बारे में कि कई भाषाओं में कार्य करने के लिए एक कार्यक्रम के लिए कुछ स्थान आवश्यक हैं - क्या उन का उपयोग नहीं किया जाता है क्योंकि वे आर 47-योग्य नहीं हैं, भले ही कार्यक्रम उनके बिना टूट जाए?
जोनाथन वान मैट्रे

@JonathanVanMatre रिक्त स्थान या newlines या टैब गिनती नहीं करते हैं क्योंकि मुझे लगता है कि स्कोरिंग बहुत जटिल होगा अन्यथा; और मैं नहीं चाहता कि व्हॉट्सएप 100% स्कोर कर सके, क्योंकि यह उद्देश्य को हरा देगा।
डुर्रोन 597

2
हर कोई जो मेरे पागल स्कोरिंग नियमों पर आपत्ति कर रहा है, कृपया यहाँ टिप्पणी करें / उत्तर दें: meta.codegolf.stackexchange.com/questions/1167/…
durron597

जवाबों:


28

रूबी, 100% (74 वर्ण)

STDIN पर इनपुट, STDOUT पर आउटपुट।

Vj=s=gets;puts(s.tr'!-~','P-~!-O');Vj;'lDl86EDjAFEDWD]ECVP\OV[V!\OP\~VXj;'

दूसरी पंक्ति पहली पंक्ति ROT-47'd है। इसलिए, जब ROT-47 पूरे कार्यक्रम में आता है, तो यह हो जाता है:

';lDl86EDjAFEDWD]ECVP\OV[V!\OP\~VXj';jV=s=gets;puts(s.tr'!-~','P-~!-O');jV

यहाँ मेरी रणनीति इस तथ्य पर आधारित है कि:

  • Vहै 'जब ROT-47'd

  • jहै ;जब ROT-47'd

  • इसलिए, में Vj=...Vj;बदल जाता है ';l...';, जो अनिवार्य रूप से एक सेशन नहीं है

    • अब आप कोई भी मनमाना कोड बना सकते हैं जो ROT-47'd होने पर सामान्य रूप से और नो-ऑप्स कुछ भी करता है। ऐसा इसलिए है क्योंकि Vj=...Vj;आप किसी भी कोड को चलाने का समर्थन कर सकते हैं Vj=0;{INSERT ANY CODE};Vj;, और '...';जब ROT-47'd हो जाएगा । आपको बस Vउस कोड का उपयोग न करने के लिए सावधान रहना होगा, क्योंकि वह इसे तोड़ देगा।
  • इसी तरह के तर्क का उपयोग दूसरी छमाही ( jVबजाय Vj) के उत्पादन के लिए रिवर्स में किया जा सकता है


ठीक है आप सही हैं मैंने कभी भी यह निर्दिष्ट नहीं किया है और मैं पीछे नहीं हटूंगा। हालांकि, रिक्त स्थान अभी भी पात्र पात्रों के रूप में नहीं गिना जाता है; मुझे लगता है कि यह 136/140 होना चाहिए।
डुर्रोन 597

1
@ ड्यूर्रोन 597 फिक्स्ड; अधिक रिक्त स्थान नहीं।
दरवाज़े

डांग रूबी को एक अर्धविराम के साथ लाइनों को समाप्त करने की आवश्यकता नहीं है :)
डुर्रोन 597

16

सी - ५४.६%

Y;BW;XL;jNj;AW(){XL^Y;};main(int i,char**v){char*x=v[1];while(*x){if(*x>32&&*x<128)*x=(*x+15)%94+32;putchar(*x++);}}//Y^Nj>2:?W:?E :[492CYYGXL492CYIlG,`.jH9:=6WYIXL:7WYImbaUUYIk`agXYIlWYIZ`dXThcZbajAFE492CWYIZZXjNN

जब ROT-47 का अनुवाद किया जाता है, तो हम प्राप्त करते हैं

*jq(j){j;};jp(WXL){/*jNj>2:?W:?E :[492CYYGXL492CYIlG,`.jH9:=6WYIXL:7WYImbaUUYIk`agXYIlWYIZ`dXThcZbajAFE492CWYIZZXjNN^^*/};main(int i,char**v){char*x=v[1];while(*x){if(*x>32&&*x<128)*x=(*x+15)%94+32;putchar(*x++);}}

दोनों कार्यक्रम संकलित करते हैं, और ROT-47- पहले तर्क का अनुवाद करते हैं:

$ ./a "hello world"
96==@ H@C=5

मुझे यह विचारधारा पर काम करने में परेशानी हो रही थी। मैं हालांकि 50% से ऊपर स्कोर देखकर बहुत प्रभावित हूँ!
डुर्रोन 597 22

@ durron597 यह विचारधारा पर काम नहीं करेगा क्योंकि यह तर्कों के माध्यम से इनपुट को स्वीकार करता है, न कि
गति

1
तर्क के लिए आरओटी -47 को लागू करने के लिए अपवोट करें, न कि केवल आत्म-अनुवाद के लिए। यह कल्पना में होना चाहिए था।
जोनाथन वान मैट्रे

10

GolfScript, 120/120 बाइट्स = 100%

{:&&32>&&+254<*{7+7+94%33+}*}%LiUUbamUUZadckYLfZfZhcTbbZNYNT

या, ROT-47 में:

LiUUbamUUZadckYLfZfZhcTbbZNYNT{:&&32>&&+254<*{7+7+94%33+}*}%

कोई टिप्पणी या स्ट्रिंग दुर्व्यवहार नहीं। अपरिभाषित आदेश LiUUbamUUZadckYLfZfZhcTbbZNYNT(जो ROT-47 में बाकी कोड के बराबर है) एक नो-ऑप है, लेकिन यह अभी भी दुभाषिया द्वारा निष्पादित होता है, इसलिए मेरा मानना ​​है कि इसका उपयोग किया जाता है।

यह वास्तव में GolfScript में एक बहुत आसान चुनौती थी। अंक से बचने में मुख्य कठिनाई थी 1, जिसे ROT-47 द्वारा GolfScript कमांड में मैप किया जाता है `। आदेशों ., -, ,, \, [, /, ]और ^भी बचा जा सकता था, लेकिन उस के बाद से काम नहीं सरणी निर्माण की आवश्यकता है, इस मामले में काफी आसान था।

बोनस:

यहां एक गोल्फस्क्रिप्ट पीरियड -2 क्वीन (यानी एक प्रोग्राम जो एक दूसरे प्रोग्राम को प्रिंट करता है जो पहले प्रोग्राम को फिर से प्रिंट करता है) जहां दो प्रोग्राम एक-दूसरे के ROT-47 ट्रांसफॉर्म हैं:

{`'0$~'+.{7+7+94%33+}%@!{0$@@;}*}0$~L1V_SOVZ]LfZfZhcTbbZNToPL_SoojNYN_SO

यह प्रोग्राम स्वयं को ROT-47 एनकोडेड करता है, जो दूसरे गोल्फस्क्रिप्ट प्रोग्राम की उपज देता है:

L1V_SOVZ]LfZfZhcTbbZNToPL_SoojNYN_SO{`'0$~'+.{7+7+94%33+}%@!{0$@@;}*}0$~

जो बदले में, स्वयं को ROT-47 भी एनकोडेड आउटपुट करता है, पिछले प्रोग्राम को फिर से पैदावार देता है। इस प्रकार, यह कार्यक्रम एक घूमने वाली रानी भी है ।


आपका भाजक गलत है: "दोनों संस्करणों के कुल बाइट्स (सभी वर्ण) द्वारा विभाजित"। 60/120 = 50%
जोनाथन वान मैट्रे

@JonathanVanMatre: दोनों संस्करणों में सभी बाइट्स (= दुभाषिया द्वारा निष्पादित) का उपयोग किया जाता है, इसलिए यह 120/120 = अभी भी 100% होगा।
इल्मरी करोनें

मैं स्कोरिंग के बारे में अनिश्चित हूं क्योंकि मुझे गोल्फस्क्रिप्ट नहीं पता है। मुझे पता है कि, उदाहरण के लिए, Aब्रेनफॉक अंश में गिना जाएगा , लेकिन भाजक में नहीं। क्या यह एक ही बात है या अलग है?
डुर्रोन 597

@ durron597: GolfScript LiUUbamUUZadckYLfZfZhcTbbZNYNTमें एक मान्य पहचानकर्ता है, और इसे कमांड के रूप में निष्पादित किया जाएगा। हालाँकि, यह बिल्ट-इन कमांड्स में से एक नहीं है , और न ही इसे प्रोग्राम द्वारा कोई अर्थ असाइन किया गया है, इसलिए डिफ़ॉल्ट रूप से यह बस कुछ नहीं करता है।
इल्मरी करोनें

6

अजगर, 96.1% (?)

आपकी परिभाषा के अनुसार, स्ट्रिंग्स की गणना कोड के रूप में की जाती है?

V=input();print("".join([chr(33+(ord(V[i])+14)%94)for i in range(len(V))]));V
'l:?AFEWXjAC:?EWQQ];@:?W,49CWbbZW@C5WD,:.XZ`cXThcX7@C : :? C2?86W=6?WDXX.XXj'

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