छोटी गाड़ी कोड लिखें [बंद]


17

अब बुरा कोड लिखने के लिए अपनी क्षमताओं को दिखाने का समय है। मैं प्रोग्रामिंग पहेली की एक नई तरह की कोशिश कर रहा हूं, सबसे समान, मुझे लगता है कि अंडरहेल्ड सी प्रतियोगिता के लिए। मुख्य अंतर यह है कि यह लगभग नापाक नहीं है: यह सिर्फ कुछ अच्छे साफ मज़ेदार हैं। पहेली का लक्ष्य एक कार्यक्रम में जितने भी कीड़े हैं उन्हें पैक करना है। इस प्रतियोगिता का विजेता वह है जो प्रति चरित्र सबसे बग के साथ कार्यक्रम लिखता है।

स्पष्टीकरण मांगने वाले टिप्पणियों के एक विशाल धागे से बचने के लिए, मुझे अभी से परिभाषित करना चाहिए कि मैं क्या योग्य कीड़े मानता हूं।

सबसे पहले, एक बग कोई त्रुटि नहीं है । यदि यह एक समस्या है जिसे दुभाषिया द्वारा त्रुटि के रूप में पहचाना जा सकता है (जैसे बेमेल सीमांकक, बुरी तरह से बनाई गई वाक्य रचना, एक अशक्त वस्तु की संपत्ति को स्वीकार करना, आदि) या यदि यह प्रोग्राम को निष्पादित या जारी रखने से रोकता है, तो यह नहीं है। एक दोष। अन्यथा, आप चार वर्णों में टाइप कर सकते हैं और दुभाषिया आठ वाक्यविन्यास त्रुटियों को सूचीबद्ध कर सकता है और आप बग-वर्ण अनुपात 2 का दावा कर सकते हैं।

दूसरा, बग स्पष्ट रूप से गलत नहीं होना चाहिए और बग एक ईस्टर अंडे नहीं है । यह निश्चित रूप से एक व्यक्तिपरक मानदंड है, लेकिन मुझे लगता है कि इस तरह की प्रतियोगिता के लिए आवश्यक है। इसका मतलब यह है कि आपके पास सशर्त कोड नहीं हो सकता है जो विशेष रूप से स्पष्ट तरीकों से कोड का प्रबंधन करता है। (पढ़ें: ट्यूरिंग पिट भाषा का उपयोग करें, क्योंकि किसी को भी अंतर नहीं पता होगा)।

तीसरा, बग को प्रशंसनीय होना चाहिए । यह व्यक्तिपरक है, ऊपर वाले की तरह, लेकिन बग को ऐसा दिखना चाहिए कि यह कम-से-सावधानीपूर्वक या शायद अज्ञानी व्यक्ति, या किसी ऐसे व्यक्ति द्वारा लिखा जा सकता है, जिसने सिर्फ एक गलती की थी। इसमें शामिल है, उदाहरण के लिए, ऑफ-बाय-वन एरर या सिंटैक्स जो मान्य है और सही दिखता है, लेकिन अवांछित व्यवहार का कारण बनता है (जैसे, कोष्ठक के बजाय वर्ग कोष्ठक का उपयोग करना)।

बग कार्यक्रम के लिए किसी भी प्रकार के अवांछित व्यवहार का कारण बन सकता है, जिसमें शामिल हैं, लेकिन निश्चित रूप से सीमित नहीं है, कुछ असाधारण मामलों के लिए अवांछित उत्पादन, अलग-अलग व्यवहार है जो प्रतीत होता है कि असंबंधित के आधार पर होता है (उदाहरण के लिए वर्तमान आउटपुट के समाप्त होने के आधार पर आउटपुट अलग तरह से प्रदर्शित होता है एक विषम या कुछ सेकंड की संख्या के साथ), मेमोरी लीक, डेटा की हानि, और इसी तरह।

उदाहरण समस्या:

एक प्रोग्राम बनाएं जो सभी ASCII वर्णों को उनके संख्यात्मक मान के आरोही क्रम में प्रदर्शित करता है।

उदाहरण उत्तर:

ब्रेनफ ***, 5 चार्ट, 1 बग, 0.2 बग-चार अनुपात

+[+.]

बग: 1. के लिए ASCII वर्ण प्रदर्शित नहीं करता है जिसे बदलकर तय किया जा सकता है .+[.+]

ठीक है, मुझे लगता है कि आपको ज्यादातर इसे अब तक प्राप्त करना चाहिए, यहां आपकी पहेली है:

एक सीज़र सिफर को डिकोड करें और वर्णानुक्रम में शब्दों को क्रमबद्ध करें

अक्षरों की एक श्रृंखला लेने और वर्णमाला में उन्हें n अक्षरों को स्थानांतरित करने से एक सीज़र सिफर बनाया जाता है। यदि यह वर्णमाला के आरंभ या अंत में सभी रास्ते जाता है, तो A, Z के बाद आता है, और Z, A से पहले आता है। उदाहरण के लिए:

Mannequin
Nboofrvjo //Shifted over 1 or -25
Wkxxoaesx //Shifted over 10 -16
Ftggxjnbg //Shifted over -7 or 19

आपको दो इनपुट दिए जाएंगे (आप इनपुट प्राप्त कर सकते हैं हालांकि आपके लिए सबसे सुविधाजनक है, कारण के भीतर)। पहला इनपुट शब्द है, और दूसरा इनपुट वह मूल्य है जिसे वह स्थानांतरित किया गया है। आपका कार्य डिकोड किए गए शब्दों को आउटपुट करना है, और फिर वे वर्णानुक्रम में सॉर्ट किए जाने के बाद डीकोड किए गए शब्दों को आउटपुट करते हैं।

उदाहरण (बुरे लड़कों के लिए कोई अपराध नहीं, यह सिर्फ एक उदाहरण है):

पहला इनपुट: gtdx wjbfwiji ljy Gfi hfssty

दूसरा इनपुट: 5

पहला आउटपुट: लड़कों को पुरस्कृत किया गया। बुरा नहीं हो सकता

दूसरा आउटपुट: बुरे लड़कों को पुरस्कृत नहीं किया जा सकता है।

सौभाग्य!


आपके उदाहरण का दूसरा इनपुट -5 नहीं है?
आप

@ S.Mark: इनपुट 5 है क्योंकि कार्य सिफर को डीकोड करना है।
नब

ओह समझा। @ नब, धन्यवाद!
आप 7

क्या हमें पूंजी और लोअरकेस दोनों अक्षरों का समर्थन करना है?
जॉय एडम्स

1
@ पेटर: मैंने मेटा पर एक नई चर्चा खोली है जो इस सवाल (दूसरों के बीच) की चिंता करता है। शायद आप टिप्पणी करना चाहेंगे।
dmckee --- पूर्व-मध्यस्थ बिल्ली का बच्चा

जवाबों:


14

रूबी, 136 वर्ण, 7 बग, अनुपात = 0.051

o=gets[/\d+/].to_i
$,='\s'
a=gets.split(/ /).map{|w|w.gsub(/[^.,:;?!]/){(97+($&.ord-97-o)%26).chr}}
print a.join,a.sort_by{|a|a[0]}.join
  1. [/\d+/]: ऋणात्मक संख्याओं में उनके हस्ताक्षर हटा दिए गए हैं (इनपुट सत्यापन पर एक प्रतीयमान प्रयास)

  2. '\s': बैकलैश एस्केप की व्याख्या केवल दो-उद्धृत स्ट्रिंग्स के भीतर की जाती है, इसलिए यह एक स्थान नहीं, बल्कि एक शाब्दिक उत्पन्न करेगा \s

  3. split(/ /): एक सादे के विपरीत split, यह newlines पर विभाजित नहीं होगा (इसलिए अंतिम शब्द नई पंक्ति रखेगा)

  4. /[^.,:;?!]/: यह रेगेक्स विराम चिह्न को बाहर करता है, लेकिन अपरकेस वर्णों, अंकों या अंडरस्कोर को नहीं, और, सबसे गंभीर रूप से, न्यूलाइन्स

  5. 97: विराम चिह्नों या लोअरकेस अक्षरों के अलावा कुछ भी गड़बड़ हो जाएगा

  6. sort_by{|a|a[0]}: जाहिरा तौर पर प्रोग्रामर के बारे में पता नहीं था sort, और इसके बजाय इस हास्यास्पद तरीके का इस्तेमाल किया, जो एक ही अक्षर से शुरू होने वाले शब्दों को क्रमबद्ध नहीं करता है

  7. print: इसके विपरीत puts, प्रत्येक तर्क के बीच एक नई रेखा नहीं छापता है (ताकि तार एक साथ चिपके हों)


9

मैं अपना जवाब स्वीकार नहीं करने जा रहा हूं, लेकिन मुझे लगा कि मैं आपको अंतिम छोटी गाड़ी छँटाई करने वाला निर्णायक दिखाऊंगा। इसके बारे में महान बात यह है कि मैंने अधिकांश बग की योजना भी नहीं बनाई है।

ब्रेनफ ***: 483 वर्ण, 11 कीड़े

,------------------------------------------------[>,---------]<[<]>[>[
->]<[<]>-]>[+++++++++.>]<[---------------------------<]>>[[>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-]>]>[[>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<-]>]>[[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<-]>]>[[>>>>>>>>>>>+<<<<<<<<<<<-]>]++++++++++.>[[>>>>>>
>>>>>>>>>>+<<<<<<<<<<<<<<<<-]>]>[>+++++++++++++++++++++++++++.]

इनपुट:

5 gtdx wjbfwiji. ljy Gfi hfssty 

आउटपुट:

bo_sre]arded)getBadcannot
adbo_scannotgetre]arded)

कीड़े की सूची :

इनपुट / प्रदर्शन बग:

  1. गैर-संवेदी संख्याएँ या संख्याएँ जो एक से अधिक अंक हैं, कार्यक्रम को तोड़ती हैं।

  2. निर्णायक व्यक्ति Z से पहले नहीं आता है। यह सिर्फ ASCII वर्ण मान को घटाता है।

  3. रिक्त स्थान ASCII ESC (27) वर्ण के रूप में दिखाई देते हैं।

  4. यदि इनपुट टैब द्वारा समाप्त नहीं किया जाता है, तो इनपुट निर्देशों के बाद प्रोग्राम जारी नहीं रहता है।

  5. कार्यक्रम को मैन्युअल रूप से समाप्त करना होगा। यह लगातार रुके हुए ESC चरित्र को प्रदर्शित करेगा।

  6. यदि इनपुट फ़ाइल ASCII एन्कोडेड नहीं है तो प्रोग्राम टूट जाएगा।

  7. कार्यक्रम सॉर्ट किए गए आउटपुट के पहले चरित्र को प्रदर्शित नहीं करता है।

छँटाई कीड़े:

मैंने छटपटाहट को बेहद भोलेपन से लागू किया।

  1. कार्यक्रम टूट जाता है जब शब्दों की संख्या 5 के बराबर नहीं होती है।

  2. यदि इनपुट के बाइट्स की संख्या 60 से अधिक हो जाती है, तो प्रोग्राम टूट जाता है।

  3. यदि वर्णमाला क्रम उदाहरण इनपुट के समान है, तो प्रोग्राम केवल सही ढंग से सॉर्ट कर सकता है।

  4. कार्यक्रम अतिरिक्त रिक्त स्थान जोड़ता है यदि कोई भी शब्द उदाहरण इनपुट से छोटा है और यदि कोई शब्द लंबा है तो वर्णों को अधिलेखित कर देता है।

मेरे पास बग-चार का अनुपात 0.0228 है । बेशक, जॉय ने मुझे हराया , लेकिन मुझे इस तथ्य पर गर्व है कि मैंने अपने कार्यक्रम में केवल 8 अलग-अलग पात्रों का इस्तेमाल किया, और मेरे कीड़े बहुत अधिक महत्वपूर्ण हैं।


2
re]arded? गंभीर लगता है।
जो जेड।

7

सी - 224 वर्ण, 2 बग, अपरिभाषित व्यवहार के 7 मामले

संपादित करें: यहां मेरा मूल्यांकन गलत है। एक अहस्ताक्षरित पूर्णांक को ओवरफ़्लो करना, वास्तव में, C में अच्छी तरह से परिभाषित है । इसके अलावा, हस्ताक्षरित और अहस्ताक्षरित के बीच तुलना भी अच्छी तरह से परिभाषित है, लेकिन संकलक चेतावनी देता है क्योंकि जिस तरह से परिभाषित किया गया है वह वैसा नहीं हो सकता जैसा आप सोचते हैं।

m(char**a,char**b){return strcmp(*a,*b);}main(int c,char*v[]){unsigned i,j
,o;o=atoi(v[1])+19;for(i=2;i<c;i++)for(j=0;j<=strlen(v[i])-1;j++)v[i][j]=(
tolower(v[i][j])-o)%26+97;qsort(v,c,sizeof(v),m);for(i=2;i<c;puts(v[i++]));}

उपयोग:

$ ./a.out 5 gtdx wjbfwiji ljy Gfi hfssty
bad
boys
cannot
get
rewarded

टूट - फूट:

m(char**a,char**b){return strcmp(*a,*b);}
main(int c,char*v[])
{
    unsigned i,j,o;

    // Undefined behavior if o is assigned negative value.
    o=atoi(v[1])+19;

    // Comparison between signed and unsigned integer.
    for(i=2;i<c;i++)
        // * Bug: if strlen(v[i]) is zero, subtraction will overflow
        //        unsigned value, and loop will have extra iterations.
        // * strlen is implicitly declared.
        //   Undefined behavior if sizeof(void*) != sizeof(int)
        for(j=0;j<=strlen(v[i])-1;j++)
            // tolower expects either an unsigned char casted to an int, or EOF.
            // Thus, undefined behavior if v[i][j] is non-ASCII.
            v[i][j]=(tolower(v[i][j])-o)%26+97;

    // * Bug: Program name and offset are included in the sort.
    //        "./a.out" and "5" both happen to be less than lowercase strings.
    // * qsort is implicitly declared.
    //   Undefined behavior if sizeof(void*) != sizeof(int)
    qsort(v,c,sizeof(v),m);

    // Comparison between signed and unsigned integer.
    for(i=2;i<c;puts(v[i++]));
}

बर्फ तोड़ने का अच्छा काम। मैं कहता हूं कि आपके पास एक 0.0402 बग-चार अनुपात है।
पीटर ओल्सन

@Peter क्या इसमें टिप्पणियां और व्हॉट्सएप / CRLF शामिल हैं?
मतीन उल्हाक

@ मंटू नं। 9/224 है।
पीटर ओल्सन

लेकिन यह भी पाठ के रूप में अच्छी तरह से उत्पादन नहीं करना चाहिए?
लोजैकर

5

जावास्क्रिप्ट: 403 वर्ण, 8 बग, अनुपात = 0.0199

हालांकि सी के रूप में बुरा नहीं है, जावास्क्रिप्ट में डिज़ाइन दोष हैं जो बग को जन्म दे सकते हैं, कम से कम जब एक नौसिखिए द्वारा उपयोग किया जाता है ( सभी कीड़े के साथ डेमो )।

function W(v){D.write("<input value="+v+">");return D.body.lastChild}function R(J){I=S.indexOf(C=i.value[J]);H=s.value;if(!I){o.value+=C}if(H>0){o.value+=S[I+H]}if(H<0){o.value+=S[I-26-H]}p.value=o.value.split(" ").sort().join(" ");setTimeout("R("+(J+1)+")",99)}D=document;S="ZYXWVUTSRQPONMLKJIHGFEDCBA";S+=S;S+=S.toLowerCase();i=W("input");s=W("shift");W("run type=button onclick=R(0)");o=W("");p=W("")

function W(v) {
    D.write('<input value=' + v + '>');
    return D.body.lastChild;
}

function R(J) {
    I = S.indexOf(C = i.value[J]);
    H = s.value;
    if(!I) o.value += C;
    if(H > 0) o.value += S[I + H];
    if(H < 0) o.value += S[I - 26 - H];
    p.value = o.value.split(' ').sort().join(' ');
    setTimeout('R(' + (J + 1) + ')', 99);
}

D = document;

S = 'ZYXWVUTSRQPONMLKJIHGFEDCBA';
S += S;
S += S.toLowerCase();

i = W('input');
s = W('shift');
W('run type=button onclick=R(0)');
o = W('');
p = W('');

  1. I + H स्ट्रिंग संघनन है, इसके अतिरिक्त नहीं: undefinedundefinedundefined...
  2. !Iवापसी के मूल्य की जांच करने का सही तरीका नहीं है .indexOf(), जो किसी मैच के लिए -1 देता है:boysVrewardedVV...
  3. गुम elseखोजशब्द:boys Vrewarded.V Vget...
  4. इनपुट के अंत में बंद नहीं होगा: ...cannotundefinedundefined...
  5. जीरो शिफ्ट को सही ढंग से हैंडल नहीं किया जाएगा (जैसे शब्दों को सॉर्ट करने के लिए केवल प्रोग्राम का उपयोग करने की कोशिश करना)
  6. क्या यह एक नकारात्मक बदलाव को हैंडल करेगा? सही ढंग से नहीं।
  7. बटन को डबल-क्लिक करने से दूसरी बार शुरू होने का कारण बनता है, जिससे गलत आउटपुट ( डेमो पिछले फिक्स्ड बग के साथ सबसे अधिक होता है )
    boys rebwoayrsd erde.w agredte dB.a dg ecta nBnaodt cannot:।
  8. बटन क्लिक करने पर आउटपुट टेक्स्ट बॉक्स खाली होना चाहिए

यह भी ध्यान दें कि यह IE के पुराने संस्करणों पर काम नहीं करेगा क्योंकि यह ECMAScript 3 के विस्तार का उपयोग करता है जिसे केवल ES5 में मानकीकृत किया गया था।


2
अपनी बग की सूची में IE समर्थन की कमी को शामिल नहीं करने पर अच्छा कॉल, मुझे इसे जोड़ने के लिए काफी लुभाया गया होगा, और मैंने लगभग इसका सुझाव दिया क्योंकि यह वेब विकास में एक बहुत ही सामान्य "बग" है, जब तक कि मैंने इस बारे में नहीं सोचा था कि नहीं। नेटस्केप 4 (या किसी भी मनमाने ब्राउज़र) के लिए समर्थन की कमी वास्तव में एक बग होगी।
पीटर ओल्सन

खैर, एक अप्रचलित ब्राउज़र के लिए समर्थन की कमी निश्चित रूप से किसी को चोट नहीं पहुंचाती है, लेकिन एक चालू के लिए समर्थन की कमी होगी। जब तक आप एक कूल्हे और प्रौद्योगिकी की सबसे नवीनतम पर सामान बनाने पूरी तरह से रेड वेब 2.0 कंपनी रहे हैं जब तक यह बाहर bleeds मैं कहना चाहता हूँ यह है एक बग। (उत्तर को फिर से पढ़ें, पुराने संस्करणों के लिए समर्थन की कमी होने की संभावना नहीं है, फिर भी XP मुख्यधारा की सहायता से लंबे समय से बाहर है और सभी समर्थित विंडोज संस्करणों में IE का एक सभ्य संस्करण है जिसे चलाने के लिए स्वत: अपडेट के माध्यम से भी आता है)।
जॉय

1

पायथन 3 184 अक्षर, 4 बग। बग अनुपात 0,0217

import string
d=input()
y=int(input())
print("".join(sorted(d.translate(str.maketrans("".join([chr(x)for x in range(96,123)]),"".join([chr(96+(x+y)%26)for x in range(26)]))).split())))

degolfed:

data = input() #string to convert
y = int(input()) #value to shift
print("".join(
    sorted(
        data.translate(
            str.maketrans(
                "".join([chr(x) for x in range(96,123)]),
                "".join([chr(96+(x+y)%26) for x in range(26)]))
            ).split()
        )))

उदाहरण इनपुट: gtdx wjbfwiji ljy Gfi hfssty
उदाहरण इनपुट: -5
उदाहरण आउटपुट: G canxrbmmnsfdsqdv`qcdc।

ज्ञात कीड़े:

  1. ऊपरी-मामले वर्णों को परिवर्तित नहीं करता है
  2. इसमें `और इसमें से / में कनवर्ट करता है।
  3. गैर-असिसी वर्णों को परिवर्तित नहीं करता (åäö)
  4. रिक्त स्थान नहीं छापता है।
  5. संभाल सकते हैं, लेकिन नजरअंदाज करते हैं, विराम चिह्न - मैं इसे गिनने के लिए नहीं चुनता, लेकिन अगर मैं करता हूं तो मेरा अनुपात 0.027 हो जाता है)

मैं जानबूझकर बग के साथ आने में बहुत अच्छा नहीं हूँ।

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