लिपोग्राम "क्वीन"


26

कार्य

  1. इनपुट के रूप में एकल यूनिकोड वर्ण लें।
  2. एक प्रोग्राम उसी भाषा में आउटपुट करें जो इस विनिर्देशन का पालन भी करता है, लेकिन जिसमें इनपुट चरित्र नहीं है।
  3. अपने कार्यक्रम इनपुट के साथ चलाया जाता है, तो एक है, और फिर उत्पादन कार्यक्रम तो इनपुट के साथ चलाया जाता है , तो प्रोग्राम यह आउटपुट है की अनुमति चरित्र को रोकने के लिए एक । हालांकि, बी को अभी भी इस कार्यक्रम में उपस्थित होने की अनुमति नहीं है। दूसरे शब्दों में, कार्यक्रम के सबसे हाल के अवतार में केवल इनपुट को प्रदर्शित करने के लिए मना किया गया है।
  4. भले ही शीर्षक कुछ भी कहे, मानक क्वीन नियम लागू होते हैं।

सबसे छोटा कार्यक्रम जीतता है। कार्यक्रम कम से कम एक बाइट लंबा होना चाहिए।

उदाहरण

यदि कार्यक्रम ए.बी.डी.सी. (# एक टिप्पणी है)

> slangi "ABCD"
A
EBCD          # "FBCD" "JGGJ" "UGDKJGDJK" are all OK
> slangi "EBCD"
C
ABGD          # "EBGD" "UIHDAIUTD" are all OK
> slangi "ABGD"
B
AFCD
> slangi "AFCD"
Z
ABCD

जहां slangiएक काल्पनिक भाषा के लिए दुभाषिया है।


क्या यह चुनौती कम वाचाल भाषाओं में नहीं होगी? निर्देश के नामों के लिए कई शब्दों का उपयोग करते हैं, इसलिए जैसे पात्रों से बचना बहुत मुश्किल और / या असंभव होगा e
लीजनमोनमल 978

2
इसके बिना अंग्रेजी में लिखना बहुत मुश्किल है e, फिर भी गडस्बी यह करता है।
अकांगका

मैं कोई क्वीन फ़ंक्शन मान रहा हूं?
मामा फन रोल

जवाबों:


24

CJam, 45 41 38 35 बाइट्स

{`"OX$_?"+_l&{{H)+`}/"\He,}":)}&}_~

यदि इनपुट वर्ण कोई भी वर्ण नहीं है "$&)+,/:?HOX\_`el{}, तो यह प्रोग्राम निम्न, थोड़े संशोधित संस्करण को स्वयं मुद्रित करता है। इसे ऑनलाइन आज़माएं!

{`"OX$_?"+_l&{{H)+`}/"\He,}":)}&}OX$_?

अन्यथा, कार्यक्रम संशोधन के निम्न, ओफ़्स्कुलेटेड संस्करण को प्रिंट करता है। इसे ऑनलाइन आज़माएं!

''r'4'a'j'6'q'Q'4'='q'~'8'''Z';'='r''A'4'n'Z'w'>''4'L';''8''a'j'6'q'Q]If-~

ध्यान दें कि कुछ अक्षर अप्राप्य हैं। इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

{`"OX$_?"+_l&{{H)+`}/"\He,}":)}&}_~

{                               }    Define a code block.
                                 _~  Push a copy and execute the copy.
 `                                   Push a string representation of the block.
  "OX$_?"                            Push that string.
         +_                          Concatenate and push a copy.
           l&                        Intersect the copy with the input.
             {                }&     If the intersection is non-empty:
              {    }/                  For each character of the concat. strings:
               H)                        Push 18.
                 +                       Add it to the character.
                  `                      Inspect; turn 'c into "'c".
                     "He,}"            Push that string.
                           :)          Increment each char. Pushes "If-~"

पहले संभावित आउटपुट प्रोग्राम में, हम ~दूसरे प्रोग्राम में इसका उपयोग करने में सक्षम होने से बचते हैं । इसलिए, इसके बजाय _~, संशोधित कार्यक्रम के साथ समाप्त होता है OX$_?, जो निम्नानुसार काम करता है।

O        Push "" (falsy).
 X$      Push a copy of the code block.
   _     Push yet another copy.
    ?    Ternary if; since "" is falsy, execute the second copy.

अंत में, शेष आउटपुट प्रोग्राम में,

''r'4'a'j'6'q'Q'4'='q'~'8'''Z';'='r''A'4'n'Z'w'>''4'L';''8''a'j'6'q'Q]

एक सरणी में उन सभी वर्णों को लपेटता है, इसलिए निम्नलिखित स्ट्रिंग को आगे बढ़ाएं।

"'4aj6qQ4=q~8'Z;=r'104nZw>'4L;'8'j6qQ"

If- प्रत्येक वर्ण कोड से 18 घटाता है, स्ट्रिंग को धकेलता है

"{`\"OX$_?\"+_l&{{H)+`}/\"\He,}\":)}&}OX$_?"

जो ~मूल्यांकन करता है।


18

जावास्क्रिप्ट (ईएस 6), 356 340 327 308 303 263

अब Function`...```दूसरे कार्यक्रम के लिए उपयोग कर रहे हैं:

f=(b=y=>[for(x of`f=${f};f()`)x.charCodeAt().toString(y).toUpperCase()])=>alert([`eval('\\${b(8).join('\\')}')`,`eval(String.fromCharCode(${b(10).map(x=>'+9-8'.repeat(x))}))`,'Function`\\x'+b(16).join('\\x')+'```'][1+"0e1v2a3l4(5'6'7)\\".indexOf(prompt())%2]);f()

फ़ंक्शन तीन संभावित कार्यक्रमों में से एक में खुद को पैक करता है:

  1. पहला प्रोग्राम evalएक स्ट्रिंग शाब्दिक पर कॉल करता है जिसमें प्रत्येक वर्ण के साथ फ़ंक्शन का कोड होता है, जो एक अष्ट मान के रूप में बच जाता है।

    eval ( '\ 146 \ 165 ...')
  2. दूसरा प्रोग्राम ब्राउज़र को एक javascript:URL पर पुनर्निर्देशित करता है जिसमें प्रत्येक वर्ण URL के साथ फ़ंक्शन का कोड होता है। यह एकमात्र तरीका है जो मैं कोष्ठक का उपयोग किए बिना कोड का मूल्यांकन करने के लिए सोच सकता था। यह 'eval' में अक्षरों से भी बचता है।

    विंडो [ "\ x6coc \ x61tion"] [ "घंटा \ x65f"] = "j \ x61 \ x76 \ x61script:% 66% 75 ..."
  3. अंतिम कार्यक्रम दर्दनाक रूप से लंबा है। यह +9-8प्रत्येक वर्ण कोड प्राप्त करने के लिए एक बार में एक ( ) जोड़कर फ़ंक्शन का कोड बनाता है । यह अष्टक अंकों के उपयोग से बचने के लिए है।

    eval (String.fromCharCode (+ 9-8 + 9-8 + 9-8 + 9-8 ...))

इनपुट प्रोग्राम के लिए सावधानीपूर्वक निर्मित स्ट्रिंग की खोज करके सही प्रोग्राम को अनुक्रमित किया गया है:

[`program_1`,`program_3`,`program_2`][1+"0e1v2a3l4(5'6'7)\\".indexOf(prompt())%2]

यहाँ एक अनगढ़, अनछुआ संस्करण है। यह स्रोत में newlines के कारण काम नहीं कर सकता है।

function f() {
    // convert source code of current function to bytes
    var bytes = Array.map(f + 'f()', x => x.charCodeAt());

    // pack this function's code in one of three possible programs,
    // depending on the input
    var input = prompt();

    // PROGRAM 1 - only contains characters: eval(')01234567\
    // eval('\146\165...')
    var source = "eval('\\" + bytes.map(x => x.toString(8)).join('\\') + "')";

    // PROGRAM 2 - doesn't contain characters: eval('')
    // window["\x6coc\x61tion"]["hr\x65f"]="j\x61\x76\x61script:%66%75..."
    // -> window["location"]["href"] = "javascript:..."
    if ("eval(')".includes(input)) {
        source = 'window["\\x6coc\\x61tion"]["hr\\x65f"]="j\\x61\\x76\\x61script:%';
        source += bytes.map(x => x.toString(16).toUpperCase()).join('%') + '"';
    }

    // PROGRAM 3 - doesn't contain characters: 01234567\
    // eval(String.fromCharCode(+9-8+9-8+9-8+9-8...))
    if ('01234567\\'.includes(input)) {
        source = "eval(String.fromCharCode(";
        source += bytes.map(x => '+9-8'.repeat(x)).join(',') + '))';
    }

    console.log(source);
}
f()

function f(){ ... };f()हो सकता है (f=_=>{ ... })()। यहाँ एक उदाहरण है: es6fiddle.net/iiz2nq0l
इस्माइल मिगुएल

इससे भी बेहतर f=(_=prompt())=>...;f():। इनपुट के रूप में संग्रहीत किया जाता है _
मामा फन रोल

इसके अलावा, कंसोल.लॉग की कोई आवश्यकता नहीं है, फ़ंक्शन आउटपुट ठीक है।
मामा फन रोल

Function`[code]`.call``;पुनर्निर्देशन के बजाय आपके लिए काम का उपयोग नहीं करेगा ? यहाँ एक काम कर उदाहरण है: es6fiddle.net/ij023v49 (देखें! नहीं evil()! एर्म, मेरा मतलब है eval()...)
इस्माइल मिगुएल

खैर, आज आपने कुछ सीखा है। बस इस बात का ध्यान रखें कि वह thisवस्तु खाली टेम्पलेट स्ट्रिंग होगी। यह Functionकंस्ट्रक्टर पर निर्भर करता है , जो आपको चलाने के बजाय एक फ़ंक्शन बनाने की अनुमति देता है eval()। फ़ंक्शन में पहले पैरामीटर के भीतर मौजूद कोड होगा। मैं इसका वास्तविक windowउपयोग करने के लिए बहुत उपयोग करता हूं Function('return this')()। चूँकि आप उपयोग नहीं कर सकते हैं (), इसलिए मैंने ES6 की एक छोटी सी गाली दी है जो एक प्रयोग करने योग्य फ़ंक्शन को थूकने की कोशिश करता है जिसे आप बिना चला सकते हैं ()। उसके लिए, आपको .call()विधि की आवश्यकता है , जो फ़ंक्शन को एक नई thisवस्तु के साथ बुलाती है ।
इस्माईल मिगुएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.