शोषण "मुक्त व्हाट्सएप"


20

मान लीजिए कि एक कोडगॉल्फ चुनौती आपके कार्यक्रम की लंबाई में व्हॉट्सएप की गिनती नहीं करती है। अपनी स्क्रिप्ट को व्हॉट्सएप में एन्कोडिंग करके इस सिस्टम को धोखा दें, और एक स्क्रिप्ट को गोल्फ करें जो एम्बेडेड व्हाट्सएप को डिकोड और निष्पादित करता है।

उदाहरण

JBernardo के मेटा गोल्फ चैलेंज के लिए मेरा समाधान ऋषि (या पायथन) कोड को व्हॉट्सएप में और डिकोडर को गोल्फ को एनकोड करना था।

s = ' '
for c in '<lots of whitespace>'.split(s):
    s+=chr(len(c))
exec s

एन्कोडिंग एक स्क्रिप्ट लेने के लिए है, एक नई रूपरेखा तैयार करता है, और cस्क्रिप्ट में प्रत्येक वर्ण के लिए, आउटपुट ord(c)टैब एक स्थान के बाद आता है। पायथन का उपयोग करने के बाद से एक नई पंक्ति बनाना आवश्यक है और मैं sएक स्थान के साथ स्क्रिप्ट शुरू करता हूं ।

स्कोरिंग

एक पूर्ण समाधान में आपके द्वारा उपयोग किए जाने वाले एन्कोडिंग का विवरण होता है (यदि यह जटिल है, तो एक स्क्रिप्ट प्रदान करें), और 'डिकोड-एंड-एक्ज़ीक्यूट' इस स्क्रिप्ट। आपका स्कोर डिकोड-एंड-निष्पादित स्क्रिप्ट में गैर-व्हाट्सएप वर्णों की संख्या है।

व्हॉट्सएप (भाषा) निषिद्ध है

इसके अलावा, किसी भी भाषा में ऑपरेटरों का एक पूरा सेट होता है जो केवल व्हाट्सएप पात्रों का उपयोग करते हैं, उन्हें अनुमति नहीं है: मैं सबसे कम नॉनजरो स्कोर स्वीकार करूंगा।

जवाबों:


8

गोल्फस्क्रिप्ट, 12 वर्ण

स्ट्रिंग सीमांकित 'इन 10 वर्णों से पहले जाता है:

n/{,}%''+~

प्रत्येक पंक्ति को एक वर्ण में डिकोड किया गया है, जिसका ASCII (शायद यूनिकोड, वास्तव में) मान रेखा की लंबाई है।

दुर्भाग्य से अगर मैं अपने हैलो वर्ल्ड उदाहरण को चिपकाने की कोशिश करता हूं, तो मार्कडाउन एक <pre>ब्लॉक में भी, अतिरिक्त स्थान हटा देता है ।


2
चूंकि एक कार्यक्रम की शुरुआत में व्हाट्सएप हमेशा गैर-कार्यात्मक .n/{,}%+~होता है , इसलिए यह भी काम करेगा।
डेनिस

9

CPAN, 16

use Acme::Bleach;

CPAN के पास यह सब है। या कम से कम, सिर्फ सही मॉड्यूल।


मैं इस पर धोखा कहता हूं, यह ऑपरेटरों का एक पूरा सेट है जो व्हाट्सएप के अलावा कुछ भी नहीं है
शाफ़्ट फ्रीक

5
यह कोई धोखा नहीं है। यह सस्ता है, लेकिन स्वीकार्य है।
21

1
यह कार्यक्रम कुछ नहीं करता है। कोई भी WS नहीं है। BOOOOOO !!!! कृपया इसे ऐसे प्रोग्राम के साथ रिपॉजिट करें जो यहां कुछ उपयोगी है। एक्मे :: ब्लीच का इस्तेमाल करते रहें, लेकिन इसका लाभ उठाएं।
थॉमस एडिंग

1
@ ट्रिनिथिस: जैसा कि यहां प्रस्तुत अन्य कार्यक्रमों में से कोई भी नहीं है। क्यों इस पर विशेष रूप से उठाओ?
जेबी

मैंने इस पर ध्यान दिया और यह क्या करता है, यह केवल आयात की तरह दिखता है।
थॉमस एडिंग

3

पर्ल, २ ९

$_="";s/     */chr length $&/ge;eval

अंदर s///एक टैब है तो एक जगह है। एन्कोडिंग रिक्त स्थान के साथ एक अल्ट्रा-बेसिक एनकोड है, पूर्ववर्ती टैब के साथ।

कमांड लाइन पर इसे आज़माएं:

$ tr ST ' \t' <<< '$_="TSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS"; s/TS*/chr length $&/ge; eval' | perl

संपादित करें: ठीक है, योग्य, मुझे टैब / स्पेस मिक्स को कॉपी-पेस्ट करने का उचित तरीका नहीं मिल रहा है। मेरा विश्वास करो, यह घर पर काम करता है :) अद्यतन: वहाँ, वहाँ के साथ एन्कोडेडtr


आप के साथ टैब में डाल सकते हैं \tऔर हम विश्वास करेंगे कि यह
व्हॉट्सएप के

@boothby: ओह, इससे बेहतर, मुझे \tशेल द्वारा व्याख्या की जा सकती है और वास्तव में लानत की बात है जो काम करते हैं। कुछ घंटों में ऐसा करना।
जेबी

3

जावास्क्रिप्ट

\tपोस्ट की गई वर्ण गणना प्राप्त करने के लिए टैब से बदलें ।

मानक (64 वर्ण)

eval(eval("'<code here>'".replace(/\t */g,function(s){return"\\"+s.length})))

एरो फंक्शन (49 अक्षर)

eval(eval("'<code here>'".replace(/\t */g,(s)=>"\\"+s.length)))

दोनों के लिए एनकोडर कार्यक्रम

for(var i = 0, si = prompt("Enter the code."), so = ""; i < si.length; ++i) so += '\t' + Array(+si.charCodeAt(i).toString(8)).join(' '); prompt("Here is the result.", so);

दो बाइट बचाने के (s)=>...लिए एरो फंक्शन में बदलेंs=>...
andrewarchi

किसी भी दो चार के बीच रिक्त स्थान रखें और इसे काम करने के लिए jsfuck का सबसे कम उपयोग करें (और " t " [ 1 ]"टी" का बेहतर उपयोग करने के लिए)
l4m2

44Beval("".replace(/ +/g,s=>' []+!()'[s.length]))
l4m2

2

याबसिक (88 वर्ण)

a$ = "<code here>"
for a = 1 to len(a$)
    if mid$(a$, a) < " " then b = b + 1
    else b$ = b$ + chr$(b) : b = 0
    endif
next
compile(b$)
a()

मेरे सी समाधान के लिए समान एनकोडर प्रोग्राम का उपयोग करें, लेकिन पहले वर्ण को न निकालें। आपका मूल कोड एक सबरूटीन के रूप में होना चाहिए a(), उदाहरण के लिए:

sub a():?"hello, world":end sub

2

सी (99 अक्षर)

main(c, p)
{
    char *s = "<code here>";
    for (p = popen("cc -xc -oa -", "w"); *s;)
        *s++ - 9 ? c -= putc(c, p) : ++c;
    execl("a", pclose(p));
}

केवल (और शायद केवल साथ काम करता है) जीसीसी के साथ परीक्षण किया गया।

एनकोडर प्रोग्राम के अनुरूप (मैन्युअल रूप से पहले वर्ण को इसके आउटपुट से हटा दें):

#include <stdio.h>

int main()
{
    int c;
    while ((c = getchar()) != EOF) {
        while (c--) putchar(9);
        putchar(32);
    }
    return 0;
}

1

डी (101 वर्ण)

import std.algorithm;mixin((){char[]r;foreach(c;splitter("<lots of whitspace>"," "))r~=cast(char)c.length;return r;}());

प्रश्न के समान एन्कोडिंग (न्यूलाइन की कोई आवश्यकता नहीं)


2
इसका मुद्दा यह है कि व्हॉट्सएप स्वतंत्र है। मैं 98 अक्षर गिनता हूं। पढ़ने योग्य कोड लिखने के लिए स्वतंत्र महसूस करें!
बूथबीज

1

बैश (केवल निर्माण, 44 वर्ण)

IFS=
eval `while read a
do printf '\'${#a}
done<<a
<code here>
a`

इनकोडर स्क्रिप्ट के अनुरूप:

od -b | cut -b9- | tr ' ' '\n' | while read a
do
    for (( b = 0; b < $((10#$a)); ++b ))
    do
        echo -n ' '
    done
    echo
done

बहुत अच्छा। मैं अपने आप को एक बैश हैकर के रूप में मानता हूं, और मुझे यह करने manके लिए थोड़ा उठना पड़ा ।
बूंदी

1

K5, 12 बाइट्स

.`c$-':&9=" "

निष्पादित करें ( .) `c$प्रत्येक जोड़ी के अंतर के द्वारा दिए गए एससीआई मानों ( ) से बना स्ट्रिंग ( -':) जहां &इनपुट ( ) इनपुट है एक टैब ( 9=" ")।

इनपुट टैब- और गैर-टैब वर्णों की एक स्ट्रिंग है, और चरित्र मान प्रत्येक टैब के बीच गैर-टैब (रिक्त स्थान या नईलाइन्स) की संख्या में एन्कोड किए जाते हैं। एक उदाहरण एनकोडर:

" ",/{(x#" "),"\t"}'-1+

एक रनिंग ज्वाइन की शुरुआत एक स्पेस ओवर ( " ",/) x स्पेस ( x#" ") के साथ हुई जिसमें टैब ( ,"\t") जहां एक्स प्रत्येक ( {...}') इनपुट स्ट्रिंग के कैरेक्टर मान को घटाता है ( -1+) है।

कार्रवाई में:

  enc: " ",/{(x#" "),"\t"}'-1+
  dec: .`c$-':&9=

  enc "2+3"
"                                                  \t                                          \t                                                  \t"
  dec enc "2+3"
5

0

रूबी, ४३

बहुत सीधा, एन्कोडिंग x स्थान को प्रति पंक्ति में डाल रहा है, जहां x चारकोसी की एससीआई मान है, डिकोडिंग रिवर्स है।

निम्न स्क्रिप्ट ASCII कनवर्टर के लिए सिर्फ एक यूनरी है और रिक्त स्थान के अलावा अन्य चीजों के मुक्त होने पर भी काम करती है:

eval("".split("\n").map{|x|x.length.chr}.join)

बस खाली स्ट्रिंग को उस प्रोग्राम से बदलें जो आपको प्रसन्न करता है।

एक और पुन: प्रयोज्य प्रारूप में बात:

from_space = lambda {|text| text.split("\n").map{|x| x.length.chr}.join}
to_space = lambda {|text| text.chars.map{|x| " " * x.ord}.join("\n")}

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