स्रोत कोड में एक खाली लाइन का विलोपन जो अप्रत्याशित कार्यक्षमता का कारण बनता है [बंद]


38

एक स्क्रिप्ट लिखें जो प्रोग्राम लॉजिक के प्रवाह में एक रिक्त रेखा मौजूद होने पर ठीक काम करती है, लेकिन उस लाइन को हटाने पर अनपेक्षित व्यवहार को तोड़ती है या उसका कारण बनती है।

मानक खामियों और बेवकूफ जवाब से बचें । आपका कार्यक्रम कुछ "उपयोगी" करना चाहिए, भले ही यह सब कुछ कुछ पूर्णांक जोड़ रहा हो।

मल्टीलाइन स्ट्रिंग से एक खाली लाइन को हटाने से गिनती नहीं होती है, जब तक उस मल्टीलाइन स्ट्रिंग से अपेक्षित आउटपुट तकनीकी रूप से नहीं बदलना चाहिए (यानी: यदि आप सभी रिक्त लाइनों को मिलान कर रहे हैं ^$)।

व्हॉट्सएप की मूर्खता की अनुमति नहीं है; गाड़ी के रिटर्न, टैब, स्पेस आदि के साथ अजीब चीजें न करें।


11
मुझे लगता है कि आपको व्हॉट्सएप को बाहर करना चाहिए।
nnonneo

17
मुझे लगता है कि श्वेत रिक्ति है एक " मानक उपाय बता "
core1024

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

4
"अनपेक्षित कार्यक्षमता" एक बहुत अच्छा वाक्यांश है।
कज़

3
मैं इस प्रश्न को ऑफ़-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूँ क्योंकि इस साइट पर अंडरहैंड चुनौतियाँ अब ऑन-टॉपिक नहीं हैं। meta.codegolf.stackexchange.com/a/8326/20469
बिल्ली

जवाबों:


62

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

"हैलो, वर्ल्ड!" के साथ एक अलर्ट पॉपअप खोलता है यदि रिक्त रेखा मौजूद है, अन्यथा "0" अलर्ट करता है।

(function(){
    alert(~(arguments.callee+[]).indexOf('\n\n') && "Hello, World!");

})();

डेमो

स्पष्टीकरण:

arguments.callee स्वयं-निष्पादित अनाम फ़ंक्शन का संदर्भ है।

रिक्त सरणी ( []) को लागू करने से फ़ंक्शन को स्ट्रिंग में डाला जाता है, जो आपको इसका स्रोत कोड देता है।

indexOf-1यदि स्ट्रिंग नहीं मिली है तो लौटाता है।

एक बिटवाइज़ नहीं ऑपरेशन ( ~) करने से परिणाम -1बदल जाता है 0, जो एक गलत मूल्य है।


2
यह क्या प्रवंचना है ?!
क्रॉल्टन

1
arguments.calleeफ़ंक्शन का स्रोत शामिल है।
मैथ्यू

2
ध्यान दें कि यह अब सख्त मोड में काम नहीं करता है (जो कि अधिकांश आधुनिक कोड का उपयोग किया जाएगा)। सख्त मोड का उपयोग करने से मना करता है arguments.callee
डैनियल लो निगारो

1
@ मिचेल: नहीं, सटीक प्रारूप के बारे में कल्पना कुछ नहीं कहती है। वास्तव में , ऐसे इंजन हैं जो चारों ओर चलते हैं जो व्हॉट्सएप को संरक्षित नहीं करते हैं।
बेर्गी

2
@DanielLoNigro आप केवल फ़ंक्शन को एक नाम दे सकते हैं और इसके बजाय इसका उपयोग कर सकते हैं arguments.callee। यहां तक ​​कि इसे छोटा कर देता है।
एक बिल्ली

42

सी

यह जादू 8-गेंद कार्यक्रम अभी भी रिक्त रेखा के बिना काम करेगा, लेकिन यह थोड़ा अधिक निर्णायक होगा - कोई भी तटस्थ उत्तर कभी भी आउटपुट में दिखाई नहीं देगा।

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
  int x, t;
  char *quotes[] = {
        // Positive :-)
        "It is certain", "It is decidedly so", "Without a doubt", "Yes definitely", "You may rely on it",
        "As I see it, yes", "Most likely", "Outlook good", "Yes", "Signs point to yes",
        // Indifferent :-\

        "Reply hazy try again", "Ask again later", "Better not tell you now", "Cannot predict now", "Concentrate and ask again",
        // Negative :-(
        "Don't count on it", "My reply is no", "My sources say no", "Outlook not so good", "Very doubtful" };
  srandom(time(NULL)); // Initialize random number generator
  x = random() % (sizeof(quotes) / sizeof(char*)); // Choose a random outcome
  printf("The Magic Eight Ball says...\n%s\n",quotes[x]);
  return 0;
}

व्याख्या

जब सी पार्सर एक बैकलाइन को एक नए वर्ण द्वारा देखा जाता है, तो यह दोनों को अनदेखा करता है और दूसरी पंक्ति को पहले की निरंतरता के रूप में मानता है। खाली लाइन के बिना, "उदासीन" उत्तर सभी को पिछली टिप्पणी के हिस्से के रूप में माना जाएगा।


51
मैंने +1 किया, लेकिन C टिप्पणियों को एक बैकस्लैश के साथ समाप्त होते देखना एक मानक खामियों, IMO बनने लगा है।
टिम एस।

2
यह इस "मानक खामियों" के लिए एक संदर्भ था , इसलिए शायद शाब्दिक रूप से "खामियों" का नहीं।
टिम एस।

5
@TimS। यदि आप इस "समाधान" से ऊब गए हैं, तो आपने क्यों उकसाया?
जॉन ड्वोरक

8
बैकस्लैश-द-नेक्स्ट-लाइन-इन-ए-कमेंट जवाब (ट्रिग्राफ या नो ट्रिग्राफ) मुझे यह इच्छा कर रहे हैं कि मेरे पास 125 प्रतिष्ठा थी। मैं उन्हें देखता रहता हूं और वे भयावह रूप से दोहराए जाने लगते हैं, पूरी तरह से देखते हैं और अब चतुर या मजाकिया नहीं हैं। (जो उनका उपयोग करने वालों के लिए दुर्भाग्यपूर्ण है, यहाँ स्क्वीम की तरह, क्योंकि वे किसी भी तरह से ire के लायक नहीं हैं और कभी-कभी इस बात से पूरी तरह से अनजान हैं - लेकिन यह ट्रिक इसे कमाई कर रही है।)
doppelgreener

4
@ मानक बनना शुरू करना लंबे समय के मानक / ओवरडोन के समान नहीं है ... इसका उपयोग यहां काफी चतुर है, यह जगह से बाहर नहीं दिखता है (कुछ के विपरीत, जो कि बेवजह का चरित्र है) एक टिप्पणी का अंत, या कुछ असामान्य करने के लिए टिप्पणी-शुरू चरित्र (ओं) के साथ अपनी टिप्पणी समाप्त करें)। इसलिए: मैं समाधान को बढ़ाता हूं, न कि उसकी चाल को जारी रखने के लिए।
टिम एस।

37

Befunge-93

v
&
&
+
#

.
@

मेरा पहला बेफिक्रे प्रोग्राम :)

यह इनपुट से दो नंबर पढ़ता है और उनकी राशि प्रिंट करता है। यदि आप खाली लाइन को हटाते हैं, तो यह कुछ भी प्रिंट नहीं करता है।

स्पष्टीकरण:

vकोड को निष्पादित करने के लिए एक नीचे की दिशा निर्धारित करता
&है एक पूर्णांक पढ़ता
+है संख्याओं को एक साथ जोड़ता
#है अगले कमांड को जोड़ता
.है स्टैक से एक पूर्णांक को प्रिंट
@करता है कार्यक्रम समाप्त होता है।

जैसा कि लिखा गया है, #खाली रेखा के ऊपर से फिसल जाता है और इसके साथ प्रतिस्पर्धा करता है .। जब आप खाली रेखा को हटाते हैं, .तो छोड़ दिया जाता है।

Http://befunge.aurlien.net/ पर एक अच्छा व्याख्याकार लगता है


आह, एक चतुर।
देखिए

1
Befunge 98 भी ऐसा करता है। अच्छी सोच। और इस दुभाषिया के कुछ लाभ हैं (मैंने आपका बहुत उपयोग नहीं किया है, इसलिए मुझे इसके लाभ नहीं पता हैं)।
जस्टिन

32

रूबी / शैल

​​​​​​
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#!   The Amazing Integer Adder             !
#! Adds 1 and 1, and displays the result   !
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

p 1+1

ठीक काम करता है अगर एक नई रेखा शीर्ष पर है, अन्यथा पहली टिप्पणी पंक्ति को शेल द्वारा एक विकृत शेबंग के रूप में व्याख्या की गई है।


3
यह या तो हमेशा काम नहीं करेगा या हमेशा काम नहीं करेगा? उदाहरण के लिए, यदि आप इसे चलाते हैं, तो यह ruby youranswer.rbएक शेबंग की तलाश नहीं करेगा क्योंकि यह पहले से ही रूबी दुभाषिया में चलाया जा रहा है, लेकिन यदि आप इसे चलाते हैं तो ./youranswer.rbयह बिल्कुल भी नहीं चलेगा क्योंकि कोई भी शेबंग नहीं है ..
मोनिका

6
कम से कम मेरे रूबी के साथ, शेबंग को सम्मानित किया जाता है भले ही आप इसे चलाते हैं ruby youranswer.rb, जो फ़ाइल में आवश्यक कमांड-लाइन स्विच सेट करने के लिए उपयोगी हो सकता है। तो बिना न्यूलाइन के मुझे मिलता हैruby: no Ruby script found in input (LoadError)
histocrat

29

स्काला

case class IntWrapper(i: Int)

{
  val answer = (IntWrapper(0) /: (1 to 100)){(x, y) => IntWrapper(x.i + y)} // Add up ints
  println(s"Sum of wrapped integers is $answer")
}

यदि आप रिक्त पंक्ति को निकालते हैं, तो कोई आउटपुट मुद्रित नहीं किया जाएगा। जो सबसे अच्छा है, के रूप में अपने ढेर अतिप्रवाह अगर आप वास्तव में बुलाया जाएगा IntWrapper

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


6
उनमें से बहुत अच्छा मिस्र के ब्रैकेट को मजबूर करने के लिए नहीं। लेकिन मेरी राय में अर्धविराम हीनता एक बुरा विचार है।
अल्मो

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

2
@James_pic: AFAIK कोई भी इसके बारे में पायथन में शिकायत नहीं करता है क्योंकि यह पायथन में मौजूद नहीं है। जेएस में, अर्धविराम वाक्यविन्यास का एक आवश्यक हिस्सा है, और इसे कुछ बिंदुओं पर (अनुमान) डाला जा सकता है। पायथन में, अर्धविराम वाक्यविन्यास का एक आवश्यक हिस्सा नहीं है, लेकिन वैकल्पिक रूप से इस्तेमाल किया जा सकता है। यह एक बड़ा अंतर है।
मेसन व्हीलर

यह एक बड़े अंतर की तरह लग सकता है, लेकिन अगर स्काला ने कुछ विशेषताओं को हटा दिया, जो वर्तमान में बयान की सीमाओं को अस्पष्ट बना देता है, तो यह फेंस के जावास्क्रिप्ट की ओर से पायथन के पास जाएगा।
जेम्स_पिक

1
@ जेम्स_पिक: जो चीज अजगर को अलग बनाती है, वह यह है कि जब तक कोई बच नहीं जाता है या किसी भी तरह के ब्रैकेट के अंदर नई स्टेटमेंट नहीं आती है तब तक स्टेटमेंट समाप्त हो जाता है। वह पूर्ण / अपूर्ण नियम नहीं है।
Jan Hudec

27

GolfScript

~{.@\%:

}do;

दो गैर-शून्य पूर्णांक के GCD की गणना करता है। रिक्त लाइन को हटाने से प्रोग्राम टूट जाता है।

इसे ऑनलाइन आज़माएं।

यह काम किस प्रकार करता है

यह यूक्लिडियन एल्गोरिथ्म का एक गोल्फस्क्रिप्ट कार्यान्वयन है:

      # STACK: "15 24"
~     # Interpret the input string.
{     # STACK: 15 24
  .@  # Duplicate the topmost integer and rotate the other on top of both copies.
      # STACK: 24 24 15
  \   # Swap the topmost integers.
      # STACK: 24 15 24
  %   # Calculate the modulus.
      # STACK: 24 15
}do   # If the modulus is non-zero, repeat the loop.
;     # Discard the last modulus.

बस एक छोटी सी समस्या है:

{}doयह सत्य है अगर जाँच करने के लिए स्टैक से मापांक पॉप करता है, इसलिए इसे लूप के अंत में डुप्लिकेट करना होगा। यह सामान्य रूप से पूरा होता है ., लेकिन :\n\nइसका एक ही प्रभाव है: यह चर LF ( :\n) में सबसे ऊपरी स्टैक आइटम को संग्रहीत करता है , फिर उस चर की सामग्री को धक्का देता है।


7
वाह, यह भी एक चर है? : O
aditsu

@aditsu: केवल #, {और }वैरिएबल नामों के रूप में उपयोग नहीं किया जा सकता, क्योंकि वे वाक्य रचना का हिस्सा हैं। तार सहित हर दूसरा टोकन ठीक है।
डेनिस

@ डेनिस वाह। TIL यहां तक ​​कि तार को चर के रूप में इस्तेमाल किया जा सकता है। क्या यह किसी भी चीज के लिए उपयोगी है?
जॉन ड्वोरक

@JDDvorak: कुछ किनारों के मामलों के अलावा (palindromic कोड, अंडरहैंड कोड , शायद नहीं। मुझे लगता है कि यह सिर्फ एक ( प्रलेखित ) है कि कैसे गोल्फस्क्रिप्ट दुभाषिया टोकन में कोड को विभाजित करता है।
डेनिस

@ डेनिस का मतलब यह है कि .:-1इनपुट को स्टोर करता है -1, ना कि माइनस साइन को? हम्म ...
जॉन ड्वोरक

23

मीडियाविकि टेम्पलेट सिंटैक्स

टेम्पलेट को परिभाषित करें: Foo as

{{{a

b|Uh-oh!}}}

एक अन्य पेज में,

{{Foo|a

b=Works!}}  <!-- outputs "Works!" -->

{{Foo|a


b=Works!}}  <!-- outputs "Uh-oh!" -->

{{Foo|a
b=Works!}}  <!-- outputs "Uh-oh!" -->

MediaWiki में, पैरामीटर नाम में नई सूची हो सकती है।


1
अच्छा, यह मैं क्या देख रहा था की लाइनों के साथ है, इस तरह अजीब अजीब मामलों।
नौफुली के

16

LaTeX (backref)

निम्न LaTeX कोड एक प्रशस्ति पत्र का उपयोग करता है और उद्धरण में पृष्ठों की एक सूची होती है, जहां प्रवेश को उद्धरण दिया गया है। यहाँ यह पहला पेज है। पैकेज hyperrefपीडीएफ लिंक भी जोड़ता है, पेज बैक संदर्भ लाल है, उद्धरण लिंक हरा है।

\documentclass{article}
\usepackage[colorlinks,pagebackref]{hyperref}
\begin{document}
Donald E. Knuth is the inventor of \TeX~\cite{knuth}.
\begin{thebibliography}{9}
\bibitem{knuth}
Donald E. Knuth: \textit{The \TeX book}; Addison Wesley, 1984.

\end{thebibliography}
\end{document}

नतीजा

लेकिन LaTeX को खाली लाइन की आवश्यकता नहीं है, खाली लाइन शानदार लगती है और उदाहरण अभी भी बिना hyperrefऔर खाली लाइन के काम करेगा :

\documentclass{article}
\begin{document}
Donald E. Knuth is the inventor of \TeX~\cite{knuth}.
\begin{thebibliography}{9}
\bibitem{knuth}
Donald E. Knuth: \textit{The \TeX book}; Addison Wesley, 1984.
\end{thebibliography}
\end{document}

हाइपरएर के बिना परिणाम

लेकिन लिंक और वापस संदर्भ चले गए हैं, इस प्रकार हम उन्हें फिर से संगठित करते हैं:

\documentclass{article}
\usepackage[colorlinks,pagebackref]{hyperref}
\begin{document}
Donald E. Knuth is the inventor of \TeX~\cite{knuth}.
\begin{thebibliography}{9}
\bibitem{knuth}
Donald E. Knuth: \textit{The \TeX book}; Addison Wesley, 1984.
\end{thebibliography}
\end{document}

लेकिन अब उदाहरण टूट गया है और अब संकलन नहीं होगा:

Runaway argument?
 Donald E. Knuth: \textit {The \TeX book}; Addison Wesley, 1984. \end \ETC.
! File ended while scanning use of \BR@@bibitem.
<inserted text> 
                \par 
<*> knuth

?

क्या हुआ? पैकेज hyperref(या अधिक सटीक पैकेज backref, जो द्वारा लोड किया गया है hyperref) पीछे संदर्भ सूची को जोड़ने के लिए ग्रंथ सूची प्रविष्टि के अंत में प्राप्त करना चाहता है। लेकिन LaTeX में सिंटैक्स केवल प्रविष्टि की शुरुआत प्रदान करता है \bibitem, अंत कहीं भी हो सकता है। इस आपातकालीन पैकेज backrefमें एक प्रतिबंध जोड़ा गया है \bibitemजिसमें खाली लाइन के साथ प्रवेश समाप्त करना है। फिर पैकेज \bibitemप्रविष्टि के अंत में वापस संदर्भ लगाने के लिए फिर से परिभाषित कर सकता है ।

चूंकि खाली रेखा गायब है, TeX इसे ढूंढता रहता है, लेकिन इसके बजाय फ़ाइल का अंत पाया गया और त्रुटि संदेश जारी करता है।


12

सी (अर्ध-अस्पष्ट)

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

कहीं भी कोई पंक्ति निरंतरता या ट्रिगर नहीं होती है। मेरा मानना ​​है कि यह मान्य ANSI C99 है।

इसमें शामिल उन्नत गणित के कारण, यदि आप संकलन करते हैं gcc, तो उपयोग करना याद रखें -lm

#include <setjmp.h>
#include <stdio.h>
#define max(x,y) ((x<y?y:x))
#define swap(x,y) ((x^=y,y^=x,x^=y))
#include <stdlib.h>
#include <math.h>
#define vfry(x,p,z,y,i) (!!y&((z##z##L##I##p##x##z##z)))
#define NDEBUG

/* 
 * Proper use of whitespace is essential!
 * Please do not remove any blank lines.
 */

const double E = 2.71828182845904523536;

int vrfy(double epsilon, int magic, const char *key, long int L) {
  /* You are not expected to understand this */
  double x=284.2891,u=2.34e56;
  while (rand()+magic*pow(epsilon,sin(x-E))!=log(u*L))
    x*=vrfy(1.0/epsilon,(int)u,&key[swap(L,magic)],L++);
  return u/lgamma(x);
}

int main(int argc, char *argv[]) {
  int N_=831293812; /* do not change, see Knuth 1987 */
  if (!vfry(E, N,_, "M=&;VT=I!9", 0xfe86ddcaL)) {
    fprintf(stderr, "Code standards violation detected!\n");
    abort();
  }
  if (argc < 2) {
    fprintf(stderr, "Usage: %s n\nComputes n!\n", argv[0]);
    exit(1);
  }
  int m=1, n=atoi(argv[1]), i;
  for (i=1; i <= n; i++)
    m *= i;
  printf("%d! = %d\n", n, m);
  return 0;
}

स्पॉइलर

जटिल vrfyफ़ंक्शन को कभी नहीं कहा जाता है, बल्कि मज़ेदार दिखने वाला vfryमैक्रो। प्रीप्रोसेसर की स्ट्रिंग कॉन्फैक्शन सुविधा का उपयोग इस तथ्य को उजागर करता है कि हम वास्तव में सिर्फ समानता की जांच कर रहे हैं __LINE__


साथ ही काम भी करता हैtcc -run
Vi।

यह वास्तव में साफ है। यह vfryवास्तव में मुझे स्टम्प्ड फ़ंक्शन परिभाषा में विस्तारित नहीं है।
FUZxxl

11

सी

जब तक रिक्त लाइन foo = 5;को हटाया नहीं जाता है , तब तक यह कार्यक्रम अपेक्षित (टिप्पणियों में वर्णित) के अनुसार काम करता है।

अफसोस की बात है, मुझे एक बार उत्पादन कोड में लगभग एक त्रुटि का सामना करना पड़ा।

#include <stdio.h>

int main()
{
    int foo = 0;

    #define FROB(x) do {                                            \
        x++;                                                        \
        printf("%d\n", x);                                          \
    } while (0);                                                    \

    foo = 5;
    FROB(foo); /* prints 6 */
    FROB(foo); /* prints 7 */
    FROB(foo); /* prints 8 */

    return 0;
}

यह उदाहरण do { ... } while (0)एक मैक्रो में एक बहुभाषी बयान बनाने के लिए मुहावरे का उपयोग करता है (देखें https://stackoverflow.com/questions/257418/do-ORE-0-what-is-it-good-for )। यह बैकस्लैश चरित्र का उपयोग #defineकई लाइनों पर फैलने के लिए करता है , जो आसानी से दृष्टि से बाहर पंक्तिबद्ध होता है। हालाँकि, यह दो तरह की गलतियाँ भी करता है:

  • बाद में एक अर्धविराम होता है while (0), जबकि मुहावर आमतौर पर इसे छोड़ देता है
  • की अंतिम पंक्ति के बाद एक बैकस्लैश है #define

जगह में इस से पहले रिक्त पंक्ति को हटाने के साथ foo = 5;कारणों कि काम निष्पादित किया जाना है के बादprintf , लेकिन यह भी के बाद हर के आह्वान FROBमैक्रो। परिणामस्वरूप, रिक्त लाइन को हटाने के बाद आउटपुट है:

1
6
6

1
मूल रूप से codegolf.stackexchange.com/a/31662/20356
21

@ TheRare लेकिन यह कम स्पष्ट है।
यपनीपं

6
यह केवल कम स्पष्ट है यदि आप उन बैकस्लैश को नहीं देखते हैं जो बहुत ही सही तरीके से सही तरीके से तैर रहे हैं। (लेकिन जब से वे बहुत ही सही
ढंग से

3
हालांकि, सभी लेकिन उनमें से एक उचित हैं
क्वाडमास्टरएक्सएलआई

6
@QuadmasterXLII, तकनीकी रूप से, वे सभी उचित हैं - सही-सही, सटीक होने के लिए।
मार्क

9

C / C ++

int main(){

    return __LINE__ - 3;
}

सफलता लौटाता है और इसे सच के लिए कार्यान्वयन के रूप में इस्तेमाल किया जा सकता है । यदि खाली लाइन हटा दी जाती है तो आप इसे गलत के बजाय कार्यान्वयन के रूप में उपयोग कर सकते हैं ।


8

शक्ति कोशिका

यह फ़ंक्शन दो नंबर जोड़ देगा।

function add ($a, $b) {
    $numbers = @($a `

            $b)
        $numbers| measure -sum| select -expand sum
}

रिक्त लाइन को हटाने से फ़ंक्शन विफल हो जाएगा: Unexpected token '$b' in expression or statement.

व्याख्या

ऐरे तत्वों को न्यूलाइन और / या कॉमा से अलग किया जा सकता है। लाइन निरंतरता चरित्र रखने ( `) के बाद $aअलग करने के लिए एक अतिरिक्त नई लाइन की आवश्यकता होती है $aऔर $b। अन्यथा, दुभाषिया कोड को $numbers = @($a $b)(कोई तत्व विभाजक) नहीं मानता है।


7

टेक्स

\noindent\everypar{$\bullet$ hello }

world
\bye

खाली लाइन के बिना, "हैलो" मुद्रित नहीं है।

व्याख्या

टीईएक्स खाली लाइन को पैराग्राफ ब्रेक के रूप में मानता है, और \everyparएक नए पैराग्राफ की शुरुआत में निष्पादित किया जाता है।


6

जावा

import java.util.Scanner;

public class BlankLine
{
    public static void main( String[] args )
    {
        //This calculates 2^ given number
        //if you remove blank line after the next line it will always print 1
        int x = new Throwable().getStackTrace()[0].getLineNumber();

        int y = new Throwable().getStackTrace()[0].getLineNumber() - x;
        System.out.println("Number:");
        Scanner scanner = new Scanner(System.in);
        int r = 1;
        int n = scanner.nextInt();

        for(int i = 0; i < n; i++){
            r *= y;
        }
        System.out.println("2^number: "+r);
    }
}

x वर्तमान लाइन संख्या है, y वर्तमान लाइन संख्या है - x। यदि उनके बीच रिक्त रेखा है तो परिणाम 2 है। इसलिए कोड 2 ^ संख्या की गणना करता है।


1
+1 केवल इसलिए कि यह जावा है, हालांकि कोड रिव्यू के लगातार आगंतुक के रूप में मुझे आश्चर्य है कि आप उपयोग क्यों नहीं कर रहे हैं Math.pow?
साइमन फोर्सबर्ग

क्योंकि मेरे कोड को कुछ करना होगा। 2 संख्याओं को जोड़ना थोड़ा सरल है।
barteks2x

Math.powपरिणाम का उपयोग करना और प्रिंट करना भी कुछ कर रहा है क्या यह नहीं है?
साइमन फोर्सबर्ग

और अब मुझे एहसास हुआ कि मैं वास्तव में उपयोग कर सकता हूं। मैथ.पाउ मुझे नहीं पता कि मुझे क्यों लगा कि मुझे इसे इस तरह से करने की आवश्यकता है ... मैटेब मैं इसे "डरपोक" तरीके से करना चाहता था।
barteks2x

7
आप बहुत अधिक गोल्फ कर रहे हैं। आपको कोड रिव्यू पर जाना चाहिए बजाय इसके कि हम चीजें सही करें!
साइमन फोर्सबर्ग

6

पर्ल ५

print(<<""
Hello, World!

);

यह कोड प्रिंट करता है Hello, World!। रिक्त रेखा को हटाने के बजाय एक सिंटैक्स त्रुटि देता है।

स्पष्टीकरण:

मल्टी-लाइन स्ट्रिंग्स के लिए पर्ल का यहाँ-डॉक्टर सिंटैक्स एक खाली टर्मिनेटर स्ट्रिंग की अनुमति देता है। यह स्पष्ट रूप से प्रलेखित है। रिक्त पंक्ति को हटाने से बंद कोष्ठक का कारण बनता है (और बाकी सब अगली पंक्ति तक, अगर वहाँ एक है) स्ट्रिंग के हिस्से के रूप में व्याख्या की जाए, जिससे एक वाक्यविन्यास त्रुटि हो सकती है।

इस तरह के ऑडबॉल सिंटैक्स फ़ीचर के लिए आपको मिलने वाले त्रुटि संदेश वास्तव में बहुत सभ्य होते हैं। यदि print(<<""लाइन के बाद प्रोग्राम में बिल्कुल भी खाली लाइनें नहीं हैं , तो पर्ल बस कहता है:

Foo.pl लाइन 1 पर EOF से पहले कहीं भी स्ट्रिंग टर्मिनेटर नहीं पाया जा सकता है।

अगर वहाँ है कार्यक्रम के अंत में एक खाली पंक्ति, तो आप इस बजाय की तरह कुछ मिलता है:

EOF पर foo.pl लाइन 4 पर सिंटैक्स त्रुटि
  (एक भगोड़ा मल्टी लाइन हो सकता है << पंक्ति 1 पर शुरू)
संकलन त्रुटियों के कारण foo.pl का निष्पादन समाप्त हो गया।


5

जत्था

@echo off
setLocal enableDelayedExpansion
set NL=^


echo Hello!NL!World

यह कोड आउटपुट Helloऔर अगली पंक्ति पर होगा World। जब या तो या दोनों खाली लाइनों को हटा दिया जाता है, तो यह कुछ भी नहीं आउटपुट करता है।

यहाँ एक स्पष्टीकरण है


4

माणिक

पहली पंक्ति के विलोपन के कारण त्रुटि होगी:

line = IO.readlines($0).first.chomp if line.empty? puts 34+4 else raise "Please add a newline at the beginning of the program." end

2
मुझे त्रुटि संदेश पसंद है। किसी ऐसे व्यक्ति की प्रतिक्रिया देखना चाहेंगे जो कार्यक्रम को चलाने की कोशिश करता है और उस प्रतिक्रिया को प्राप्त करता है।
tomsmeding

4

अजगर

पता नहीं कि यह मानक खामियों के तहत आता है, मैंने सूची को देखा और यह नहीं देखा।

src = open(__file__, 'r')
code = src.readlines()
src.close()

if code[3] == '\n':
    print 'Hello World!'

यह नियमित रूप से चल रहा है

Hello World!

लाइन 4 पर रिक्त लाइन के बिना इसे चलाना, अर्थात नीचे की तरह:

src = open(
__file__, 'r')
code = src.readlines()
src.close()
if code[3] == '\n':
    print 'Hello World!'

कुछ नहीं देता।


3

अजगर 2.x

यह प्रोग्राम इनपुट किए गए स्ट्रिंग के पांचवें वर्ण को आउटपुट करता है।

import inspect

text = raw_input()
print 'Fifth character of the string:', text[inspect.getlineno(inspect.currentframe())]

यह किसी भी तरह से छिपा नहीं है। यदि आप खाली रेखा को हटाते हैं, तो यह एक जोड़ने पर चौथा वर्ण और छठा देता है।


3

Tcl

एक फ़ंक्शन जो दो नंबर जोड़ता है (और जांचता है कि क्या नई लाइन हटा दी गई है):

proc add {a b} {
    if {[llength [split [info body add] \n]] < 5} {error "function has been modified"}

    return [expr $a+$b]
}

यहां छिपाने के लिए कुछ भी नहीं है, यह वही करता है जो यह कहता है, इसलिए मैं स्पष्टीकरण को खराब नहीं कर रहा हूं। फ़ंक्शन infoआत्मनिरीक्षण का एक स्विस सेना चाकू है (जिसे अन्य भाषाएं प्रतिबिंब कहते हैं)। info bodyकिसी फ़ंक्शन का स्रोत कोड लौटाता है (यदि C या असेंबली में नहीं लिखा गया है)।

मुझे यह स्वीकार करना होगा कि जब तक मैंने जावास्क्रिप्ट समाधान को नहीं देखा था, तब तक यह मुझे रोक दिया था।


3

सी

#include <stdio.h>


int main() {
    const char* a = "You love blank lines.";
    #define print_out(a) \

    printf("%s\n", a);
    a = "You don't seem to love blank lines";
    print_out(a);
    return 0;
}

रिक्त लाइन के साथ, aस्थानीय चर है और इसके बिना मैक्रो पैरामीटर ...


3

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

HTTP/1.x 200 OK 
Content-Type: text/html; charset=UTF-8

Hello world!

दूसरी ओर, यह विफल हो जाएगा क्योंकि यह शीर्ष लेख के बाद रिक्त स्थान को याद कर रहा है।

HTTP/1.x 200 OK 
Content-Type: text/html; charset=UTF-8
Hello world!

2

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

फ़ंक्शन whereamiकॉलिंग लाइन की स्थिति के साथ प्रतिक्रिया करता है, स्रोत कोड में अपनी स्थिति के सापेक्ष।

console.log (whereami ()) //3 line(s)  before me 


function whereami () {
    var a=function a(e){try{to}catch(c){for(var d=c.stack.split("\n"),b=0;b<d.length&&!~d[b].indexOf("a");b++);return c.stack.split("\n")[b+~~e].match(/:(\d+)/)[1]-~~window.hasOwnProperty("__commandLineAPI")}},a1=a(1),i


    i= a(2)>a(1)+4?a(1):a(1)>a1+2?a1-1:a/a1



    return ((i=(a(2)<i?i-1:a(1)>i+3?a(2)-a(1)-1:a/1)) + " line(s) "   ) + (i<a(2)?" after":(i>=a(2)?" before":"confusing")) + " me";
}


console.log (whereami ()) //3 line(s)  after me

यदि whereamiफ़ंक्शन में कोई रिक्त रेखा हटा दी जाती है। आउटपुट है NaN line(s) confusing me(लाइनों को जोड़ने से यह नहीं टूटता)

यह वास्तव में केवल गिनती करता है कि iक्रमशः और पहली और अंतिम पंक्ति के बीच कितनी रेखाएँ हैं । यदि वे किसी दिए गए मूल्य के अंतर्गत आते हैं। संदर्भ रेखा सेट की गई है, NaNजो न तो संतुष्ट है NaN<callingLineऔर न ही NaN>=callingLine। मैंने इसे अप्राप्य टर्नरी अभिव्यक्तियों में थोड़ा छिपाने की कोशिश की।


1
ठंडा। मैंने उस तरह के अपवाद का उपयोग करने के बारे में नहीं सोचा था।
ndcore

2

पर्ल

#!/usr/bin/perl

use strict;
use warnings;

open IN, "<".$0 or die "Did not find input files!";
while (<IN>) {
        m/blabla/ && ((<IN> =~ /\}/ && print "tra-la-la...\n") || print "ti-ri-li\n");

}
close IN;

यह पर्ल स्क्रिप्ट स्क्रिप्ट फ़ाइल को पढ़ेगी और जांच करेगी कि "ब्लाबला" वाली लाइन के बाद क्लोजिंग ब्रैकेट है या नहीं।


2

Escript

escriptकार्यान्वयन में बग के कारण वैध एसेप्ट में कम से कम तीन लाइनें लंबी और पहली पंक्ति के लिए शेबंग लाइन या खाली लाइन होना चाहिए। लिपि का अनुसरण करने के लिए दो खाली रेखाएँ हैं जहाँ पहले एक को पहले एक होना चाहिए:

main(_) -> io:format("Hello world!~n", []), halt().

या इसे दो लाइनों में तोड़ दिया जाना है लेकिन अभी भी पहली खाली लाइन है।

main(_) ->
    io:format("Hello world!~n", []), halt().

नहीं तो तुम पाओगे

escript: Premature end of file reached

2

माणिक

print %q
2+2=

p(2+2)

प्रिंट करता है 2+2=4, लेकिन रिक्त तीसरी पंक्ति के बिना एक सिंटैक्स त्रुटि देता है। %qकिसी भी गैर-शब्द चरित्र को एक स्ट्रिंग सीमांकक के रूप में सेवा करने की अनुमति देता है, यहां तक ​​कि न्यूलाइन वर्ण भी। तो कोड की पहली तीन पंक्तियाँ वास्तव में print %q"2+2="या इसके बराबर हैं print "2+2="। चूंकि न्यूलाइन के बाद 2+2=एक उद्धरण सीमांकक के रूप में उपयोग किया जा रहा है, इसलिए इसे एक लाइन सीमांकक के रूप में भी पार्स नहीं किया गया है , इसलिए आपको तुरंत बाद एक और की आवश्यकता है।


1

अनिद्रा (दोनों संस्करण)!

Þyoo

â

यह कोड एक ~ प्रिंट करता है (यह मत पूछो, अनिद्रा क्यों अजीब है)। यदि आप रिक्त पंक्ति को हटाते हैं, तो यह remove के बजाय line प्रिंट करता है।

वैसे वह पहला अक्षर कांटा है


1
हुर्रे, कांटे! उम्र में उस चरित्र को नहीं देखा, +1।
एडिसन क्रम्प

0

सी ++

यह एक क्लासिक और बल्कि गूंगा ट्रिक है। आपको पता चल जाएगा कि यह क्या है जब आप इसे देखते हैं, यह सिर्फ यहां पूरा होने के लिए है। जैसे, मैं इसे एक समुदाय विकी उत्तर के रूप में चिह्नित कर रहा हूं।

int main() {
    //This program won't work without the next line, why??/

    return 1;
}

यह क्यों काम करता है


13
यह वास्तव में खामियों में से एक है।
मध् यम

@ मैं जानता नहीं था। किसी भी तरह से, मुझे पता है कि लोग हमेशा इस प्रकार के प्रश्न में इसका उपयोग करते हैं, और मैं बस इसे यहाँ छोड़ना चाहता था ताकि कोई ऐसा करने के लिए इसे चतुर न समझे।
एनिअस

1
यह उत्तर दो कारणों से गलत है। पहला यह है कि ??/इसका मतलब है \​, ??//इसका मतलब है \/, और जैसा कि लाइन में समाप्त नहीं होता है \​, कोई रेखा निरंतरता नहीं है। दूसरा यह है कि व्यवहार बिल्कुल वैसा ही है, चाहे return 0;वह निष्पादित हो, क्योंकि मानक व्यवहार तब होता है जब mainसमापन तक पहुंचता है }
hvd

@hvd वहाँ। मैंने ठीक कर दिया।
अयनस

3
@ I know people always use this in these kinds of questionइसीलिए हमने इसे एक मानक खामियाजा बना दिया
भूमिगत

0

इसे HTML फ़ाइल में पेस्ट करें, और इसे अपने ब्राउज़र में खोलें। यह बहुत आसान है, लेकिन थोड़ा मुश्किल है क्योंकि यह दस्तावेज़ में रिक्त लाइनों की संख्या लेता है और एक फ़ंक्शन को कॉल करने के लिए एक सरणी अनुक्रमित करता है जो एक अलर्ट दिखाता है।

<body>
<script>
[null, function(){alert("GIVE ME MY LINE BACK")}, function(){alert("2 + 2 = " + (2+2))}][document.body.innerHTML.split("\n\n").length]()

</script>
</body>

यह एक सीमावर्ती नियम है। तकनीकी रूप से जावास्क्रिप्ट में मल्टीलाइन स्ट्रिंग्स नहीं है, जो इस काम का एकमात्र कारण है।

क्योंकि आप एक स्क्रिप्ट टैग में एक वाक्यविन्यास त्रुटि कर सकते हैं, अन्य स्क्रिप्ट टैग के साथ हस्तक्षेप किए बिना यह केवल पृष्ठ पर एक त्रुटि होने पर सकारात्मक परिणाम दिखाता है। त्रुटि दूसरी चेतावनी को फायरिंग से रोकती है क्योंकि यह एक ही स्क्रिप्ट टैग में है।

<body>
<script>
window.onerror=function(){
  alert("2 + 2 = " + (2+2));
}
</script>
<script>
var a = "\

";
alert("GIVE ME MY LINE BACK!");
</script>
</body>

0

माणिक

puts (% #{ARGV[0].to_i + ARGV[1].to_i}

)

रहस्य यह है कि न्यूलाइन, वास्तव में एक टैब है, फिर एक नई लाइन। मुझे नहीं पता कि यह मायने रखता है लेकिन मुझे लगा कि यह क्लीवर है। के बाद का वर्ण %भी एक टैब है, लेकिन किसी कारण से यह एक जैसा नहीं दिखता है। मैं एक स्ट्रिंग बनाने के लिए रूबी के प्रतिशत अंकन का उपयोग कर रहा हूं, जो स्क्रिप्ट में दिए गए पहले 2 तर्कों को जोड़ता है। यहाँ उस पर और अधिक है: http://teohm.com/blog/2012/10/15/start-using-ruby-percent-notcent/


यह वास्तव में गणना नहीं करता है, निर्देशों को पढ़ें: "कोई व्हाट्सएप मूर्खता नहीं।" सटीक रूप से एक \nउपस्थित होना चाहिए और कार्यक्रम के काम के लिए अपेक्षित रूप से महत्वपूर्ण होना चाहिए।
नैफुली के

आह ठीक है :( अच्छी तरह से मैंने कोशिश की
Addison

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