โบว์ลิ่งที่เก่าแก่และไม่เหมือนใคร


80

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

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

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

เช่นนี้เป็น , ที่ยาวที่สุดไม่สั้นชนะรหัส (วัดโดยนับไบต์) คะแนนสูงสุดที่เป็นไปได้ในทางทฤษฎีคือ 256 เนื่องจากมี 256 ไบต์ที่แตกต่างกัน ในกรณีที่เสมอกันคำตอบแรกที่ได้คะแนนสูงสุดจะเป็นฝ่ายชนะ


ต่อไปนี้เป็นคำจำกัดความที่สมบูรณ์ของโปรแกรมที่เก่าแก่คัดลอกมาจากลิงค์ด้านบน:

ลองกำหนดโปรแกรมที่เก่าแก่เป็นโปรแกรมที่ไม่มีข้อผิดพลาดใด ๆ ของตัวเอง แต่จะผิดพลาดถ้าคุณแก้ไขได้โดยการเอาย่อยที่ต่อเนื่องกันใด ๆ ของตัวอักษร N, 1 <= N < program lengthที่

ตัวอย่างเช่นโปรแกรมสามตัวอักษร Python 2

`8`

เป็นโปรแกรมที่เก่าแก่เพราะโปรแกรมทั้งหมดที่เกิดจากการลบสตริงย่อยของความยาว 1 ทำให้เกิดข้อผิดพลาด (ข้อผิดพลาดทางไวยากรณ์ในความเป็นจริง แต่ข้อผิดพลาดประเภทใดจะทำ):

8`
``
`8

และโปรแกรมทั้งหมดที่เป็นผลมาจากการลบสตริงย่อยของความยาว 2 ทำให้เกิดข้อผิดพลาด:

`
`

ตัวอย่างเช่นหาก`8เป็นโปรแกรมที่`8`ไม่มีข้อผิดพลาดก็จะไม่ได้รับความบริสุทธิ์เนื่องจากผลลัพธ์ทั้งหมดของการลบสตริงย่อยจะต้องเกิดข้อผิดพลาด


37
ขอให้คุณจัดการการสร้างรหัสโบว์ลิงที่ท้าทาย!
ETHproductions

หากโปรแกรมย่อยทำงานตลอดไป แต่ไม่มีข้อผิดพลาดจะทำให้คำตอบไม่ถูกต้องหรือไม่?
dylnan

1
@ dylnan "ข้อผิดพลาดถูกกำหนดเป็น [... ] ยุติ [... ] หลังจากเวลาที่จำกัด "
user202729

3
@Baldrickk ไม่มันไม่ได้รับอนุญาตสำหรับความท้าทายนี้ (หากคุณอ้างถึงตัวอย่างในคำถามมันเป็นการแสดงให้เห็นว่าโปรแกรมดั้งเดิมนั้นคืออะไร แต่ไม่ตรงตามข้อกำหนดเพิ่มเติมของไบต์ที่ไม่ซ้ำกัน)
Aidan F. Pierce

1
เราสามารถนับพฤติกรรมที่ไม่ได้กำหนดเป็นข้อผิดพลาดได้หรือไม่หากในทางปฏิบัติมักจะส่งผลให้เกิดข้อผิดพลาดหรือไม่? ฉันกำลังคิดถึงสิ่งที่คล้ายกันJMP <address outside of the program's memory>ในการชุมนุม ตามหลักการในคอมพิวเตอร์จริงมันอาจวนซ้ำอย่างไม่สิ้นสุดหรือออกโดยมีข้อผิดพลาดที่ไม่เป็นศูนย์ แต่มักจะผิดพลาดอย่างงดงาม
Chris

คำตอบ:


20

เยลลี่ , 253 254 256 ไบต์

M“¢£¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#%&'()*+,-./0145689:;<=>?@ABCDEFGHIJKNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż”L»«’Ɗạ‘}237$¤¡

ลองออนไลน์! หรือยืนยันมัน!

ปรากฎว่าภาษาการเล่นกอล์ฟสามารถโบย ...

  • 1 ไบต์โดยการทำงานใน ตอนนี้«»ไม่ได้ใช้เท่านั้น
  • 2 «»ไบต์ด้วยกับ ตอนนี้มีคะแนนที่ดีที่สุด!

อย่างไร?

คุณสมบัติที่สำคัญของเจลลี่ที่ทำให้สิ่งนี้เป็นไปได้คือตัวละครเปิดและปิดสำหรับตัวอักษรสตริงจะไม่เหมือนกันในเกือบทุกภาษา

โครงสร้างของโปรแกรมมีดังนี้:

M <239 character long string> L»«’Ɗạ‘}237$¤¡

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

เพื่อป้องกันไม่ให้ดำเนินMการ0ในโปรแกรมเต็มเราใช้¡ด่วนซึ่งใช้Mจำนวนครั้งที่กำหนดโดยผลของการเชื่อมโยงก่อนหน้ามันทันที <239 character long string> L»«’Ɗạ‘}237$¤ในกรณีนี้การเชื่อมโยงที่เป็น

Lใช้ความยาวของสตริงนี้ (239) และ»«’Ɗลดลงถึง 238 »«ส่วนนี้ไม่ได้ทำอะไรเลย แต่Ɗ(สามลิงค์สุดท้ายเป็น monad) ทำให้มันเกิดขึ้นหากพวกเขาถูกลบข้อผิดพลาดจะเกิดขึ้น จากนั้นนำความแตกต่างที่แน่นอนระหว่างผลลัพธ์ของ»«’Ɗและ monad ที่‘}237$ใช้กับสตริง เพิ่มขึ้นและเป็น monad แต่}ผลัดกันนี้ในคู่และนำไปใช้กับมันเป็นข้อโต้แย้งที่ถูกต้องยอม237 238ดังนั้นอัตราผลตอบแทน0ในโปรแกรมเต็มรูปแบบ

¤ลิงก์กลับไปที่ตัวอักษรสตริงสร้าง nilad ผลลัพธ์ของสิ่งนี้คือ0ดังนั้นจึงMไม่ถูกใช้เลยเพื่อป้องกันข้อผิดพลาดใด ๆ

โปรแกรมย่อยที่เป็นไปได้:

  • หากส่วนใดส่วนหนึ่งของสตริงถูกลบออก<string>..¤จะไม่ใช่ศูนย์และMถูกใช้กับ0ทำให้เกิดข้อผิดพลาด
  • ถ้าส่วนหนึ่งของการใด ๆL»«’Ɗạ‘}237$จะถูกลบออกอย่างใดอย่างหนึ่งMจะได้รับนำไปใช้หรือจะมีการดำเนินงานระหว่างสตริงและตัวเลขผลในการ0TypeError
  • ถ้าใด ๆ ของ¤¡ถูกนำออกได้รับนำไปใช้กับM0
  • ถ้าตัวอักษรตัวปิดสตริงและทั้งสอง’‘ได้รับการถอดออกและไม่ได้ทุกอย่างหลังจากMผลัดกันเป็นสตริงเพื่อจะทำหน้าที่ในการ M0
    • หากตัวละครปิดสตริงและได้รับการลบและไม่ได้ทุกอย่างระหว่างและกลายเป็นรายการของจำนวนเต็ม
  • หากMลบอย่างเดียวจะมีการเชื่อมโยงEOFErrorเนื่องจาก¡คาดว่าลิงก์ก่อนหน้า nilad
  • หากM“และจำนวนตัวอักษรใด ๆ หลังจากที่ถูกลบออกจะมีEOFErrorเพราะการ¤ค้นหา nilad นำหน้า แต่ไม่พบ 238ไม่นับเพราะมันเป็นส่วนหนึ่งของ monad

สวยมากครอบคลุมทุกอย่าง

ก่อนหน้านี้ฉันไม่ได้ใช้«»‘เพราะสองรายการหลังไม่สามารถรวมอยู่ในสตริงได้เพราะพวกเขาจับคู่อักขระกับสิ่งอื่นนอกเหนือจากสตริง «ไม่สามารถอยู่ใน“”สตริงได้ แต่ฉันไม่รู้ว่าทำไม


31

Haskell , 39 45 50 52 60 ไบต์

main=do{(\𤶸	陸 ⵙߜ 新->pure fst)LT
EQ[]3
2$1}

ตัวระบุmainต้องมีชนิดIO aสำหรับบางชนิด a เมื่อโปรแกรมถูกประมวลผลการคำนวณmainจะถูกดำเนินการและผลลัพธ์จะถูกยกเลิก IO ((a,b)->a)ในกรณีนี้ประเภทของมันคือ

ผลที่ได้คือการประยุกต์ใช้ฟังก์ชั่นฟังก์ชั่น(λ a b c d e f → return fst)คงที่หกข้อโต้แย้งกลับมาฟังก์ชั่น fst (ซึ่งจะให้องค์ประกอบแรกของ 2-tuple) ฉีดเข้าไปใน IO monad หกอาร์กิวเมนต์LT(enum น้อยกว่า) EQ(enum เพื่อความเท่าเทียมกัน) รายการที่ว่างเปล่า[], 3, และ21

สิ่งที่จะเป็นช่องว่างจะถูกแทนที่ด้วยตัวละครที่ไม่ซ้ำกันซึ่งนับเป็นช่องว่าง: แท็บ, พื้นที่ที่ไม่ทำลาย, ฟีดฟอร์ม, แท็บแนวตั้ง, OGHAM SPACE MARK, พื้นที่ปกติ, ขึ้นบรรทัดใหม่และผลตอบแทนการขนส่ง หากสิ่งเหล่านี้หายไปจะมีความไม่ตรงกันในจำนวนอาร์กิวเมนต์ ชื่อพารามิเตอร์ถูกเลือกเป็นอักขระ UTF-8 สามหรือสี่ไบต์𤶸陸ⵙ商ߜ新อย่างระมัดระวังการเลือกอักขระที่ไม่มีผลลัพธ์เป็นไบต์ซ้ำ

ขอบคุณ @BMO สำหรับการมีส่วนร่วมอันมีค่าของเขา

การถ่ายโอนข้อมูล Hex:

00000000: 6d61 696e 3d64 6f7b 285c f0a4 b6b8 09ef  main=do{(\......
00000010: a793 c2a0 e2b5 990c e595 860b df9c e19a  ................
00000020: 80e6 96b0 2d3e 7075 7265 2066 7374 294c  ....->pure fst)L
00000030: 540a 4551 5b5d 330d 3224 317d            T.EQ[]3.2$1}

ลองออนไลน์!


หืม'\109999'ดูเหมือนจะใช้ได้อย่างน้อยใน GHC 8.2.2 '\10999a'สร้างข้อผิดพลาดของคำ
chepner

@chepner: ฉันเพิ่งทดสอบกับ GHC 8.2.2 และ𚶯สร้างข้อผิดพลาดด้วยเช่นกัน
ბიმო

2
@chepner: Char ใหญ่ที่สุดคือคือmaxBound :: Char '\1114111'หมายเหตุ: ตัวเลขทศนิยมโดยค่าเริ่มต้นดังนั้นหากคุณต้องการฐานสิบหกคุณต้องใส่xหลังเช่น\ '\x10999a'
nimi

@nimi Aaaand ฉันคิดว่าเราได้กำหนดความถี่ในการใช้ Unicode escapes จริง ๆ แล้ว :) การใช้แบบฟอร์มที่ถูกต้องสำหรับค่าเลขฐานสิบหก\x10ffffทำงานได้ดีและ\x110000ให้ข้อผิดพลาดนอกช่วงที่เราคาดไว้
chepner

24

Python 2 ,  20 21 33 39 45  50 ไบต์

ตอนนี้เป็นความร่วมมืออย่างมาก!

+2 ขอบคุณ Aidan F. Pierce (แทนที่sorted({0})ด้วยmap(long,{0}))

+8 ขอบคุณ dylnan (การใช้\และขึ้นบรรทัดใหม่เพื่อแทนที่ space คำแนะนำเพื่อย้ายจาก0ไปยังนิพจน์ทางคณิตศาสตร์การแทนที่-1ด้วยการ-Trueใช้เลขฐานสิบหก)

+11 ขอบคุณ Angs ( 4*23+~91-> ~4836+9*1075/2จากนั้นภายหลัง~197836254+0xbCABdDF-> ~875+0xDEAdFBCbc%1439/2*6)


if\
map(long,{~875+0xDEAdFBCbc%1439/2*6})[-True]:q

ลองออนไลน์! หรือดูชุดการยืนยัน

0xDEAdFBCbc59775106236เป็นเลขฐานสิบหกและประเมินผลการ
~เป็นบิตฉลาดสมบูรณ์เพื่อประเมิน~875 เป็นตัวดำเนินการแบบโมดูโลดังนั้นจึงประเมินว่า เป็นส่วนจำนวนเต็มเพื่อประเมิน เป็นคูณเพื่อประเมิน คือการเพิ่มเพื่อประเมิน ... ไม่มีรุ่นปล้นยังประเมิน-876
%0xDEAdFBCbc%1439293
/0xDEAdFBCbc%1439/2146
*xDEAdFBCbc%1439/2*6876
+~875+xDEAdFBCbc%1439/2*60
0

{0}เป็นsetองค์ประกอบที่มีองค์ประกอบเดียว, 0.

โทรsortedด้วยเป็นอาร์กิวเมนต์ผลตอบแทนถัวเฉลี่ยรายการซึ่งอาจจะจัดทำดัชนีลงไปด้วยset[...]

โดยไม่ต้องsortedโค้ด({0})ก็จะให้ผลผลิตsetและนี้ไม่สามารถจัดทำดัชนีลงไปในแบบเดียวกันที่จะยกif({0})[-True]:qTypeError

การจัดทำดัชนีใน Python นั้นเป็นแบบ 0 และอนุญาตการทำดัชนีเชิงลบจากด้านหลังและTrueเทียบเท่ากับ1ดังนั้นจึงsorted({0})[-True]ค้นหาองค์ประกอบ0ขณะที่sorted({0})[True]จะเพิ่มIndexErrorตามที่จะsorted({})[-True]และsorted({0})[]เป็นไวยากรณ์ที่ไม่ถูกต้อง

สิ่ง0ที่ถูกค้นพบนั้นเป็นเท็จดังนั้นร่างกายของif, qไม่เคยถูกประหารชีวิตอย่างไรก็ตามถ้ามันเป็นเช่นนั้นมันจะเพิ่ม a NameErrorเนื่องจากqยังไม่ได้กำหนด

เนื่องจากรายการที่ไม่ว่างเปล่าเป็นความจริงเราจึงไม่สามารถตัดเป็นรายการif[-1]:qใดรายการหนึ่งได้

ดูชุดการยืนยันเพื่อดู: ยืนยันไบต์ที่ไม่ซ้ำกัน; ข้อผิดพลาดทั้งหมด; และความสำเร็จของรหัสนั้นเอง


17

C (tcc) , x86_64, 29 31 33 39 40 ไบต์

main[]={(23*8),-~0xABEDFCfebdc%95674+1};

ผลตอบแทน0 ขอบคุณ @feersum สำหรับการแนะนำเลขฐานสิบหกตัวพิมพ์ใหญ่

ลองออนไลน์!

มันทำงานอย่างไร

การมอบหมายเขียนสอง ints ( 184และ49664 ) ไปยังสถานที่ความทรงจำของหลัก ด้วย ints 32 บิตและลำดับไบต์น้อย endian b8 00 00 00 00 c2 00 00ไบต์ที่แน่นอน

เนื่องจาก tcc ไม่ได้ประกาศอาร์เรย์ที่กำหนดไว้เป็น. data (คอมไพเลอร์ส่วนใหญ่จะ) ดังนั้นการกระโดดไปยังหลักจะเรียกใช้งานรหัสเครื่องที่ชี้ไป

  • b8 00 00 00 00( mov eax, imm32) เก็บ int 0ไว้ใน eax register

  • c2 00 00( ret imm16) ปรากฏ0ไบต์พิเศษจากสแต็กและส่งคืน (ค่าใน eax register คือค่าส่งคืนของฟังก์ชัน)


15

> <> , 122 ไบต์

e"~l=?!z6-d0p}xwutsrqonmkjihgfcba`_]\[>ZYXWVUTSRQPONMLKJIHGFEDCB@<:98754321/,+*)('&%$# .	|{Ay

ลองออนไลน์!

ไม่ทำอะไรเลย ขึ้นอยู่กับรูปแบบเดียวกับคำตอบPristine Worldของฉัน

ก่อนอื่นเราตรวจสอบว่าความยาวของรหัสคือ 122 และข้อผิดพลาดหากไม่เป็นเช่นนั้น ><>โปรแกรมไม่สามารถสิ้นสุดได้หากไม่ใช้;คำสั่ง แต่ถ้าคำสั่งนี้อยู่ในโปรแกรมเราสามารถลบทุกอย่างออกก่อนที่จะทำให้โปรแกรมสิ้นสุดทันที เพื่อต่อสู้กับสิ่งนี้เราใช้pคำสั่งเพื่อวาง a ;ในโค้ดระหว่างรันไทม์ ในการทำเช่นนี้เราจะลบ 6 จากAและวางหลังจากpนั้น

ฉันจะเพิ่มค่าอื่น ๆ ส่วนใหญ่ข้างต้น 127 เมื่อฉันหาค่าสองไบต์ที่ถูกต้อง ค่าที่หายไป 5 ค่าคือv^;และสองบรรทัดใหม่

จากโปรแกรมย่อย 7502 โปรแกรม 7417 มีข้อผิดพลาดจากคำแนะนำที่ไม่ถูกต้อง 72 จากหน่วยความจำอันเดอร์โฟลว์และ 13 จากหน่วยความจำไม่เพียงพอ


13

JavaScript ขนาด 42 ไบต์

if([0XacdCADE*Proxy.length]!=362517948)田
  • การถอดi, fหรือifจะทำให้เกิดSyntaxError: missing ; before statement;
  • การลบจะทำให้เกิดSyntaxError: expected expression, got end of script;
  • การลบ 1 หรือ 2 ไบต์จากจะทำให้เกิดInvalid or unexpected token;
  • แก้ไขนิพจน์บูลีนจะทำให้เกิดข้อผิดพลาดทางไวยากรณ์หรือข้อผิดพลาดการอ้างอิงบน

00000000: 6966 285b 3058 6163 6443 4144 452a 5072  if([0XacdCADE*Pr
00000010: 6f78 792e 6c65 6e67 7468 5d21 3d33 3632  oxy.length]!=362
00000020: 3531 3739 3438 29e7 94b0                 517948)...


8

Brain-Flakขนาด 2 ไบต์

<>

ลองออนไลน์!

อีกทางเลือกหนึ่ง[], หรือ{} ()การลบเครื่องหมายวงเล็บออกทำให้วงเล็บอื่นไม่ตรงกัน

พิสูจน์ว่านี่เป็นทางออกที่ดีที่สุด:

โปรแกรม Brain-Flak ทำมาจาก nilads (วงเล็บหนึ่งคู่ของตัวเอง) หรือ monads (วงเล็บหนึ่งคู่ที่มี 1 nilads หรือมากกว่า) Monad ไม่สามารถอยู่ในโปรแกรมที่เก่าแก่ได้ในขณะที่คุณสามารถลบ nilads อย่างน้อยหนึ่งรายการ ในทำนองเดียวกันคุณไม่สามารถมี nilad ได้มากกว่าหนึ่งรายการในโปรแกรมเนื่องจากคุณสามารถลบออกได้หนึ่งรายการโดยไม่ทำให้โปรแกรมแตก

เช่นนี้อาจเป็นภาษาที่เหมาะสมที่สุดสำหรับการเขียนโปรแกรมดั้งเดิมหรือไม่ซ้ำกัน


6

Ada, 110 ไบต์ (latin1)

อาจเป็นคำตอบที่ดีที่สุดที่คุณจะได้รับจากการใช้ภาษาใด ๆ ในอุตสาหกรรม?

hexdump:

0000000: 7061 636b 4167 4520 6266 686a 6c6d 6f71  packAgE bfhjlmoq
0000010: 7274 7576 7778 797a e0e1 e2e3 e4e5 e6e7  rtuvwxyz........
0000020: e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f8  ................
0000030: f9fa fbfc fdfe 0d69 730b 656e 6409 4246  .......is.end.BF
0000040: 484a 4c4d 4f51 5254 5556 5758 595a c0c1  HJLMOQRTUVWXYZ..
0000050: c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1  ................
0000060: d2d3 d4d5 d6d8 d9da dbdc ddde 3b0a       ............;.

รวบรวมโดยการบันทึกเป็นไฟล์ใด ๆ ที่ลงท้ายด้วย.adsและทำงานgcc -c <filename>อยู่ สร้างไฟล์ปฏิบัติการที่ไม่ทำอะไรเลย (ไม่สามารถให้ลิงค์ TIO ได้เนื่องจาก TIO ใส่โค้ดใน.adbไฟล์และgccโดยค่าเริ่มต้นจะพยายามหาข้อมูลจำเพาะที่ตรงกันสำหรับพวกเขา)

โดยทั่วไปจะประกาศแพ็คเกจที่มีชื่อที่ใช้อักษรตัวใหญ่ / ตัวพิมพ์เล็กละติน 1 ต้องการอักขระช่องว่างที่แตกต่างกันสำหรับแต่ละช่องว่างดังนั้นจึงใช้ช่องว่าง, CR, LF และ TAB

มันมีลักษณะเป็นเวอร์ชันอย่างไร:

packAgE bfhjlmoqrtuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ^Mis^Kend^IBFHJLMOQRTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ;

มันทำงานอย่างไร

ใน Ada ข้อมูลจำเพาะยังสามารถรวบรวมได้ Spec มีลักษณะเหมือนไฟล์ส่วนหัวของ c แต่มีคุณสมบัติครบถ้วนมากกว่าและสามารถรวบรวมรหัสพื้นฐานบางอย่างได้ เพื่อให้ถูกต้องสเปคใด ๆ จะต้องมีรูปแบบ: package <NAME> is ... end <NAME>;ด้วยการ<NAME>จับคู่ สิ่งที่ดีเกี่ยวกับ Ada คือมันไม่คำนึงถึงขนาดตัวพิมพ์ทั้งหมด ดังนั้นตราบใดที่ชื่อของคุณมีรูปแบบตัวพิมพ์ใหญ่และตัวพิมพ์เล็กคุณจะต้องไปไหนดี!

ส่วนที่ยากคือการรับหน่วยที่คอมไพล์ได้ โดยปกติแล้วโปรแกรม Ada จะมีโพรซีเดอร์หรือฟังก์ชั่น 'หลัก' อยู่ด้านนอกของแพ็คเกจใด ๆ ที่จะกลายเป็นไฟล์เรียกใช้ขั้นสุดท้าย น่าเสียดายที่ขั้นตอนต้องการbeginคำหลักซึ่งนำไปสู่การes มากเกินไป(รู้จักกันเพียง 2 กรณี) ในขณะที่ฟังก์ชั่นต้องการreturnคำหลักซึ่งนำไปสู่การns มากเกินไป ดังนั้นฉันต้องรวบรวมแพ็คเกจ


4

C, 8 ไบต์

main(){}

ไม่ทำอะไรเลย

ลองออนไลน์!


1
บางทีฉันอาจไม่เข้าใจความท้าทาย แต่เกี่ยวกับmain(){short x;}
เจอรี่เจเรเมียห์

@JerryJeremiah: ไม่มีคอมไพล์ที่มีเพียงmain(){short;} warning: useless type name in empty declarationผมคิดว่า C99 และ C ++ ต้องมีชนิดกลับอย่างชัดเจนดังนั้นint main(หรืออาจunsigned main) จะทำงาน แต่ไม่ได้อยู่กับ GCC -std=c11ซึ่งแม้จะมีการเตือน
Peter Cordes

@JerryJeremiah กreturn 0;อาจจะเป็นไปได้ด้วย C89 ที่ไม่มีนัยในตอนท้ายของreturn 0 mainการออกด้วยสถานะที่ไม่เป็นศูนย์นั้นถือได้ว่าเป็นความล้มเหลวตามคำตอบอื่น ๆ การเพิ่มค่าสถานะคอมไพเลอร์เช่น-Werrorนับเป็นคะแนนในวิธีที่ดีในการโยนรหัสหรือไม่? เนื่องจากการบังคับใช้การละเมิด C11 อย่างเข้มงวดอาจทำให้โปรแกรมใช้เวลานานขึ้น อืมมี#include<>บางอย่างที่ใช้แล้ว คุณไม่สามารถลบทั้งการรวมและการใช้งานและถ้ามันล้มเหลวโดยไม่ต้องต้นแบบหรือแมโคร def คุณจะชนะ
Peter Cordes

@PeterCordes ฉันคิดเกี่ยวกับสิ่งนั้น แต่mainและincludeทั้งคู่มีiดังนั้นคุณจึงไม่สามารถมีทั้ง ในทำนองเดียวกันสำหรับการประกาศและการใช้ฟังก์ชั่น นอกจากนี้ยังใช้returnที่ทุกคนคิด
Chris

อุ๊ปส์ฉันลืมเกี่ยวกับข้อกำหนดไบต์ที่ไม่ซ้ำกัน; แน่นอนint mainไม่สามารถทำงานได้
Peter Cordes

4

JavaScript ขนาด 22 ไบต์

with(0xF?JSON:[])parse

ลองออนไลน์!

ข้อผิดพลาดที่เป็นไปได้

เมื่อแก้ไขแล้วจะทำให้เกิดข้อผิดพลาดอย่างใดอย่างหนึ่งต่อไปนี้1 :

[some_identifier] is not defined
expected expression, got ')'
expected expression, got ':'
expected expression, got '?'
expected expression, got ']'
expected expression, got end of script
identifier starts immediately after numeric literal
missing ( before with-statement object
missing ) after with-statement object
missing : in conditional expression
missing ] after element list
missing exponent
missing hexadecimal digits after '0x'
missing octal digits after '0o'
unexpected token: ')'
unexpected token: ']'
unexpected token: identifier

1. จำนวนข้อผิดพลาดที่แน่นอนขึ้นอยู่กับเครื่องยนต์ รายการนี้สร้างด้วย SpiderMonkey (Firefox)


3

Python 3 + Flask-Env , 7 13 14 17 ไบต์

import\
flask_env

ไม่มี TIO flask-envเพราะมันไม่ได้มี

พบชื่อโมดูลที่ยาวที่สุดที่ไม่มีจุดตัดimportและไม่มีตัวเลขใด ๆ ที่ส่วนท้ายของชื่อ _sha256อีกต่อไป แต่ตัว256มันเองก็ไม่ผิดพลาด ฉันพบห้องสมุดหนึ่งรายการb3j0f.syncนั่นคืออีกหนึ่งไบต์อีกต่อไป แต่ไม่สามารถนำเข้าได้อย่างถูกต้อง

  • 1 ไบต์โดยการเปลี่ยนพื้นที่หลังจากที่มีimport \<newline>การนำออกอย่างใดอย่างหนึ่งหรือทั้งสองอย่างทำให้เกิดข้อผิดพลาด

อาจมีตัวเลือกที่ยาวกว่าflask_envนี้ฉันไม่ได้ทำการค้นหาที่ละเอียดถี่ถ้วน แต่ฉันมองผ่านโมดูล ~ 70,000 โมดูล เปิดให้คำแนะนำ


256ทำงานโดยไม่มีข้อผิดพลาด
Aidan F. Pierce

@ AidanF.Pierce ขอบคุณคงที่
dylnan

ฉันพยายามimport *[hawkey]และที่คล้ายกัน แต่โชคร้ายที่ไม่ได้ทำงาน ...
dylnan

1
hawkey ไม่ได้อยู่ในไลบรารี่มาตรฐานดังนั้นนี่คือ "Python with hawkey" (อาจจะทำได้ดีกว่ากับโมดูลอื่น ๆ )
Jonathan Allan

@JanathanAllan จุดดี ต้องไปแล้ว แต่ฉันจะค้นหาในภายหลัง
dylnan

3

R 14 ไบต์

(Sys.readlink)

ลองออนไลน์!

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

ความพยายามครั้งแรกนี้ไม่ได้ผล แต่ฉันได้เรียนรู้มากมายจากการลอง!

dontCheck({family;NROW})


2

Perl 5, 3 ไบต์

y=>

=>คือ "fat comma" ซึ่งเป็นเครื่องหมายคำพูดของ bareword ทางด้านซ้าย ดังนั้นนี่เท่ากับ

"y",

ซึ่งไม่ทำอะไรเลย

หากไม่มีเครื่องหมายจุลภาคyเป็นตัวดำเนินการถอดเสียงซึ่งไม่ถูกต้องหากไม่มีอักขระซ้ำสามตัวในภายหลัง

เครื่องหมายจุลภาคไขมันเพียงอย่างเดียวก็ไม่ถูกต้องเช่นเดียวกับที่เป็น=และ>เพียงอย่างเดียว


2

brainfuck , 2 ไบต์

[]

ลองออนไลน์!

แรงบันดาลใจจากโจพระราชาตอบ Brain-Flak สิ่งนี้ดีที่สุดเพราะข้อผิดพลาดเพียงอย่างเดียวใน brainfuck คือวงเล็บเหลี่ยมที่ไม่ตรงกัน (ขอขอบคุณ Jo King อีกครั้งสำหรับข้อมูลนี้)


ได้. ข้อผิดพลาดเพียงอย่างเดียวที่สมองสามารถมีได้คือวงเล็บเหลี่ยมที่ไม่มีใครเทียบ
Jo King


1

ML มาตรฐาน 22 ไบต์

val 1089=op-(765,~324)

ลองออนไลน์! op-(a,b)เป็นรูปแบบที่ de-sugared a-bของ หมายถึงการลบเอกเพื่อให้เราเป็นจริงการคำนวณ~ สำนวนนี้เป็นรูปแบบการจับคู่บนอย่างต่อเนื่อง765+324 1089การแข่งขันครั้งนี้ประสบความสำเร็จหากโปรแกรมไม่ได้รับการแก้ไขและทำ - ไม่เป็นไร

หากการแข่งขันไม่สำเร็จเนื่องจากมีการลบตัวเลขบางหลักออกunhandled exception: Bindไป การลบop-ผลการผิดพลาดในการพิมพ์เพราะ tuple intจะถูกจับคู่บน การลบอื่น ๆ ทั้งหมดควรส่งผลให้เกิดข้อผิดพลาดทางไวยากรณ์


1

Swift 4 , 19 bytes

[].contains{1 !=
0}

ลองออนไลน์!

ข้อผิดพลาดที่เป็นไปได้ทั้งหมดที่ฉันพบคือ:

  • การลบใด ๆ[, ], {หรือ}จะส่งผลให้เกิดข้อผิดพลาดทางไวยากรณ์
  • การลบ[].จะส่งผลให้Use of unresolved identifier 'contains'
  • การลบ.จะส่งผลให้Consecutive statements on a line must be separated by ';'
  • การลบ[]จะส่งผลให้Reference to member 'contains' cannot be resolved without a contextual type
  • การลบ{1 !=␊0}จะส่งผลให้Expression resolves to an unused function
  • การลบ1 !=␊0จะส่งผลให้Missing return in a closure expected to return 'Bool'
    • การลบบรรทัดใหม่จะส่งผลให้ '!=' is not a prefix unary operator
    • การลบพื้นที่จะส่งผลให้ '=' must have consistent whitespace on both sides
    • การลบ!=จะส่งผลให้Missing return in a closure expected to return 'Bool'
      • การลบบรรทัดใหม่จะส่งผลให้ Consecutive statements on a line must be separated by ';'
      • การลบช่องว่างและบรรทัดใหม่ (และศูนย์หรือหนึ่งในหลัก) จะส่งผลให้ Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
  • การลบ[].containsจะส่งผลให้Closure expression is unused

โปรแกรมที่น่าสนใจอื่น ๆ ได้แก่ (หนึ่งรายการในแต่ละบรรทัด):

[].isEmpty
[:].values
[1:2]

สิ่งนี้ประกอบด้วยสองas
caird coinheringaahing



0

เรติน่า 2 ไบต์

ฉันจะไม่แปลกใจถ้านี่เป็นสิ่งที่ดีที่สุด ...

()

ลองออนไลน์!

regex มีกลุ่มที่ว่างเปล่า การลบ paren อย่างใดอย่างหนึ่งจะทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์เนื่องจากวงเล็บไม่ตรงกัน

การแก้ปัญหาอื่น ๆ : \(, \), \[, \], \*, \+, \?,a]


a]ไม่ผิดพลาด
jimmy23013

@ jimmy23013 อ่าฉันไม่รู้ว่าฉันจะทำอย่างไร ย้อนกลับ
mbomb007

-2

C (gcc) , 73 75 ไบต์

#include <ftw.h>
ABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890(){g FTW_D-1;}

ลองออนไลน์!

จากคำตอบของ @Steadybox ขอบคุณ @Angs ที่ตรวจหาข้อผิดพลาดร้ายแรง

ใช่มันเป็นสกปรกสับ (เพราะในความเป็นจริงใช้#defineกับ-DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=mainและ-Dg=return) แต่ผมไม่เห็นว่ากฎใด ๆ ที่ห้ามเช่นตัวคอมไพเลอร์


บรรทัดแรกสามารถถูกพาออกไปได้ดังนั้นโปรแกรมจึงไม่ใช่โปรแกรมดั้งเดิม
Angs

@Angs ขอบคุณคงที่ (ด้วยราคาของการเพิ่มตัวเลือกคอมไพเลอร์อื่น ๆ )
รถเข็น 8

6
จากการโพสต์เมตานี้การส่งของคุณไม่ได้อยู่ในภาษา C อีกต่อไป แต่ C89 + -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main+ -Dg=returnดังนั้นฉันขอยืนยันว่านี่เป็นการใช้ภาษาที่ออกแบบมาเป็นพิเศษสำหรับความท้าทายซึ่งถูกห้ามโดยค่าเริ่มต้น
เดนนิส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.