सबसे छोटा प्रोग्राम लिखें जो सबसे संकलक चेतावनी और त्रुटियां उत्पन्न करता है


42

चुनौती:

बहुत छोटा प्रोग्राम लिखें, जो संकलित होने पर, संकलक चेतावनी और त्रुटियों की सबसे अधिक मात्रा बनाता है। इसे किसी भी प्रोग्रामिंग भाषा में लिखा जा सकता है।

स्कोरिंग:

स्कोर इस समीकरण द्वारा निर्धारित किया जाता है errors_and_warnings_length/code_length:। उच्चतम स्कोर जीतता है।

उदाहरण:

C # प्रोग्राम class5 वर्ण लंबा है और 3 चेतावनी देता है, जो (1/5) * 3 = 0.6 का स्कोर है।

संपादित करें:

कुछ भ्रम के कारण, कार्यक्रमों को कम से कम 1 चार्ट लंबा होना चाहिए। अन्यथा यह अनंत का स्कोर होता।


17
जबकि मुझे यह अवधारणा पसंद है, मैं मीट्रिक को थोड़ा चिंताजनक मानता हूं। क्या संकलक? क्या सेटिंग्स (विशेष रूप से चेतावनी के संबंध में)? मैं मतलब gcc -Wall -pedanticसादा ol` से बहुत अलग है gccसे अलग है tccकुछ अन्य ग संकलक से शायद अलग है।
dmckee

2
बस रूसी, या जर्मन में एक कंपाइलर मिलता है, आपको कुछ लंबी त्रुटियां मिलती हैं (कोई
सज़ा का

2
मुझे C / C ++ के अलावा अन्य भाषाओं में उत्तर देखना अच्छा लगेगा।
केन ब्लूम

4
मुझे यह पसंद आया होगा यदि चुनौती यथासंभव विभिन्न त्रुटियों को उत्पन्न करना था
हन्नेश

3
अहम। अन्यथा इसका स्कोर अपरिभाषित होगा ।
wizzwizz4

जवाबों:


94

जीसीसी, स्कोर 2 200 /36 ≈ 4.5 × 10 58

#include __FILE__
#include __FILE__

मैंने वास्तव में इस कोड को संकलित नहीं किया है, लेकिन परीक्षण और सरल गणित के आधार पर, इसे कुल 2 200 #include nested too deeply त्रुटियों का उत्पादन करना चाहिए ।

बेशक, कार्यक्रम तुच्छ रूप से एक्स्टेंसिबल है। तीसरी पंक्ति जोड़ने के लिए स्कोर को लाता है 3 200 /54 ≈ 4.9 × 10 93 । चार लाइनें दे 4 200 /72 ≈ 3.6 × 10 118 , और इतने पर।


6
बहुत चालाक जवाब। +1
प्रिंस जॉन वेस्ले

5
बहुत चालाक मैं सहमत हूं, लेकिन मैं गिनूंगा कि 1 त्रुटि के रूप में ("बहुत गहराई से नेस्टेड"), बैकग्राउंड की प्रत्येक पंक्ति के लिए एक अलग त्रुटि नहीं।
केविन

1
@ केविन: बस स्पष्ट होने के लिए, यह 2²⁰⁰ बार उस त्रुटि का उत्पादन करना चाहिए, प्रत्येक संभव पथ के लिए एक बार जिससे घोंसले की सीमा तक पहुंचा जा सकता है। तथ्य यह है कि प्रत्येक त्रुटि में बैकट्रेस की 200 लाइनें भी शामिल हैं, जो आउटपुट को और भी अधिक क्रियाशील बनाती है।
इल्मारी करोनें

1
हम्म। मैं शपथ ले सकता था जब मैंने कोशिश की थी कि पिछली रात 1 त्रुटि के बाद जमानत मिल गई थी, लेकिन यह अब अधिक मुद्रण चल रहा है। आपत्ति वापस ली गई। संयोग से, सी मानक से 200 है?
केविन

1
@ केविन प्रति gcc.gnu.org/onbuildocs/gcc-4.8.2/cpp/Implementation-limits.html : "हम #includeभगोड़ा पुनरावृत्ति से बचने के लिए 200 स्तर [मन ] की एक मनमानी सीमा लागू करते हैं । मानक के लिए कम से कम 15 की आवश्यकता होती है। स्तरों। "
zwol

48

सी, 0 अक्षर - स्कोर = (1/0) * 1 = इन्फिनिटी



1 त्रुटि उत्पन्न करता है:

/usr/lib/gcc/i686-pc-linux-gnu/4.7.0/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status

नोट: http://ideone.com/xdoJyA


49
1/0 अनिर्धारित है, न कि "अनन्तता"।
फ्रैंक

3
+1 भले ही 1/0 अपरिभाषित हो, यह किसी भी बड़ी संख्या द्वारा विभाजित एक से अधिक बड़ा है। 0 केक लेता है।
jnm2

6
@ jnm2 उस बारे में निश्चित नहीं है। 1/0 अपरिभाषित है और, हालांकि दाईं ओर दृष्टिकोण + अनंत है, जो 1/0 को बिल्कुल भी परिभाषित नहीं करता है।
काओड

5
चूंकि डोमेन सकारात्मक है, मुझे लगता है कि मैंने जो कहा है वह समझ में आता है। थ्योरी मजेदार है लेकिन मुझे लगता है कि हमें यहां कुछ सामान्य ज्ञान की जरूरत है। कम से कम कोड के लिए सबसे अधिक कंपाइलर त्रुटियां, याद रखें। सीमा स्पष्ट है।
jnm2

15
1.0 / 0.0 = + INF, कम से कम IEEE 754 के अनुसार :) तो आपको बस फ्लोटिंग पॉइंट में कैलकुलेशन करना होगा।
कीथ रान्डेल

19

जीसीसी, स्कोर 5586.6 (और यदि आवश्यक हो तो)

179 चार्ट, 1000003 चेतावनियाँ / त्रुटियाँ (उपयोग करना -Wall)

#define E a,a,a,a,a,a,a,a,a,a
#define D E,E,E,E,E,E,E,E,E,E
#define C D,D,D,D,D,D,D,D,D,D
#define B C,C,C,C,C,C,C,C,C,C
#define A B,B,B,B,B,B,B,B,B,B
_(){A,A,A,A,A,A,A,A,A,A}

यह निश्चित रूप से, मनमाने ढंग से बढ़ाया जा सकता है। उदाहरण के लिए, #define5 के बजाय 10 एस का उपयोग करने और 10 के बजाय 20 "कॉल" की लंबाई का उपयोग करने से लगभग 20 स्कोर हो जाएगा (20 ** 10) / (179 * 4) = 14301675977.65 (और चलाने में काफी समय लगेगा ;)


7
का उपयोग कर #define X(A) A,A,A,A,A,A,Aऔर X(X(X(X(X(X(A))))))आप बहुत तेजी से कोड डुप्लिकेट कर सकते हैं।
प्रात:

12

जीसीसी दो बार, 86

22 वर्ण, 1898 त्रुटियां + मेरे सिस्टम पर चेतावनी।
मुझे यकीन है कि छोटे नामों वाली लंबी फ़ाइलों को चुनकर इस दृष्टिकोण को बेहतर बनाया जा सकता है।

#include</usr/bin/gcc>

3
/usr/bin/gdbकाफी बड़ा है (5.5M बनाम 760K), लेकिन /vmlinuz5.6M पर आपका सबसे अच्छा दांव हो सकता है।
3

12

HQ9 ++, 1 (की सीमा (n + 29) / n)

निम्नलिखित Warning: this is not a quineकोड में प्रत्येक क्यू के लिए चेतावनी का उत्सर्जन करता है ।

QQQQQ...Q
Warning: this is not a quine

छोटा अच्छा है, है ना? हम्म ...


FWIW, यह एक मजाक है। अगर यह स्पष्ट नहीं था।
बूथबंदी

10

सी।, 727

11 वर्ण, 5 त्रुटियां, 3 चेतावनी, (1/11) * 8 = .727273

m(;){@,x}2

cc -g -Wall    er.c   -o er
er.c:1: error: expected declaration specifiers or '...' before ';' token
er.c:1: warning: return type defaults to 'int'
er.c: In function 'm':
er.c:1: error: stray '@' in program
er.c:1: error: expected expression before ',' token
er.c:1: error: 'x' undeclared (first use in this function)
er.c:1: error: (Each undeclared identifier is reported only once
er.c:1: error: for each function it appears in.)
er.c:1: warning: left-hand operand of comma expression has no effect
er.c:1: warning: control reaches end of non-void function
er.c: At top level:
er.c:1: error: expected identifier or '(' before numeric constant


मैं 5 त्रुटियों को गिनता हूं, साथ ही 3 चेतावनियां
केविन

मुझे लगता है आप ठीक कह रहे हैं। मैं "त्रुटि:" और "चेतावनी:" तार गिन रहा था।
लूसर

5
मुझे लगता है कि यदि आप केवल विभिन्न त्रुटियों / चेतावनियों को गिनते हैं तो आप जीत जाते हैं।
रात 12:03

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

8

एनएएसएम, स्कोर 63/40 * 2 ^ 32 5 2.905 * 10 ^ 19

%rep 1<<32
%rep 1<<32
!
%endrep
%endrep

c.asm:3: error: label or instruction expected at start of line2 ^ 64 बार आउटपुट करेगा । फिर यह आसानी से बहुत बड़े आउटपुट के लिए एक्स्टेंसिबल है।


2

C ++ 98 (211 बाइट्स) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031

मैं यह देखना चाहता था कि प्रीप्रोसेसर का उपयोग किए बिना मैं C ++ में कितना अच्छा कर सकता था। यह प्रोग्राम 2,139,390,572 बाइट्स आउटपुट का उत्पादन करता है, जिनमें से अधिकांश एकल त्रुटि संदेश है।

template<int i,class S,class T>struct R{typedef R<i,typename R<i-1,S,S>::D,typename R<i-1,S,S>::D>D;};template<class S,class T>struct R<0,S,T>{typedef S D;};void f(){R<27,float,R<24,int*const*,int>::D>::D&E=4;}

me@Basement:~/src/junk$ ls -l a.C
-rw-rw-r-- 1 me me 211 Apr 27 21:44 a.C
me@Basement:~/src/junk$ g++-5 a.C -fmax-errors=1 2>a.C.errors.txt
me@Basement:~/src/junk$ ls -l a.C.errors.txt 
-rw-rw-r-- 1 me me 2139390572 Apr 27 22:01 a.C.errors.txt

Ungolfed:

template <int i, class S, class T>
struct R {
    typedef R<i, typename R<i-1,S,S>::D, typename R<i-1,S,S>::D> D;
};
template <class S, class T>
struct R<0, S, T> {
    typedef S D;
};
void f() {
    R<27, float, R<24, int*const*, int>::D>::D &E = 4;
}

यह प्रोग्राम एक पुनरावर्ती संरचना टेम्पलेट R को परिभाषित करके काम करता है जो R के दो प्रतियों के साथ एक टाइप डी को रखता है। इसका परिणाम एक प्रकार का नाम होता है जो तेजी से बढ़ता है, जो त्रुटि संदेश में पूर्ण रूप से मुद्रित होता है। दुर्भाग्य से, जी ++ एक त्रुटि संदेश को प्रिंट करने का प्रयास करते समय चोक हो जाता है (1 << 31) बाइट्स की तुलना में। 2,139,390,572 बाइट्स निकटतम थी जो मुझे बिना जाने के सीमा तक मिल सकती थी। मुझे उत्सुकता है अगर कोई भी सीमा के 27, float, 24, int*const*करीब पहुंचने के लिए पुनरावर्तन सीमा और पैरामीटर प्रकारों को समायोजित कर सकता है (या एक संकलक ढूंढ सकता है जो एक लंबे समय तक त्रुटि संदेश भी प्रिंट कर सकता है)।

त्रुटि संदेश के अंश:

a.C: In function ‘void f()’:
a.C:1:208:  error:  invalid  initialization  of non-const reference of type
‘R<27, float, R<24, R<23, R<22, R<21, R<20, R<19, R<18, R<17, R<16, R<15,
R<14,  R<13, R<12, R<11, R<10, R<9, R<8, R<7, R<6, R<5, R<4, R<3, R<2, R<1,
int* const*, int* const*>, R<1, int* const*, int* const*> >, R<2, R<1, int*
const*,  int*  const*>,  R<1, int* const*, int* const*> > >, R<3, R<2, R<1,
int* const*, int* const*>, R<1, int* const*, int* const*> >, R<2, R<1, int*
const*,  int* const*>, R<1, int* const*, int* const*> > > >, R<4, R<3, R<2,
R<1, int* const*, int* const*>, R<1,
...
int*  const*,  int*  const*>  > > > > > > > > > > > > > > > > > > > > > > >
>::D& {aka R<27, R<26, R<25, R<24, R<23,  R<22,  R<21,  R<20,  R<19,  R<18,
R<17,  R<16,  R<15,  R<14, R<13, R<12, R<11, R<10, R<9, R<8, R<7, R<6, R<5,
R<4, R<3, R<2, R<1, float, float>, R<1, float, float> >, R<2,  R<1,  float,
float>,  R<1,  float, float> > >, R<3, R<2, R<1, float, float>, R<1, float,
float> >, R<2, R<1, float, float>, R<1, float, float> > > >, R<4, 
...
, R<1, float, float>, R<1, float, float> > >, R<3, R<2, R<1, float, float>,
R<1, float, float> >, R<2, R<1, float, float>, R<1, float, float> > > > > >
>  >  >  >  >  >  > > > > > > > > > > > > > > >&}’ from an rvalue of type
‘int’
    template<int    i,class   S,class   T>struct   R{typedef   R<i,typename
R<i-1,S,S>::D,typename  R<i-1,S,S>::D>D;};template<class  S,class  T>struct
R<0,S,T>{typedef                         S                         D;};void
f(){R<27,float,R<24,int*const*,int>::D>::D&E=4;}


                                                        ^
compilation terminated due to -fmax-errors=1.

2,139,390,572 बाइट्स / 211 बाइट्स = 10,139,291.8


यही कारण है कि मैं हमेशा STLfilt ... PPCG में आपका स्वागत है! यह एक महान पहली सबमिशन है!
मेगो

1
दुर्भाग्य से ऐसा लगता है कि मैंने चुनौती को गलत समझा; ऐसा लगता है कि प्रस्तुतियाँ त्रुटि संदेशों की संख्या से स्कोर की जाती हैं, न कि बाइट काउंट से। जाहिर है मेरी 1 त्रुटि प्रविष्टि बहुत प्रतिस्पर्धात्मक नहीं है। शायद मेरा जवाब यहां
नट

-1

स्माइलबैसिक, 1/1 = 1

A

त्रुटि उत्पन्न करता है Syntax Error in 0:1


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