เขียนรหัส Buggy [ปิด]


17

ตอนนี้เป็นเวลาที่จะแสดงความสามารถของคุณในการเขียนโค้ดที่ไม่ดี ฉันลองใช้ตัวต่อเขียนโปรแกรมรูปแบบใหม่ที่ใกล้เคียงที่สุดกับการประกวด C ความแตกต่างที่สำคัญคือมันไม่ได้เลวร้ายนัก: มันเป็นแค่ความสนุกที่สะอาด เป้าหมายของจิ๊กซอว์คือการแพ็คข้อบกพร่องให้มากที่สุดเท่าที่จะทำได้ในโปรแกรม ผู้ชนะการประกวดนี้คือผู้ที่เขียนโปรแกรมที่มีข้อบกพร่องมากที่สุดต่อตัวละคร

เพื่อหลีกเลี่ยงความคิดเห็นจำนวนมากที่ขอความกระจ่างฉันควรกำหนดตอนนี้สิ่งที่ฉันคิดว่าเป็นข้อบกพร่องที่มีคุณสมบัติ

ครั้งแรกข้อผิดพลาดที่ไม่ได้เป็นข้อผิดพลาด หากเป็นปัญหาที่ล่ามสามารถตรวจพบว่าเป็นข้อผิดพลาด (เช่น delimeters ที่ไม่ตรงกัน, ไวยากรณ์ที่มีรูปแบบไม่ดี, acessing คุณสมบัติของวัตถุเป็นโมฆะ ฯลฯ ) หรือถ้ามันป้องกันโปรแกรมจากการดำเนินการหรือดำเนินการต่อไป แมลง. มิฉะนั้นคุณสามารถพิมพ์ตัวอักษรสี่ตัวและล่ามสามารถแสดงรายการข้อผิดพลาดทางไวยากรณ์ได้แปดข้อและคุณสามารถอ้างสิทธิ์อัตราส่วนตัวผิดพลาดที่ 2

ประการที่สองข้อผิดพลาดจะต้องไม่ผิดอย่างเห็นได้ชัดและข้อผิดพลาดที่ไม่ได้เป็นไข่อีสเตอร์ แน่นอนว่านี่เป็นเกณฑ์ส่วนตัว แต่ฉันคิดว่าจำเป็นต่อการแข่งขันประเภทนี้ ซึ่งหมายความว่าคุณไม่สามารถมีรหัสตามเงื่อนไขที่ mangles รหัสโดยเฉพาะในรูปแบบที่ชัดเจน (อ่าน: ใช้ภาษาพิทัวริงเพราะไม่มีใครรู้ถึงความแตกต่าง)

ประการที่สามข้อผิดพลาดจะต้องเป็นที่น่าเชื่อถือ นี่เป็นอัตนัยเช่นเดียวกับข้างต้น แต่ข้อผิดพลาดจะต้องดูเหมือนว่ามันอาจถูกเขียนขึ้นโดยคนที่พิถีพิถันน้อยกว่าหรืออาจงมงายหรือคนที่ทำผิดพลาด ซึ่งรวมถึงตัวอย่างเช่นข้อผิดพลาดหรือไวยากรณ์ที่ไม่ถูกต้องที่ถูกต้องและมีลักษณะที่ถูกต้อง แต่ทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์ (พูดโดยใช้วงเล็บเหลี่ยมแทนวงเล็บ)

ข้อผิดพลาดอาจทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์ใด ๆ กับโปรแกรมรวมถึง แต่ไม่ จำกัด เฉพาะผลลัพธ์ที่ไม่พึงประสงค์สำหรับบางกรณีมีพฤติกรรมที่แตกต่างกันไปตามสิ่งที่ดูเหมือนไม่เกี่ยวข้อง (เช่นผลลัพธ์จะแสดงแตกต่างกันขึ้นอยู่กับว่า ด้วยจำนวนวินาทีที่คี่หรือคู่) การรั่วไหลของหน่วยความจำการสูญเสียข้อมูลและอื่น ๆ

ตัวอย่างปัญหา:

สร้างโปรแกรมที่แสดงอักขระ ASCII ทั้งหมดตามลำดับจากน้อยไปหามากของค่าตัวเลข

ตัวอย่างคำตอบ:

Brainf ***, 5 chars, 1 bug, 0.2 bug-char ratio

+[+.]

ข้อผิดพลาด: ไม่แสดงอักขระ ASCII สำหรับ 1. .+[.+]สามารถได้รับการแก้ไขโดยการเปลี่ยนไป

ตกลงฉันคิดว่าคุณควรได้รับมันเป็นส่วนใหญ่แล้วนี่คือปริศนาของคุณ:

ถอดรหัสเลขซีซาร์และเรียงคำตามลำดับตัวอักษร

รหัสซีซาร์ถูกสร้างขึ้นโดยการใช้ชุดของตัวอักษรและขยับพวกเขา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 เพราะงานคือการถอดรหัสตัวเลข
Nabb

อ่าฉันเข้าใจแล้ว @Nabb ขอบคุณ!
คุณ

เราต้องสนับสนุนทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็กหรือไม่?
Joey Adams

1
@Peter: ฉันได้เปิดการสนทนาใหม่เกี่ยวกับเมตาที่เกี่ยวข้องกับคำถามนี้ (ในหมู่อื่น ๆ ) บางทีคุณอาจต้องการแสดงความคิดเห็น
dmckee

คำตอบ:


14

Ruby, 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นี่จะไม่แยกกับบรรทัดใหม่ (ดังนั้นคำสุดท้ายจะขึ้นบรรทัดใหม่)

  4. /[^.,:;?!]/: regex นี้ไม่รวมเครื่องหมายวรรคตอน แต่ไม่ใช่ตัวอักษรตัวพิมพ์ใหญ่ตัวเลขหรือขีดล่างและขึ้นบรรทัดใหม่

  5. 97: สิ่งอื่นใดนอกจากเครื่องหมายวรรคตอนหรือตัวอักษรตัวเล็กจะได้รับการอ่านไม่ออก

  6. sort_by{|a|a[0]}: เห็นได้ชัดว่าโปรแกรมเมอร์ไม่รู้จักsortและใช้วิธีการที่ไร้สาระแทนซึ่งไม่เรียงลำดับคำที่ขึ้นต้นด้วยตัวอักษรเดียวกัน

  7. print: ไม่เหมือนกันputsไม่พิมพ์บรรทัดใหม่ระหว่างแต่ละอาร์กิวเมนต์ (เพื่อให้สตริงออกมาติดกัน)


9

ฉันจะไม่ยอมรับคำตอบของฉันเอง แต่ฉันคิดว่าฉันจะแสดงให้คุณเห็นตัวถอดรหัสการเรียงลำดับแบบบั๊กกี้สุดยอด สิ่งที่ยอดเยี่ยมเกี่ยวกับมันคือฉันไม่ได้วางแผนแมลงด้วยซ้ำไป

Brainf ***: 483 ตัวอักษร 11 ข้อบกพร่อง

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

การป้อนข้อมูล:

5 gtdx wjbfwiji. ljy Gfi hfssty 

เอาท์พุท:

bo_sre]arded)getBadcannot
adbo_scannotgetre]arded)

รายการข้อบกพร่อง :

ข้อบกพร่องอินพุต / ดิสเพลย์:

  1. ตัวเลขหรือตัวเลขที่ไม่ใช่เชิงตัวเลขที่มากกว่าหนึ่งดิจิตแบ่งโปรแกรม

  2. ตัวถอดรหัสไม่ได้ทำให้ Z มาก่อน A มันแค่ลบค่าอักขระ ASCII

  3. ช่องว่างปรากฏเป็นอักขระ ASCII ESC (27)

  4. หากแท็บอินพุตไม่ถูกยกเลิกโปรแกรมจะไม่ดำเนินการต่อหลังจากคำสั่งอินพุต

  5. โปรแกรมจะต้องถูกยกเลิกด้วยตนเอง มันจะแสดงตัวละคร ESC อย่างต่อเนื่องจนกว่าจะหยุด

  6. โปรแกรมจะหยุดทำงานหากไฟล์อินพุตนั้นไม่ได้เข้ารหัส ASCII

  7. โปรแกรมไม่แสดงอักขระตัวแรกของเอาต์พุตที่เรียงลำดับ

การเรียงลำดับข้อบกพร่อง:

ฉันใช้การเรียงลำดับอย่างไร้เดียงสาอย่างยิ่ง

  1. โปรแกรมหยุดพักเมื่อจำนวนคำไม่เท่ากับ 5

  2. โปรแกรมหยุดทำงานหากจำนวนไบต์ของอินพุตเกินกว่า 60

  3. โปรแกรมสามารถเรียงลำดับได้อย่างถูกต้องหากลำดับตัวอักษรเหมือนกันกับอินพุตตัวอย่าง

  4. โปรแกรมจะเพิ่มช่องว่างเพิ่มเติมหากคำใดคำหนึ่งมีขนาดเล็กกว่าตัวอย่างอินพุตและเขียนทับอักขระหากคำใดคำหนึ่งยาวกว่า

ฉันมีอัตราส่วนข้อผิดพลาดของถ่าน0.0228 เป็นที่ยอมรับJoey เอาชนะฉันแต่ฉันภูมิใจในความจริงที่ว่าฉันใช้เพียง 8 ตัวละครที่แตกต่างกันในโปรแกรมของฉันและข้อบกพร่องของฉันมีความสำคัญยิ่งกว่า


2
re]arded? ฟังดูจริงจัง
Joe Z.

7

C - 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 Olson

@Peter นั่นรวมถึงความคิดเห็นและช่องว่าง / CRLFs หรือไม่?
Mateen Ulhaq

@muntoo ไม่ใช่มันคือ 9/224
Peter Olson

แต่ไม่ควรส่งออกข้อความที่ไม่เรียงลำดับเช่นกัน
Lowjacker

5

JavaScript: 403 ตัวอักษร, 8 ข้อบกพร่อง, อัตราส่วน = 0.0199

แม้ว่าจะไม่ได้ไม่ดีเท่าที่ C, JavaScript จะมีข้อบกพร่องการออกแบบที่สามารถนำไปสู่ข้อบกพร่องอย่างน้อยเมื่อใช้โดยเป็นสามเณร ( สาธิตมีข้อบกพร่องทั้งหมดไม่เจาะจง )

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 ในรายการข้อผิดพลาดของคุณฉันจะถูกล่อลวงให้เพิ่มมันและฉันเกือบจะแนะนำเพราะมันเป็น "บั๊ก" ทั่วไปในการพัฒนาเว็บจนกว่าฉันจะคิดหรือไม่ การขาดการสนับสนุน Netscape 4 (หรือเบราว์เซอร์ใดก็ได้) จะเป็นข้อผิดพลาดจริงๆ
Peter Olson

ดีขาดการสนับสนุนสำหรับล้าสมัยเบราว์เซอร์อย่างแน่นอนเจ็บไม่มีใคร แต่ขาดการสนับสนุนสำหรับปัจจุบันหนึ่งจะ นอกจากคุณจะเป็น บริษัท ที่ทันสมัยและเต็มเปี่ยมด้วย Web 2.0 ที่สร้างสิ่งต่าง ๆ ที่ล้ำสมัยของเทคโนโลยีจนกว่ามันจะพร่าออกมาฉันจะบอกว่ามันเป็นบั๊ก (อ่านคำตอบอีกครั้งการขาดการสนับสนุนสำหรับเวอร์ชั่นเก่าน่าจะไม่มีข้อผิดพลาดดังนั้น XP จึงไม่ได้รับการสนับสนุนหลักและ Windows รุ่นที่รองรับทั้งหมดมี IE เวอร์ชันที่เหมาะสมในการทำงานซึ่งแม้จะมาจากการอัปเดตอัตโนมัติ)
Joey

1

Python3 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. ห้ามแปลงอักขระที่ไม่ใช่ ASCII (åäö)
  4. ห้ามพิมพ์ช่องว่าง
  5. สามารถจัดการ แต่ไม่สนใจเครื่องหมายวรรคตอน - ฉันเลือกที่จะไม่นับ แต่ถ้าฉันทำอัตราส่วนของฉันไปที่ 0.027)

ฉันไม่ค่อยเก่งในการหาข้อบกพร่อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.