कोड के एक टुकड़े को प्रिंट / आउटपुट स्टेटमेंट के लाइन नंबर को आउटपुट करने के लिए स्वयं लिखें ("हैलो वर्ल्ड, लाइन एक्स से!")


25

चुनौती

एक प्रोग्राम लिखें , जो वास्तविक प्रिंट स्टेटमेंट के स्रोत कोड में, लाइन नंबर Hello World, from line X!कहां Xहै।

नियम

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

अनुशंसाएँ

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

विजेता

  • यह एक लोकप्रियता प्रतियोगिता है (10 जून 2014 को समाप्त हुई), जहां समुदाय द्वारा सबसे अधिक मतदान किए जाने वाले उत्तर को मौजूदा वोटों के आधार पर विजेता घोषित किया जाएगा।

  • मतदान करते समय, कृपया किसी के उत्तर की रचनात्मकता पर विचार करें, यह कितना विस्तृत या दिलचस्प है। और प्रोग्रामिंग भाषा की कठिनाइयों / बाधाओं का उपयोग किया जा रहा है


"पहली पंक्ति संख्या" से आपका क्या अभिप्राय है? क्या आप इस बारे में बात कर रहे हैं कि यदि कथन कई पंक्तियों में फैला हुआ है तो क्या होना चाहिए?
user2357112

@ user2357112 हां, अगर किसी को भी एक लाइन-लाइन स्टेटमेंट का उपयोग करने की आवश्यकता है, तो किसी भी अस्पष्टता को हल करने के लिए।
ब्रेकथ्रू

शीर्षक बहुत स्पष्ट है, लेकिन शायद थोड़ा लंबा है।
प्रिमो

1
इस के जवाब सभी उबाऊ हैं क्योंकि यह इतना बुरा सवाल है। यह ऐसा है जैसे पूछने वाले को LINE के अस्तित्व का पता नहीं था । वास्तव में मैंने वोट देने के लिए विशेष रूप से साइन अप किया था, मुझे लगा कि यह बहुत बुरा था।
डेव

1
@Markasoftware यदि इससे पहले एक लाइन जोड़ी गई थी, तो आउटपुट इसे प्रतिबिंबित करने के लिए नहीं बदलेगा।
प्रिमो

जवाबों:


48

सिंक्लेयर बेसिक

10 PRINT "Hello world, from line ";PEEK 23621;"!"

नमस्ते दुनिया, लाइन 10 से!

यह किसी भी लाइन के PEEKलिए वर्तमान लाइन नंबर को स्टोर करने वाले पते पर काम करेगा, इसलिए निम्नलिखित भी काम करेगा:

341 PRINT "Hello world, from line ";PEEK 23621;"!"

नमस्ते दुनिया, लाइन 341 से!


और इसी टोकन के द्वारा Timex / Sinclair BASIC!
गब

मैं इस भाषा को जानने का दिखावा नहीं करता, लेकिन STR$अगर आप +सेमीकोलन द्वारा संकेतों को प्रतिस्थापित करते हैं तो क्या आप इसे नहीं छोड़ सकते ?
श्री लिस्टर

@MrLister हाँ, यह निश्चित रूप से काम करेगा लेकिन मैं हमेशा +आदत से एस का उपयोग करता हूं ।
किटकार २२

40

बेसिक

मुझे लगता है कि यह वह सब कुछ करता है जो इसके लिए पूछा गया था:

10 PRINT "Hello World, from line 10!"

5
If any additional whitespace or statements (which do not interrupt the flow of the code) is added to the source code, it should be reflected at run-time (after compiling if applicable)। आशय है। इसके अलावा, स्रोत की पहली पंक्ति 10 वीं नहीं है।
बिल वुडगेर

30
यह स्रोत कोड में पहली पंक्ति हो सकती है, लेकिन यह अभी भी 10 पंक्ति है
स्क्वीश ossifrage

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

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

2
चतुर, लेकिन मैं निराश होऊंगा अगर इससे ज्यादा कुछ नहीं हुआ।
agweber

35

जावा

public class Hello{
    public static void main(String[] args) {
        System.out.println("Hello World, from line "+new Exception().getStackTrace()[0].getLineNumber()+"!");
    }
}

1
मैं पसंद करूँगाThread.currentThread().getStackTrace()
क्रंचर

3
Thread.getStackTrace () कॉल (नया अपवाद ())। getStackTrace () यदि वर्तमान थ्रेड पर कहा जाता है, तो यह एक ही बात है
DHall

1
अजीब .... 2x समान उत्तर और 2 अलग-अलग मात्राएँ ... (RNG स्रोत के रूप में इस्तेमाल की जा सकती हैं ...) (वही यहाँ: codegolf.stackexchange.com/a/30058/10801 )
masterX244

@ masterX244 वे दो उत्तर बिल्कुल समान नहीं हैं ; यह एक getLineNumber()स्टैक ट्रेस पर विधि का उपयोग करता है , जबकि आपके द्वारा लिंक किए गए उत्तर toString()को लाइन नंबर खोजने के लिए उपयोग किया जाता है।
ब्रेकथ्रू

9
@ masterX244 यह भी ध्यान देने योग्य है कि यह उत्तर 2 घंटे पहले दिखाई दिया था। दूसरी बार जब मुझे कोई उत्तर दिखाई देता है, तो वह पहले जैसा दिलचस्प नहीं होता।
प्रिमो

30

पर्ल

close STDERR;
open FOOBAR,">",\$_;


print!warn,'Hello World, from line ',/(\d+)\.$/,'!';

उपयोग करने में उतना छोटा नहीं है __LINE__, लेकिन शायद अधिक दिलचस्प है।

warnएक डिबगिंग टूल है, जो एक स्टेटमेंट जारी करता है, जिसमें STDERRदिखाया गया है कि किस फाइल में, और किस लाइन पर चेतावनी जारी की गई है ... जब तक STDERR कि पहले बंद नहीं किया गया है या अन्यथा दुर्गम है, जिस स्थिति में सबसे हाल ही में खोली गई फ़ाइल के लिए चेतावनी जारी की गई है संभाल - यह अनैच्छिक व्यवहार है। मुझे यकीन नहीं है कि यह एक फीचर या बग के रूप में बेहतर वर्गीकृत होगा।

यहां, STDERRबंद किया गया है, और एक नया फ़ाइल हैंडल जो पहचाना गया FOOBARहै, को खोला गया है, और चर पर रूट किया गया है $_। इसके बाद चेतावनी की लाइन संख्या को पुनः प्राप्त करने के लिए पार्स किया जाता है, जिसे प्रिंट स्टेटमेंट में एम्बेड किया जाता है।


3
हां, यह निश्चित रूप से अधिक दिलचस्प है :)
ताल

27

सी ++

#include <iostream>
#include <utility>
#include <type_traits>

#define __(A,B,C,...) B##C##A
#define _(A,...) __(__VA_ARGS__, A)
template<unsigned...Is> struct v;
template<unsigned I0, unsigned... Is> struct v<I0, Is...>:v<I0-1,I0-1, Is...> {};
template<unsigned...Is> struct v<0,Is...>:std::integral_constant<unsigned, sizeof...(Is)> {};

int main() {
  std::cout << "Hello world from line " << v<_(EXTRACT,_(Q,_,E,_,$$main$$,),_(@22,,_,_),_(Z,N,L,I,_,,L),__STACK_TRACE__)>::value << "\n";
}

जीवंत उदाहरण


2
यह है ... जादूगर
पलाडिन

1
यह मुझे बहुत समय लगा, यह देखने के लिए कि यह कैसे काम करता है। कई लाल झुंड! यह स्वादिष्ट है।
सेह

1
तो यह कैसे काम करता है?
0x499602D2


16

सी#

C # 5.0 की [CallerLineNumber]चाल है:

using System;
using System.Linq;
using System.Runtime.CompilerServices;
namespace LineNumberConsole
{
    class Program
    {
        public static void Main()
        {
            Console.WriteLine("Hello World, from line {0}!", ToRoman(GetLineNumber()));
            Console.ReadLine();
        }

        private static int GetLineNumber([CallerLineNumber] int sourceLineNumber = 0)
        {
            return sourceLineNumber;
        }

        private static string ToRoman(int number)
        {
            // TODO: Copy some source code from http://pastebin.com/w0hm9n5W
            // Skipped here for brevity
            return number.ToString();
        }
    }
}

उत्पादन

Hello World, from line X!

रोमन अंकों का उपयोग करने का कोई विशेष कारण?
कोल जॉनसन

4
जब मुद्रण रेखा 10 रेखा होती है, तो प्रश्न की व्याख्या शाब्दिक रूप से की जाती है। Xरोमन अंकों में है 10
Οसुर

रोमन अंक एक अच्छा स्पर्श है!
NPSF3000

15

सी

#include <stdio.h>
main(){
printf("Hello World, from line %d!", __LINE__);
}

LINE जैसे परिभाषित चर का उपयोग करना , हालांकि नियमों द्वारा अनुमत है, हतोत्साहित किया जाता है।
vaxquis

@vaxquis, हां, लेकिन मेरा उत्तर भविष्यवाणी करता है कि प्रश्न को संपादित करें
gnibbler

यह अभी भी एक घटिया और बहुत स्पष्ट समाधान IMO है। मैं सोच रहा हूं कि लोगों ने दुनिया की सभी भाषाओं में (PHP, D, पर्ल सहित) इस समाधान के सभी प्रकार के रूपांतर क्यों पोस्ट किए, यहां तक ​​कि कुछ भी दूर से हास्यास्पद या पेचीदा करने की कोशिश कर रहे हैं?
vaxquis

14

अजगर

उदाहरण (10 पंक्ति, 213 वर्ण):

import sys
import traceback
lineno = None
while True:
    try:
        print 'Hello World, from line %d!' % lineno
        break
    except:
        lineno = traceback.tb_lineno(sys.exc_info()[2])
        continue

यहाँ ऑनलाइन कोशिश करें । गैर-प्रवाह परिवर्तन कोड और व्हाट्सएप को जोड़ा जा सकता है और कार्यक्रम अद्यतन लाइन काउंट प्रदर्शित करेगा, और इसी तरह, इस कोड स्निपेट का उपयोग किसी मौजूदा कार्यक्रम में भी किया जा सकता है। अपेक्षित उत्पादन:

Hello World, from line 6!

एक अन्य उदाहरण (यहां ऑनलाइन प्रयास करें) यह दिखाने के लिए कि यह कोड / व्हॉट्सएप जोड़े जाने पर काम करता है। अपेक्षित उत्पादन:

Down we go...
Gotta catch 'em all.
Down we go...
Hello World, from line 11!
Awesome!

12

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

function getLine(n) {
   try {
      to
   } catch (dat) {
      var stack = dat.stack.split('\n');
       for (var i = 0; i < stack.length; i++) {
           if (~stack[i].indexOf ('getLine')) break;          
       }
      return dat.stack.split ('\n')[i + ~~n].match (/:(\d+)/)[1] - ~~window.hasOwnProperty ('__commandLineAPI')
   }
}
//Line 12
console.log ('Hello World, from line ' + getLine(1) + ' !')

नोट: क्रोम देव कंसोल के भीतर से मूल्यांकित एक्सप्रेशन को एक withस्टेटमेंट में लपेटा जाएगा । इस प्रकार यदि हमें ऐसा हो तो हमें एक-एक करके रेखा को घटाना होगा


2
डाट ढेर , हे। फ़ायरफ़ॉक्स पर काम कर रहे सत्यापित।
तोड़

1
@ क्रेकथ्रू :) हाँ यह क्रॉस-ब्राउज़र (केवल नवीनतम क्रोम, एफएफ, आईई के साथ परीक्षण किया गया) का काम करता है। कंसोल के भीतर से मूल्यांकन करने पर क्रोम को विशेष उपचार की आवश्यकता होती है, क्योंकि यह प्रत्येक स्टेटमेंट को withक्लॉज में लपेटता है ।
C5H8NNaO4

2
दिलचस्प लेकिन अस्पष्ट उपयोगकर्ता नाम। मोनोसोडियम ग्लूटामेट, शायद? (BTW, मैं डीएनए और अमीनो एसिड पर एक सवाल करने की सोच रहा हूं, जिसमें से ग्लूटामिक एसिड एक है।)
लेवल रिवर सेंट

@steveverrill Google के अनुसार, आप सही हैं !
किटकार २२

@ kitcar2000 शायद। लेकिन इस सूत्र के साथ अन्य कम-ज्ञात यौगिक हैं: उदाहरण के लिए सोडियम मिथाइलस्पार्टेट या नाइट्रोपेंटानोएट।
स्तर नदी सेंट

11

अजगर ३

import hashlib
with open(__file__) as f:
    line_num = 0
    for line in f.readlines():
        line = line.rstrip() # make it work with or without newline at the end
        line_num += 1
        if hashlib.sha256(bytes(line, "UTF-8")).hexdigest()[0:6] == 'cc46f7':
            print('Hello world, from line {}!'.format(line_num)) # cc46f7

नमस्ते दुनिया, लाइन 8 से!

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


क्या आप सिर्फ लाइन_num = -1 को सेट नहीं कर सकते हैं और लूप के बाहर प्रिंट कर सकते हैं और मैजिक हैश की सवारी कर सकते हैं?
डेव

1
@ मुझे यकीन नहीं हुआ कि मैं आपका अनुसरण करूंगा। जादू हैश है जो इस समाधान को चतुर बनाता है।
टिम एस।

मेरे नियमों की शाब्दिक व्याख्या के लिए +1 :) बहुत चालाक।
ब्रेकथ्रू

5
@Stefan यह साइट सबसे बुरी प्रथाओं के बारे में है, हालांकि। ;)
टिम एस।

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

9

ग्नू कोबोल

खैर, उन्होंने कहा कि यह नहीं किया जा सकता है। दरअसल, यह मैं ही था जिसने कहा कि यह नहीं किया जा सकता है। अब यह किया गया है, और एक अप्रचलित भाषा सुविधा लागू की गई विधि का उपयोग करके फिर से लागू की गई है।

प्रश्न कहता है:

यदि कोई अतिरिक्त व्हाट्सएप या स्टेटमेंट (जो कोड के प्रवाह को बाधित नहीं करता है) स्रोत कोड में जोड़ा जाता है, तो इसे रन-टाइम (यदि लागू हो तो संकलन करने के बाद) पर प्रतिबिंबित किया जाना चाहिए।

सामान की किसी भी राशि डाला जा सकता है तीन से पहले DISPLAYरों जो उत्पादन के शुरू होने से, और कुछ भी कारण के बादDISPLAY रों होगा, ताकि के ठीक "कोड के प्रवाह को बाधित किया"।

COBOL में एक TRACEक्रिया (कथन) होता था, जिसे केवल स्रोत पंक्ति-संख्याओं के रूप में सूचीबद्ध किया जाता था क्योंकि उन्हें निष्पादित किया जाता था (कार्यक्रम में लाइन संख्या तक पहुंच नहीं)। सीमित उपयोग के बावजूद, मैंने TRACE का कार्यान्वयन शामिल किया है।

   ID Division.
   Program-ID. HIWHERE.
   ENVIRONMENT DIVISION.
   configuration section.
          source-computer. TinkerToy with debugging mode.
   Procedure Division.
   Declaratives.
   Debug-Declaratives Section.
       Use For Debugging on a b
       .
   Debug-Declaratives-Paragraph.
       Display Debug-Line "!"
       .
   End Declaratives
       .
   Main-Program Section.
       DISPLAY "Perform"
       Display "Hello World, from line " no advancing Perform b
       display "GO TO"
       Display "Hello World, from line " no advancing GO TO a
       .
   a.
       dISPLay "Fall through"
       Display "Hello World, from line " no advancing. b.
   The-Last-bit-OF-the-PROGRAM.
       GOBACK
       .

आउटपुट है

Perform
Hello World, from line     18!
GO TO
Hello World, from line     20!
Fall through
Hello World, from line     23!

भाषा लिखने की शक्ति और लचीलेपन की एक प्रदर्शनी के रूप में, यह उदाहरण एक ही समय में मिश्रित-केस, पूरी तरह से लोअरकेस और पूरी तरह से अपरकेस का उपयोग करता है। इससे कोई फर्क नहीं पड़ता, जब संसाधित किया जाता है, तो सब कुछ UPPERCASE में "फोल्ड" हो जाता है।

चल रहे प्रोग्राम से स्रोत लाइन-नंबर पर चलने के लिए एकमात्र मानक COBOL तरीका, प्रोग्राम के साथ है DEBUGGING DECLARATIVE। क के भीतर SECTION, क के भीतर एक पैराग्राफ के भीतर कड़ाई से SECTION, इस तरह के एक घोषणापत्र के लिए आपके पास विशेष-रजिस्टर तक पहुंच है DEBUG-LINE। इसमें क्रिया (विवरण) का स्रोत लाइन-नंबर होता है जो एक विशेष प्रक्रिया-नाम (पैराग्राफ या SECTION) पर नियंत्रण के हस्तांतरण का कारण बनता है ।

तो, के साथ PERFORM, या GO TO, या डिबगिंग declaratives में पैरा "के माध्यम से गिरावट" SECTIONनिष्पादित किया जाता है।

ठीक है, लेकिन DISPLAYनियंत्रण के हस्तांतरण का कारण नहीं बनता है।

कोई बात नहीं। इसे नियंत्रण के हस्तांतरण के रूप में एक ही पंक्ति पर रखें ।

समस्या, चूंकि "किसी भी अतिरिक्त व्हाट्सएप या स्टेटमेंट (जो कोड के प्रवाह को बाधित नहीं करते हैं) को स्रोत कोड में जोड़ा जाता है, इसे रन-टाइम (यदि लागू हो तो संकलन करने के बाद) में परिलक्षित होना चाहिए"।

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

अंतिम मुश्किल बिट "गिरने के माध्यम से" के लिए है ("प्रक्रियाएं" PERFORMएड हो सकती हैं GO TO, एक का लक्ष्य हो सकता है , या बस अगली पंक्ति के साथ दर्ज किया जा सकता है)। इस उदाहरण में, DISPLAY उस पंक्ति को रखें जो प्रक्रिया को परिभाषित करती है, लेकिन परिभाषा के सामने

"प्रक्रियाओं" ( aऔर b) के नामों को गंभीर रूप से छोटा कर दिया गया है ताकि उन्हें उसी स्रोत-रेखा पर फिट होने दिया जा सके DISPLAY। सख्ती से एक COBOL प्रक्रिया-नाम कॉलम आठ से कॉलम 11 तक कहीं शुरू होना चाहिए। हालांकि, वाक्यविन्यास, इन दिनों, इसके बारे में बहुत अधिक आराम है। इस हद तक कि मैं उसी कोड पर एक प्रक्रिया नाम को कुछ कोड के रूप में परिभाषित कर सकता हूं। यहां तक ​​कि कोड में एम्बेडेड। देखभाल, और एक सामयिक पूर्ण विराम की आवश्यकता है।

में PROCEDURE DIVISIONप्रत्येक पूर्ण रोक से पता चला की आवश्यकता है, और कोई और अधिक कर रहे हैं।

संकलन करना:

cobc -x -g hiwhere.cbl

निष्पादित करने के लिए (linux):

COB_SET_DEBUG=Y ./hiwhere

अंत में, TRACE की वापसी (READY / RESET के बिना)।

   ID Division.
   Program-ID. tRacE.
   ENVIRONMENT DIVISION.
   configuration section.
          source-computer. TinkerToy with debugging mode.
   Procedure Division.
   Declaratives.
   Debug-Declaratives Section.
       Use For Debugging on a
       .
   Debug-Declaratives-Paragraph.
       Display Debug-Line
       .
   End Declaratives
       .
   Main-Program Section.
  *    Just append "perform a" to a single-line statement.
       DISPLAY "1" . perform a
       Display "2" . perform a
       display "3" . perform a
  *    Or prepend "perform a." for a multi-line statement, or a
  *    statement which won't "come back". 
       perform a. GOBACK
       .
   a.
       CONTINUE
       .

आउटपुट है:

1
    17
2
    18
3
    19
    20

जहां 1, 2 और 3 तीन प्रदर्शन बयानों से आउटपुट हैं, और 17, 18, 19 और 20 "निष्पादन योग्य" (गैर-डीबगिंग) लाइनों की पंक्ति संख्या हैं।


8

जावा

वर्तमान लाइन प्राप्त करने के लिए अपवाद के स्टैक ट्रेस के व्यवहार का उपयोग करना। जब तक Printstatement को कई लाइनों में विभाजित नहीं किया जाता है या क्लासफाइल हो जाता है तब तक इसे काम करना चाहिए

public class PrittLnbr
{
    public static void main(String[] args)
    {
        System.out.println("Hello World, from line "+new Error().getStackTrace()[0].toString().split(":")[1]+"!");
    }
}


6

पर्ल

print 'Hello World, from line '.__LINE__.'!';

13
यह भी एक वैध PHP समाधान है।
15

6

जावा

public class HelloFrom {
    public static void main(String[] args) {
        System.out.println("Hello World, from line " + Thread.currentThread().getStackTrace()[1].getLineNumber() + "!");
    }
}

तकनीकी रूप से मैंने जैसा किया था ( codegolf.stackexchange.com/a/30058/10801 )
masterX244

2
स्टैक ट्रेस प्राप्त करने के लिए नई त्रुटि बनाने के बजाय वर्तमान थ्रेड का उपयोग करने के अलावा सॉर्ट करें। कोई त्रुटि नहीं है;)
Cineris


6

Befunge

सिर्फ मनोरंजन के लिए किया।

>00g1+:00p"v"\10v  
    v-*45g00p\g <  
#v+1_$10g1vv,,,,<  
^<p000p01+<#>,,,^  
>" enil morf ,oll"v
@.,,,,,,,,,<^,"He"<

सशर्त: कोड के ऊपर बाईं ओर 0 <x <20 और 0 <= y <62 होना चाहिए; और दो पहली कोशिकाओं को खाली करना होगा।

उदाहरण:

                         v                  

                         0                  
                         0                  
                         0                  
                         p                  
                         0                  
                         1                  
                         0                  
                         p                  
                         >00g1+:00p"v"\10v  
                             v-*45g00p\g <  
                         #v+1_$10g1vv,,,,<  
                         ^<p000p01+<#>,,,^  
                         >" enil morf ,oll"v
                         @.,,,,,,,,,<^,"He"<

उत्पादन होगा:

हैलो, लाइन 10 से


पता नहीं यह क्या था, लेकिन मेरा मानना ​​है कि आपके आउटपुट का दावा है, इसलिए +1 ;-)
ysap

1
जो लोग ताकतवर Befunge की शक्ति पर सवाल उठाते हैं, उनके लिए यहां प्रयास करें: quirkster.com/iano/js/befunge.html
जस्टिन

6

सी

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

test.c:

#include <stdio.h>

#define printfl(format, ...) fprintf(stdout, format " From line %d\n", ##__VA_ARGS__, __LINE__)

int main() {
    printfl("Hello World! I have %d argument(s).", 1);
    return 0;
}

आउटपुट:

% ./test
Hello World! I have 1 argument(s). From line 6

नोट: मैंने उस प्रदर्शन को प्रदर्शित करने के लिए पैटर्न से विचलन किया है जो अभी भी एक मान्य वैरेडिक फ़ंक्शन है; यदि आप वास्तव में आउटपुट के प्रारूप की परवाह करते हैं, तो आप हमेशा मेरे द्वारा उपयोग किए जाने वाले शाब्दिक को बदल सकते हैं।


यह तभी काम करता है जब आप एक स्थिर प्रारूप स्ट्रिंग का उपयोग करते हैं। यदि आप प्रारूप स्ट्रिंग के लिए किसी अन्य अभिव्यक्ति में पास होते हैं तो यह विफल हो जाता है।
स्नोबो

5

दे घुमा के

#
# some comments to fill some lines...
#
echo "Hello World, from line $LINENO!"

उत्पादन

Hello World, from line 4!

@professorfish ... मेरा उत्तर दिखाने के लिए मेरी शैली में क्या गलत है? आपको कम से कम यह बताना चाहिए कि आप मेरी कलाकृति में हेरफेर क्यों करते हैं ... :-P

2
क्या मैंने कोड बदल दिया है? अगर मैंने किया, मुझे क्षमा करें। मुझे सिर्फ यह चिंता थी कि नॉन-बैश उपयोगकर्ता यह नहीं बता पाएंगे कि स्रोत कोड क्या था और आउटपुट क्या था

1
और इसके अलावा मेरे अलावा और क्या वह टिप्पणी के बिना उसका सामान बदल रहा है देखकर प्यार करता है? अजीब जगह ...

3
यह मूल रूप से एक स्वरूपण तय था। उन AFAIK के साथ वास्तव में कुछ भी गलत नहीं है

LINE जैसे परिभाषित चर का उपयोग करना , हालांकि नियमों द्वारा अनुमत है, हतोत्साहित किया जाता है।
vaxquis

5

डी

void main ()
{
    import std.stdio;
    writefln("Hello World, from line %d", __LINE__);
}

LINE जैसे परिभाषित चर का उपयोग करना , हालांकि नियमों द्वारा अनुमत है, हतोत्साहित किया जाता है।
vaxquis

5

C या C ++, और AWK

lineno.c:

// code or comments
// ....
#error Hello World, from line
// other code or comments

उपयोग:

gcc lineno.c 2>&1 | awk '{ split($0,a,":"); ; printf("%s %s!\n", gensub(".*#error ","",1), a[2]); exit; }'

आउटपुट:

हैलो, विश्व, पंक्ति 3 से

टिप्पणियाँ:

  • कोई भी उपयोगकर्ता लिखित कोड फ़ाइल नहीं खोजता है।
  • g ++ एक c ++ फ़ाइल पर काम करेगा।

4

रूबी में बोरिंग की तरह:

puts "Hello World, from line #{__LINE__}!"

यह धोखा नहीं है, है ना?


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

LINE जैसे परिभाषित चर का उपयोग करना , हालांकि नियमों द्वारा अनुमत है, हतोत्साहित किया जाता है।
vaxquis

1
@vaxquis हाँ, इस जवाब के बाद यह कथन जोड़ा गया ।
अजादि32

4

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

स्टैक ट्रेस का उपयोग कर एक पंक्ति।

(function (o) { console.log("Hello World, from line " + (Error.captureStackTrace(o) || o.stack.match(/\d+/)[0] - !!__commandLineAPI) + "!"); })({});

3

कोबरा

class Program
    def main
        print 'Hello World, from line [System.Diagnostics.StackFrame(true).getFileLineNumber]!'

3

माणिक

File.write "hello.rb", "x=2\n"+"x+=1\n"*rand(rand(100))+'puts "Hello World, from line #{x}!"'
system "ruby hello.rb"
File.delete "hello.rb"

3

शक्ति कोशिका

सस्ता कदम

Function LemmeGetDatError() {
    "Too busy chuggin along"
    "Then all of a sudden, I meet a new programmer"
    "And he's all like"
    Write-Output "$(Try {"Hello World from"; Throw "error" } Catch {$_.ScriptStackTrace.Split(":")[1]})"
}

LemmeGetDatError

3

शक्ति कोशिका

$l=(Get-PSCallStack | ForEach{$_.Location})[0].split(' ')[-1]; "Hello World, from line $l!"

तथा:

try{ I AM ERROR. } catch { $l=$error[0].InvocationInfo.ScriptLineNumber; "Hello World, from line $l!" }

दोनों इस तरह काम करते हैं:

PS C:\MyFolder> .\helloworld.ps1
Hello World, from line 1!

+1, लेकिन Write-Hoststdout को लिखना नहीं है। बस स्ट्रिंग को पास करने से यह स्टडआउट को भेज देगा। जैसे"Hello World, from line {0}!" -f (gcs| %{$_.ScriptLineNumber})[0]
रयान्ट

@ रिनेंट गुड पॉइंट! मैं अपने जवाबों पर विचार करने के लिए अपडेट करूंगा ...
DarkAjax

3

अजगर

import traceback

print 'Hello World, from line %i!' % traceback.extract_stack()[0][1]

छोटा एवं सुन्दर।


3

पर्ल

एक और पर्ल एक:

use warnings;

$SIG{__WARN__} = sub { ($line = shift) =~ s/\D//g; };

$x=$x+1; print "Hello World, form line $line!\n";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.