TryItOnquine चुनौती


48

( इस पोस्ट और चैट पर आगामी चर्चा के आधार पर - TIO के लिए डेनिस के लिए बहुत धन्यवाद!)

चुनौती

वर्तमान में TryItOnline साइट पर उपलब्ध भाषा चुनें , उदाहरण के लिए PowerShell । उस पृष्ठ पर उस भाषा में कोड लिखें, जो कोई इनपुट नहीं लेता है, जैसे कि जब रन बटन पर क्लिक किया जाता है, तो उस पृष्ठ पर आउटपुट ठीक उसी तरह होता है जैसे "प्लेन URL" फ़ील्ड में सेव / स्टोर करते समय होता है। इसके बजाय बटन पर क्लिक किया जाता है।

एक काल्पनिक उदाहरण के लिए, मान लीजिए कि aaaPowerShell में इसके समाधान के लिए कोड था। फिर, आउटपुट के कोड के रूप में रन के साथ क्लिक करने का परिणाम , जो कि "प्लेन URL" फ़ील्ड भी है जब सेव / स्टोर बटन पर क्लिक किया जाता है।aaahttps://tio.run/#powershellhttps://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AA

स्कोरिंग

परिणामी URL इस चुनौती के लिए अपने जमा है। विजेता बाइट्स में मापा जाने वाला सबसे छोटा URL है। ऊपर दिए गए उदाहरण के लिए, URL 44 बाइट्सhttps://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AA में चुनौती प्रस्तुत करना है । इस चुनौती के बाकी हिस्सों को पूरा करने वाला सबसे छोटा URL चुनौती जीतता है और ब्राउनी पॉइंट्स (अंक नहीं भुनाए जाने योग्य) अर्जित करता है। यह देखते हुए कि एक अलग न्यूनतम संभव लंबाई है, अगर दो प्रस्तुतियाँ लंबाई में टाई होती हैं, तो पहले जमा करना जीत जाता है।

URL जनरेशन

यह रिपॉजिटरी में URL जेनरेशन एल्गोरिथम की शुरुआत है। आप देख सकते हैं कि मुख्य कोड क्षेत्र को कैसे लिया जाता है, किसी भी अतिरिक्त तत्वों को जोड़ा जाता है, स्ट्रिंग को विक्षेपित किया जाता है और Base64 परिवर्तित किया जाता है, और फिर पूर्व- ##निर्धारित किया जाता है, आदि मैं यहां पूर्ण विवरण में नहीं जाऊंगा; चुनौती का एक हिस्सा यह समझना और समझना है कि उक्त एल्गोरिथ्म में किसी भी संभावित विचित्रता का फायदा उठाने के लिए URL कैसे तैयार किए जाते हैं।

नियम / स्पष्टीकरण

  • वास्तविक कोड को कोई इनपुट नहीं लेना चाहिए और आउटपुट के रूप में केवल quine-URL का उत्पादन करना चाहिए।
    - यह केवल पाठ फ़ील्ड है कि जब URL में क्लिक करते हैं भर जाएगी मतलब है Code, Header, Footerया इसी "संकलक फ्लैग" क्षेत्रों; Inputऔर Argumentsक्षेत्रों मना कर रहे हैं और खाली / अप्रयुक्त रहना चाहिए। रन बटन पर क्लिक करने से केवल Outputफ़ील्ड को बदलना चाहिए । इस चुनौती के लिए, Debugसभी स्थितियों में क्षेत्र की अनदेखी की जाती है।
  • सामान्य क्वीन के नियम कोड पर संभव सीमा तक लागू होते हैं (उदाहरण के लिए, कोड अपने स्वयं के सोर्स कोड को नहीं पढ़ सकता है .code.tio)।
  • कृपया यह विवरण शामिल करें कि आपके सबमिशन में कोड कैसे काम करता है।
  • एक "ट्रिक" URL या शॉर्टकट बनाने के लिए TIO रिपॉजिटरी को Git पुल अनुरोध सबमिट करके "चीटी" क्वीन सबमिट करना या जैसी अनुमति नहीं है।
  • इसी तरह, "ट्रिक" URL बनाने के लिए किसी विशेष भाषा को अपडेट करने के लिए पुल अनुरोध सबमिट करने की अनुमति नहीं है।
  • कृपया डेनिस के सर्वर के लिए अच्छा हो और उन्हें इस चुनौती के लिए शोषण या प्रयास न करें।

14
याद रखें, अंतिम नियम महत्वपूर्ण है! वहाँ पहले से ही DDoS हमलों का एक समूह चल रहा है।
आउटगोल्फ जूल

एक "पीआर" क्या है?
एडम जूल

1
काल्पनिक उदाहरण: यदि मेरा सबमिशन https://tio.run/##a+aएक ऐसे प्रोग्राम का लिंक है जो आउटपुट करता है https://tio.run/##a+a, तो क्या यह लिंक द्वारा उत्पन्न लिंक के अनुसार भी कठिन saveStateहोगाhttps://tio.run/##a@a
ट्विनाइट

1
@TwiNight अच्छा सवाल। यह एक दिलचस्प स्थिति होगी, लेकिन यहां नियमों में फिट नहीं होगा और इसलिए यह एक वैध प्रस्तुत नहीं होगा।
AdmBorkBork

1
क्या आप इसे पोस्ट करने के लिए TIOv2 तक इंतजार कर रहे थे?
mbomb007

जवाबों:


15

पायथन 2 , URL लंबाई = 170 बाइट्स

https://tio.run/##K6gsycjPM/r/v9hWqQDCjqlISwPhYlvVIuvM3IL8ohKFpMTiVDMT64KizLwS9YySkoJiK339ksx8vaLSPH1lZXVtiAK9JDOT1Lzk/JRUDY1iVdViTT0YT70qJzNJXVMz2shK1yRWE2aHEkUW4Db//38A
s="python2\xff\xffs=%r;import base64;print'https://tio.run/##'+base64.b64encode((s%%s).encode(('zlib'))[2:-4])\xff\xff";import base64;print'https://tio.run/##'+base64.b64encode((s%s).encode(('zlib'))[2:-4])

इसे ऑनलाइन आज़माएं!

यह तीन संयोगों पर निर्भर करता है:

  1. डिफ़ॉल्ट zlib स्तर 6 इस स्ट्रिंग के लिए zlib स्तर 9 के समान परिणाम देने के लिए होता है, हेडर को मापता है जिसे मैं पट्टी करता हूं।
  2. संपीड़ित लंबाई 3 से विभाज्य है, इसलिए बेस 64 कोई =पैडिंग वर्ण उत्पन्न नहीं करता है ।
  3. बेस 64 आउटपुट में कोई +वर्ण नहीं है ।

15

बैश , 174 166 165 157 बाइट्स

https://tio.run/##S0oszvj/v6QosUBBV1dBvaAoM68kTSGjpKSg2EpfvyQzP0avqDRPX1lZRQMqp6RaHFORlgbCSgpJQO0KSgkg/QlKNelVmQU1JYmZOQq6ydqGhjVA2VQzEwXdckNjS011BdcIz5D//wE

यह निम्नलिखित बैश प्रोग्राम को इनकोड करता है।

trap -- 'printf https://tio\.run/##$(printf "%s\xff\xff" bash "`trap`"|gzip|tail -c+11|base64 -w139)' EXIT

इसे ऑनलाइन आज़माएं!

@ Jimmy23013 को 8 बाइट्स के लिए मेरे मूल दृष्टिकोण से दूर करने के लिए धन्यवाद, एक दृष्टिकोण के लिए जिसने एक अन्य बाइट को बचाया, और उस दृष्टिकोण से एक और 8 बाइट को गोल करने के लिए!



1
@ jimmy23013 मैं base64 | tr -d \\nअपने टर्मिनल में टाइप किए गए समय की संख्या की गणना नहीं कर सकता ... धन्यवाद!
डेनिस

tio.run/##S0oszvj/… दुर्भाग्य से यह एक + है कि मुझे नहीं पता कि कैसे निकालना है।
jimmy23013

@ jimmy23013 इससे छुटकारा पाने में कामयाब रही, लेकिन इसकी कीमत तीन बाइट थी। वार्षिक रूप से , tio.run/##S0oszvj/… उस + से छुटकारा दिलाता है , लेकिन एक और एक का परिचय देता है।
डेनिस

3
@SteveBennett मुझे लगता है कि मेरे पास एक अच्छा कारण था। मुझे यह याद नहीं है।
डेनिस

12

पायथ , URL की लंबाई = 134 बाइट्स

https://tio.run/##K6gsyfj/X68syy/ZS6lYmyujpKSg2EpfvyQzX6@oNE9fWZnLwae4OLrI3dA9NITLQZ9LM8vZxqSkRC@qOJqrAKiby9vZyNTUmwtiBpefl7e3ppnJ//8A

कोड:

.vjNcJ"s+
https://tio.run/##
@Lss[rG1GUT
@/
)jC<4tt.Zs[
pyth
KC255K
.vjNcJ
NJKK)64

इसे ऑनलाइन आज़माएं!

Pyth के zlib buildin ( .Z), और base64 के इनलाइन कार्यान्वयन का उपयोग करता है ।

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

बाहरी चरण:

.vjNcJ"…
      "…    take this 75-byte string
     J      assign it to J
    c       split on whitespace
  jN        join on N = '"'
.v          evaluate as Pyth code

आंतरिक चरण, Jदोहरे उद्धरण के साथ स्ट्रिंग में व्हॉट्सएप की जगह प्राप्त करता है:

s+"https://tio.run/##"@Lss[rG1GUT"@/")jC<4tt.Zs["pyth"KC255K".vjNcJ"NJKK)64
                                               [                             begin a list:
                                                "pyth"                         string,
                                                       C255                    character 255
                                                      K                        assign that to K,
                                                           K                   K again,
                                                            ".vjNcJ"           string,
                                                                    N          '"',
                                                                     J         J (the 75-byte string),
                                                                      K        K again,
                                                                       K       K again
                                                                        )    end list
                                              s  concatenate
                                            .Z   compress with zlib
                                           t     remove first character
                                          t      remove first character
                                        <4       remove last 4 characters
                                       C         convert from base 256
                                      j                                  64
                                                 convert to base 64 digits
                      @L                         map d ↦ the following indexed at d:
                          [                        begin a list:
                            G                        alphabet ("abcdefghijklmnopqrstuvwxyz")
                           r 1                       uppercase,
                              G                      alphabet again,
                               UT                    unary range of length T = 10: [0, …, 9],
                                 "@/"                string,
                                     )             end list
                         s                         concatenate
                        s                          concatenate (we now have the base64 alphabet)
 +"https://tio.run/##"                           prepend string
s                                                concatenate

(यह बहुत बुरा है "इनपुट" फ़ील्ड अस्वीकृत है, या मेरे पास 118 बाइट समाधान होगा ।)


1
क्या ... क्या आपने TIO Engine के आसपास बनी एक चुनौती पर सिर्फ डेनिस को बाहर किया
इंजीनियर टोस्ट

4

पॉवरशेल, 274 बाइट्स

https://tio.run/##TY/rCsIwDIVfZaiYFV2HooIbgu8xBrYzboXSljYq3p59VkHZjxAOJydf4uwVfehQ676fphO5e1TK8pPSWBfF1StCobW8EYYUJMyrphO@qmtw/xzMluv1t37maJoePpsm8sVGP5eV7V25JDslsozmgOJRHAcQ3t6BldARuVDkOcVBfzb5eAwRYM0FPcUQWSkCblaBvDJtPLxaLDmPnTf2bCjbsppxj06LBlPYwRxgoGdR74E9vw9mnQ2UZObF@v4N

यह निम्नलिखित स्निपेट के लिए धन्यवाद है:

&($b={[io.file]::writeallbytes('b',[char[]]'powershell'+255+255+[char[]]"&(`$b={$b})"+255+255);gzip -f b;$b=[io.file]::readallbytes('b.gz');'https://tio.run/##'+[convert]::tobase64string($b[12..($b.count-9)]).replace('=','').replace('+','@')|write-host -n})

इसे ऑनलाइन आज़माएं!


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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.