ট্রাইআইটকনকাইন চ্যালেঞ্জ


48

( এই পোস্টে এবং চ্যাটের পরবর্তী আলোচনার ভিত্তিতে - টিআইওর জন্য ডেনিসকেও অনেক ধন্যবাদ!)

চ্যালেঞ্জ

এমন একটি ভাষা চয়ন করুন যা বর্তমানে ট্রাইআইটঅনলাইন সাইটে উপলব্ধ রয়েছে , উদাহরণস্বরূপ পাওয়ারশেল । সেই পৃষ্ঠায় সেই ভাষায় কোড লিখুন, এটি কোনও ইনপুট নেয় না, যেমন রান বোতামটি ক্লিক করা হয়, সেই পৃষ্ঠার আউটপুট সংরক্ষণ / স্টোর সংরক্ষণের সময় "সরল ইউআরএল" ক্ষেত্রের ঠিক ঠিক একই রকম হয় / পরিবর্তে বোতাম ক্লিক করা হয়।

একটি কল্পিত উদাহরণের জন্য, ধরুন এটি aaaপাওয়ারশেলের কোনও সমাধানের কোড ছিল। তারপরে, রান সাথে উইন্ডোজaaa কোডে https://tio.run/#powershellআউটপুট হওয়া ফলাফলের ফলাফল https://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AAযা সেভ / স্টোর বোতামটি ক্লিক করা হলে এটি "প্লেইন ইউআরএল" ক্ষেত্রও ।

স্কোরিং

ফলস্বরুপ URL টি এই প্রতিদ্বন্দ্বিতা করার জন্য আপনার জমা হয়। বিজয়ী হ'ল সংক্ষিপ্ততম URL টি বাইটে পরিমাপ করা হয়। উপরের উদাহরণের জন্য, ইউআরএল https://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AAহল 44 বাইটে চ্যালেঞ্জের জমা । সংক্ষিপ্ততম URL যা এই চ্যালেঞ্জটির বাকি অংশগুলি পূরণ করে চ্যালেঞ্জটি জিতে এবং ব্রাউন পয়েন্ট অর্জন করে (পয়েন্টগুলি ছাড়াইযোগ্য নয়)। প্রদত্ত পৃথক ন্যূনতম সম্ভাব্য দৈর্ঘ্য দেওয়া থাকলে, দুটি সাবমিশন দৈর্ঘ্যে টাই হলে পূর্বের জমাটি জয়ী হয়।

ইউআরএল জেনারেশন

এটি रिपোরিটরিতে ইউআরএল জেনারেশন অ্যালগরিদমের শুরু। আপনি দেখতে পাবেন যে কীভাবে প্রধান কোড অঞ্চলটি নেওয়া হয়, কোনও অতিরিক্ত উপাদান সংযোজন করা হয়, স্ট্রিংটি ডিফল্ট হয় এবং বেস 64 রূপান্তরিত হয় এবং তারপরে চাপ দেওয়া হয় ##etc. ইত্যাদি আমি এখানে পুরো বিশদে যাব না; চ্যালেঞ্জের অংশটি হল অ্যালগরিদমে কোনও সম্ভাব্য quirks শোষণের জন্য কীভাবে ইউআরএলগুলি তৈরি করা হয় তা পার্স করা এবং বুঝতে।

বিধি / স্পষ্টকরণ

  • আসল কোডটির কোনও ইনপুট নেওয়া উচিত নয় এবং আউটপুট হিসাবে কেবল কুইন-ইউআরএল উত্পাদন করা উচিত।
    - এই উপায়ে শুধুমাত্র টেক্সট ক্ষেত্র জনবহুল করা উচিত যখন URL- এ ক্লিক করে Code, Header, Footerবা সঙ্গতিপূর্ণ "কম্পাইলার ফ্ল্যাগ" ক্ষেত্র; Inputএবং Argumentsক্ষেত্র নিষিদ্ধ করা হয় এবং খালি / অব্যবহৃত থাকা আবশ্যক। রান বোতামটি ক্লিক করলে কেবল Outputক্ষেত্রটি পরিবর্তন করা উচিত । এই চ্যালেঞ্জের জন্য, Debugক্ষেত্রটি সমস্ত পরিস্থিতিতে উপেক্ষা করা হয়।
  • সাধারন কুইন বিধিগুলি কোডের উপর যথাসম্ভব প্রযোজ্য (উদাহরণস্বরূপ, কোড এর মাধ্যমে নিজস্ব উত্স কোডটি পড়তে পারে না .code.tio)।
  • কোডটি আপনার জমা দেওয়ার ক্ষেত্রে কীভাবে কাজ করে তার একটি বিবরণ অন্তর্ভুক্ত করুন।
  • একটি "কৌতুক" ইউআরএল বা শর্টকাট তৈরি করার জন্য টিআইও সংগ্রহস্থলের কাছে গিট পুল অনুরোধ জমা দিয়ে একটি "চিট" কুইন জমা দেওয়ার অনুমতি নেই Submit
  • একইভাবে, একটি "কৌশল" URL তৈরি করার জন্য কোনও নির্দিষ্ট ভাষা আপডেট করার জন্য একটি টান অনুরোধ জমা দেওয়া অনুমোদিত নয়।
  • দয়া করে ডেনিসের সার্ভারগুলিতে ভাল থাকুন এবং এই চ্যালেঞ্জের স্বার্থে তাদের অপব্যবহার করবেন না বা শোষণের চেষ্টা করবেন না।

14
মনে রাখবেন, শেষ নিয়মটি গুরুত্বপূর্ণ! ইতিমধ্যে অনেকগুলি ডিডিওস আক্রমণ চলছে।
এরিক আউটগল্ফার

"পিআর" কী?
অ্যাডম

1
কল্পিত উদাহরণ: যদি আমার জমাটি যদি https://tio.run/##a+aকোনও প্রোগ্রামের সাথে লিঙ্ক দেয় যা আউটপুট https://tio.run/##a+aহয় তবে এটি কি কার্যকর যে লিংকটি জেনারেট হয়েছিল saveStateতা কি বৈধ হবেhttps://tio.run/##a@a
টুইয়েট

1
@ টুইনাাইট ভাল প্রশ্ন। এটি একটি আকর্ষণীয় পরিস্থিতি হবে তবে এটি এখানে নিয়মগুলির সাথে মাপসই করা হবে না এবং তাই বৈধ জমা দেওয়া হবে না।
অ্যাডমবর্কবার্ক

1
আপনি টিআইওভি 2 এটি পোস্ট করার জন্য অপেক্ষা করছেন?
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 এর সমান ফলাফল দেওয়ার জন্য ঘটে I
  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

এটি অনলাইন চেষ্টা করুন!

আমার জিমি অ্যাপ্রোচটি অফ করে 8 টি বাইট গল্ফ করার জন্য, জিমি 23013 কে ধন্যবাদ জানায় যে একটি অ্যাপ্রোচ যা অন্য বাইটকে বাঁচিয়েছে এবং এই অ্যাপ্রোচটি থেকে আরও 8 বাইট গল্ফ করার জন্য!



1
@ jimmy23013 আমি base64 | tr -d \\nআমার টার্মিনালে কতবার টাইপ করেছি তা গণনা করতে পারি না ... ধন্যবাদ!
ডেনিস

tio.run/##S0oszvj/… দুর্ভাগ্যক্রমে এটির একটি + আছে যা আমি কীভাবে সরাতে জানি না।
jimmy23013

@ jimmy23013 এটি থেকে মুক্তি পেতে পরিচালিত, তবে এটির জন্য তিনটি বাইট খরচ হয়েছে। বিরক্তিকরভাবে, tio.run/##S0oszvj/… এটিকে থেকে মুক্তি দেয় তবে অন্য কোথাও একটির সাথে পরিচয় করিয়ে দেয়।
ডেনিস

3
@ স্টেভবেনেট আমার কাছে মনে হয় যে আমার একটি ভাল কারণ ছিল যদিও আমি এটি বেশ মনে করি না।
ডেনিস

12

পাইথ , ইউআরএল দৈর্ঘ্য = 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

এটি অনলাইন চেষ্টা করুন!

পাইথের জেলিব বিল্টিন ( .Z) এবং বেস 64 এর একটি ইনলাইন বাস্তবায়ন ব্যবহার করে।

কিভাবে এটা কাজ করে

বাহ্যিক পর্যায়:

.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
করেছেন ... আপনি কি ডিনিসকে টিআইও
ইঞ্জিনিয়ার টোস্ট

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})

এটি অনলাইন চেষ্টা করুন!


পবিত্র খ্রিস্ট, আপনি কীভাবে এই উত্তরটি পেয়েছিলেন তা ব্যাখ্যা করতে পারেন ? আমি এমনকি জাভা বা অন্য কিছুতে চেষ্টা করে থাকলে এটি খাঁটি বিচার এবং ত্রুটি হতে পারে।
যাদু অক্টোপাস উরান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.