एक "हैकर टाइपर" प्रोग्राम बनाएं जो अपने स्वयं के स्रोत कोड को प्रस्तुत करता है


25

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

विवरण

  • कोई प्रोग्राम के लिए फ़ाइल नाम को हार्ड कोड नहीं कर सकता है; इसे गतिशील रूप से अपना नाम निर्धारित करना चाहिए। यदि प्रोग्राम किसी निष्पादन योग्य को संकलित करता है, तो वह निष्पादन योग्य के नाम पर मानक फ़ाइल एक्सटेंशन को जोड़ सकता है (विंडोज़ का उपयोग करते समय .exe को छोड़कर) और मान लें कि स्रोत फ़ाइल निष्पादन योग्य की निर्देशिका के भीतर है। उदाहरण के लिए, यदि C निष्पादन योग्य को "हैकर" नाम दिया गया है, तो उसे उसी निर्देशिका में "hacker.c" नामक फ़ाइल से अपना स्रोत कोड खींचना चाहिए। यदि एक संकलित कार्यक्रम का विस्तार होता है, तो उसे अपने स्रोत कोड ("typer.exe" -> "typer.cs") का नाम निर्धारित करने से पहले छोड़ देना चाहिए।
  • प्रत्येक स्थान के बीच कम से कम एक वर्ण के साथ प्रोग्राम में कम से कम 5 स्थान होने चाहिए। इसका मतलब है कि इस चुनौती के लिए सबसे छोटा संभव आकार 9 बाइट्स है। कार्यक्रम के कामकाज के लिए रिक्त स्थान महत्वपूर्ण नहीं हैं।
  • आउटपुट में किसी भी स्वरूपण (इंडेंटेशन, नई लाइनें, आदि) को बनाए रखा जाना चाहिए। यह प्रारूपण या तो उस कोड के साथ मुद्रित किया जा सकता है जो इसे आगे बढ़ाता है या इसका अनुसरण करता है, जो मायने रखता है कि प्रारूपण को बनाए रखा जाना चाहिए।
  • 5 स्थान की आवश्यकता को पूरा करने के लिए टिप्पणियों का उपयोग करने से बचें जब तक कि आपकी पसंद की भाषा में रिक्त स्थान को लागू करने का कोई अन्य तरीका नहीं है।

EDIT : नई लाइनों का उपयोग, या इसके अलावा, रिक्त स्थान के रूप में किया जा सकता है।


1
मैं थोड़ा उलझन में हूँ। कार्यक्रम एक क्वीन होना चाहिए, या नहीं?
ओर्बी

8
जिस तरह से आपने इसका वर्णन किया है वह ऐसा लगता है जैसे कि मूल स्रोत फ़ाइल से कोड को पढ़ने के लिए इसकी स्वीकार्य है, जो कि एक क्वीन नहीं होगा। मुझे लगता है कि यह एक बेहतर प्रतियोगिता होगी यदि कार्यक्रम को वास्तविक रूप से रानी बनना था।
Orby

1
@Orby मैं कहूंगा कि कार्यक्रम पारंपरिक अर्थों में एक क्वीन नहीं है, चाहे स्रोत पढ़ने की अनुमति हो या न हो। Quines में इनपुट नहीं है लेकिन ये प्रोग्राम स्पष्ट रूप से करते हैं।
केल्विन के शौक

@DrJPepper आपका तीसरा बुलेट पॉइंट यह ध्वनि देता है जैसे व्हॉट्सएप के किसी भी क्रम को सीमांकक के रूप में गिना जाता है लेकिन आप विशेष रूप से कहते हैं कि केवल स्थान है। क्या आप स्पष्ट कर सकते हो?
केल्विन के शौक

2
यह चुनौती कार्यक्रम के अपने स्रोत कोड को पढ़ने के लिए प्रोत्साहित करती है, आमतौर पर एक अभ्यास quines के निर्माण में।
feersum

जवाबों:


13

बैश, 51 58

for w in $(<$0);do read -sn 1;printf -- "$w ";done

2
यह बैश है, शेल नहीं: यह डैश के तहत काम नहीं करेगा, ( 2: read: Illegal option -s)
एफ। होरी सेप

1
बैश मानते हुए, बदल सकते हैं cat $0और साथ tildes$(<$0)

प्रतिक्रिया के लिए @broslow thx; लेबल बैश, एक ही लंबाई
जाएगा

1
@ कोई समस्या नहीं है। क्या IFS=\ वास्तव में जरूरत है अगर आप शेबग को छोड़ दें? डिफ़ॉल्ट IFS कुछ ऐसा है IFS=$'\n\t ', और चूँकि अब आपके पास एक नई पंक्ति नहीं है, मुझे नहीं लगता कि आपको इसे केवल स्थान तक सीमित करने की आवश्यकता है।

1
for w in `<$0`;{ read \-sn1;printf $w\ ;}
jimmy23013

21

HTML और जावास्क्रिप्ट, 123

<head></head><body onload="s=(a=document.all)[i=0].innerHTML" onkeyup="a[2].textContent += s.split(/(?= )/)[i++%6]"></body>

यह हैकर टाइपर के समान काम करता है, लेकिन अपने स्वयं के सोर्स कोड के साथ। मुझे बताएं कि क्या मैंने नियमों को गलत समझा है।

और यहाँ एक स्टाइल संस्करण (170 अक्षर) है:

<head></head>
<body style="background:#000;color:lime" onload="s=(a=document.all)[i=0].innerHTML" onkeyup="a[3].textContent+=s.split(/(?=\s)/)[i++%6]">
<pre></pre></body>

मैंने एक डेमो बनाया है । यह संशोधित है क्योंकि जेएस बिन बहुत सारे अतिरिक्त कोड जोड़ता है, लेकिन सामान्य विचार समान है।


2
मुझे आश्चर्य होगा अगर यह बिना <html> और <head> टैग के सही ढंग से प्रस्तुत नहीं हुआ, और बिना समापन </ body> के। आपको आश्चर्य होगा कि इस संबंध में सभी ब्राउज़र कितने क्षमाशील हैं।
विल

2
@ धन्यवाद धन्यवाद। मेरे द्वारा शामिल किए जाने <head>का कारण यह था कि ब्राउज़र इसे जोड़ देगा यदि यह नहीं है, तो यह हमेशा प्रदर्शित होगा। मैं <html>हालांकि भूल गया ।
grc

12

पर्ल + टर्म :: ReadKey, 56 बाइट्स

use
Term'ReadKey;ReadMode
4;open
0;ReadKey,print
for
<0>

मूल प्रेरणा के लिए, और सुझाव देने के लिए और करने के लिए Primo के लिए ThisSuitIsBlackNot का धन्यवाद ।open 0<0>

ध्यान दें कि नई पंक्ति के बाद forसिवाय इसके कि मैं एक अतिरिक्त न्यू लाइन शामिल करने की जरूरत वास्तव में अनावश्यक है, कहीं खाली स्थान के पांच में से निर्धारित न्यूनतम करने के लिए गिनती लाने के लिए।

यह भी ध्यान दें कि, ThisSuitIsBlackNot के सबमिशन की तरह, इस प्रोग्राम के लिए CPAN से टर्म :: ReadKey मॉड्यूल की आवश्यकता है । डेबियन / उबंटू लिनक्स पर, यह मॉड्यूल, यदि पहले से मौजूद नहीं है, तो आसानी से कमांड के साथ इंस्टॉल किया जा सकता है sudo apt-get install libterm-readkey-perl

इसके अलावा, कुछ वर्णों को सहेजने के लिए, यह प्रोग्राम इनपुट मोड को सामान्य करने के लिए पुनर्स्थापित नहीं करता है, इसलिए आप स्वयं को यह देखने में असमर्थ पा सकते हैं कि आप बाद में क्या टाइप कर रहे हैं। शेल कमांड को निष्पादित करना stty saneया उसे resetठीक करना चाहिए। यह समस्या 10 अतिरिक्त बाइट्स की लागत पर तय की जा सकती है:

use
Term'ReadKey;ReadMode
4;open
0;ReadKey,print
for<0>;ReadMode
0

बोनस: शुद्ध क्वीन, 81 बाइट्स

$_=q{use
Term'ReadKey;ReadMode
4;ReadKey,say
for
split$/,
"\$_=q{$_};eval"};eval

फिर, अल्पविराम के बाद की नई रूपरेखा को केवल न्यूनतम पांच व्हाट्सएप को पूरा करने की आवश्यकता है।

उपरोक्त 56-बाइट प्रोग्राम के विपरीत, इस संस्करण को वास्तव में अपने स्वयं के स्रोत कोड को पढ़ने की आवश्यकता नहीं है, क्योंकि यह एक क्वीन पर आधारित है - विशेष रूप से, इस क्वीन पर:

$_=q{say"\$_=q{$_};eval"};eval

इस क्वीन के बारे में अच्छी बात यह है कि यह आसानी से q{ }ब्लॉक के भीतर एक मनमाना "पेलोड" ले जा सकता है , बिना इसे दोहराए। हालांकि यह <0>संक्षेप में बहुत हरा नहीं सकता है , यह बहुत करीब हो जाता है।

नोट: यह प्रोग्राम पर्ल 5.10+ sayफीचर का उपयोग करता है , और इस प्रकार कमांड लाइन स्विच -M5.010(या -E) के साथ इनवाइट करना होता है। मेटा पर स्थापित सर्वसम्मति के अनुसार, आधुनिक भाषा सुविधाओं को सक्षम करने के लिए उपयोग किए जाने वाले ऐसे स्विच अतिरिक्त वर्णों के रूप में गणना नहीं करते हैं । सबसे छोटा उपाय, जिसके बिना sayमैं 83 बाइट्स पा सकता हूं :

$_=q{use
Term'ReadKey;ReadMode
4;ReadKey,print
for
split/^/,
"\$_=q{$_};eval"};eval

इन दोनों को सम्मिलित करके और अधिक टर्मिनल-अनुकूल बनाया जा सकता है (अंतिम दो पंक्तियों में शामिल होकर):

;ReadMode
0

आखिरी से पहले }


वाह। बस वाह। बहुत ही शांत।
ThisSuitIsBlackNot

+1, लेकिन मैं टाइप करने के लिए आदत है की सलाह देते हैं stty saneबजाय reset(, कुछ ओएस पर, कभी कभी बस कुछ टर्मिनल मापदंडों ^^ रीसेट करने की तुलना में अधिक कुछ कर रही हो सकता है)
ओलिवर Dulac

बहुत अच्छा समाधान है। FWIW, open F,$0और के <F>साथ प्रतिस्थापित किया जा सकता है open 0और <0>। इसके अलावा, मैं तर्क देता हूं कि मेटा में एक पद वास्तव में एक आम सहमति नहीं है। विकल्प "भाषा को एक विशिष्ट बिंदु पर-M5.01 नहीं लाता है" , जैसा कि लेखक सुझाव देता है, यह सुविधाओं को सक्षम करता है। पर्ल का कोई संस्करण नहीं है जिसके लिए ये सुविधाएँ डिफ़ॉल्ट रूप से सक्षम हैं।
प्रिमो

3
@primo: यदि आप मौजूदा एक से असहमत हैं, तो कृपया मेटा थ्रेड में अपना उत्तर पोस्ट करें। यह तथ्य कि साढ़े तीन साल में किसी ने भी ऐसा नहीं किया है, अब तक कम से कम नियमित रूप से यहां आने वाले लोगों में सर्वसम्मति से उचित सहमति का सुझाव दिया गया है, लेकिन सर्वसम्मति हमेशा बदल सकती है। (वैसे भी, मैं इसे देखता हूं, अगर ruby golfscript.rb foo.gsगोल्फस्क्रिप्ट में लिखे गए प्रोग्राम को चलाने के लिए एक वैध कमांड के रूप में गिना जाता है, तो perl -M5.010 foo.pl"पर्ल 5.10" में लिखे गए प्रोग्राम को चलाने के लिए एक वैध कमांड के रूप में गिना जाना चाहिए। लेकिन इस तरह के तर्क वास्तव में मेटा पर होते हैं, नहीं। यहाँ।)
इल्मरी करोनन

5

पायथन 3 - 124 बाइट्स - 7 रिक्त स्थान


कोड:

from curses import*
s=initscr();noecho()
for x in open(__file__).read().split(" "):s.getch();s.addstr(x+" ")
echo();endwin()

Ungolfed:

from curses import*
# init curses
screen=initscr()
noecho()
# split code into spaces
code = open(__file__).read().split(" ")
for x in code:
    # wait for keypress
    screen.getch()
    # print a bit
    screen.addstr(x+" ")
# deactivate curses
echo()
endwin()

स्टाइलिश संस्करण:

from curses import*
s=initscr();noecho();start_color();init_pair(2,COLOR_GREEN,COLOR_BLACK)
for x in open(__file__).read().split(" "):s.getch();s.addstr(x+" ",color_pair(2))
echo();endwin()

4

रूबी, 85 , 71

require"io/console";f=File.open __FILE__;loop{STDIN.raw &:getc;print f.read(3)||exit}

बहुत खराब है जो IO#rawमानक पुस्तकालय का हिस्सा नहीं है।

सुधार की

require"io/console";24.times{|q|STDIN.raw &:getc;$><<IO.read($0,3,q*3)}

यह एक कॉल कर्नेल # से बाहर निकलता है और कोड को छोटा करने के लिए वैश्विक चर का उपयोग करता है।


4

Befunge - 21

~ $ g , 1 +:54*`#@_:0

मैं इससे काफी खुश हूं, जैसा कि मुझे अभी-अभी बेफ्यूज के बारे में पता चला है। यदि आपको पॉपअप विंडो में "टाइपिंग" का मन नहीं है, तो आप इसे यहाँ या यहाँ तब तक चला सकते हैं जब तक मुझे एक बेहतर ऑनलाइन दुभाषिया नहीं मिल जाता।


2

पॉवरशेल, 89

(gc $MyInvocation.MyCommand.Path).split(" ")|%{$l+="$_ ";write-host "$l";read-host ;cls}

2

पायथन 3 - 299

a="""from curses import*
s=initscr()
raw()
noecho()
for x in e:
 s.getch()
 s.addstr(x+' ')
nocbreak()
echo()
endwin()
""";b="""e=(a+'a=#%s#;b=#%s#;%s'%(a,b,b.replace('#','""''"',4))+'exec(a)').split(' ')
""";e=('a="""%s""";b="""%s""";%s'%(a,b,b.replace('#','""''"',4))+'exec(a)').split(' ')
exec(a)

इसकी एक रानी। execकुछ बयानों का उपयोग करके और उन्हें स्थानांतरित करके 507 से छोटा किया गया ।


2

सी, 211 186 बाइट्स

शाप पुस्तकालय का उपयोग कर सी में मेरा समाधान। यह अन्य सी समाधान से अधिक लंबा हो सकता है, लेकिन यह एक कुनैन है। हालांकि प्रश्न की आवश्यकता नहीं है, यह अभी भी बहुत अच्छा है। यह भी काफी अच्छी तरह से काम करता है:

#define R(x)#x
#define T(x)R(x)
#define S(p)char*s="#define R(x)#x\n#define T(x)R(x)\n#define S(p)"p"\nS(T(S(p)))";main(){initscr();noecho();while(*s)if(~getch())addch(*s++);}
S(T(S(p)))

कुछ टिप्पणियों और सामानों के साथ एक अधिक पठनीय संस्करण:

#define R(x)#x /* macros to convert the source code in S into a C-string */
#define T(x)R(x)
#define S(p) char*s="#define R(x)#x\n" \
                    "#define T(x)R(x)\n" \
                    "#define S(p) " p "\n" \
                    "S(T(S(p)))";\
    main(){\
        initscr();\
        noecho(); /* don't echo input */ \
        while(*s)\
            if(~getch()) /*true if character has been typed */ \
                addch(*s++);\
}
S(T(S(p)))

संकलन:

gcc -o h h.c -lncurses

2

सी - 136 135 132 बाइट्स (केवल विंडोज)

*fopen();**v;b[ 1<<20];main(p,q){v=q; strcpy(b,*v);strcat(b,".c") ;for(*v=fopen(b,"r");~fscanf(*v,"%s",b);printf("%s ",b))getch();} 

नोट: कार्यक्रम के अंत में एक स्थान है, जो संभवतः दिखाई नहीं देगा।

मैं गारंटी नहीं दे सकता कि यह कार्यक्रम मेरे अलावा किसी अन्य कंप्यूटर पर काम करेगा क्योंकि यह बहुत ही खतरनाक है। जब सभी के पास केवल 32-बिट मशीनें थीं, तो चीजें बहुत सरल हो जाती थीं। तब मुझे चिंता करने की जरूरत नहीं होगीsizeof(int*) 8 होने के (जो कि निश्चित रूप से है; मैंने इसे सुनिश्चित करने के लिए मुद्रित किया है) जबकिsizeof(int) 4 है।

खुशी से, निष्पादन योग्य का नाम पहले स्ट्रिंग में argv में संग्रहीत किया जाता है। हालाँकि, किसी फ़ंक्शन के लिए एक संकेतक के रूप में एक संकेतक डालने का मतलब है कि मुझे फ़ंक्शन के सभी तर्कों के प्रकार को स्पष्ट रूप से निर्दिष्ट करना होगा - जिसका अर्थ है कि मुझे intदो बार टाइप करना होगा - वर्णों का एक बड़ा बेकार। सौभाग्य से मुझे वर्कअराउंड मिला। मेरे पास मुख्य तर्क दूसरा था q, बस एक और अंतर हो। फिर किसी qप्रकार के एक चर को असाइन करना int**स्टैक से सभी आवश्यक बाइट्स को हथियाने में कामयाब रहा।

मैं fopenफ़ंक्शन की घोषणा किए बिना एक संकेतक के रूप में वापसी प्रकार की व्याख्या करने के लिए इस तरह के किसी भी चाल को खोजने में असफल रहा ।

संपादित करें: सूचित किया जाता है कि ईओएफ पहुंचने पर रिटर्न -1 के ~fscanf(*v,"%s",b)बजाय मुझे इसका उपयोग करना चाहिए fscanf(*v,"%s",b)>0


यह मेरे लिए अलग-अलग है इसलिए मैं इसका परीक्षण नहीं कर सकता, लेकिन आपको void **v;प्रोटोटाइप के बजाय एक शून्य सूचक ( ) घोषित करने में सक्षम होना चाहिए fopen()
कोमिन्टर्न

@Comintern इस परिवर्तन ने मुझे सही ढंग से परिणाम को स्टोर करने में मदद नहीं की fopen। मैं यह नहीं देखता कि इंट के लिए शून्य को क्यों अलग किया जाना चाहिए, क्योंकि सभी संकेत वैसे भी एक ही आकार के होते हैं।
feersum

अच्छी बात। अभी भी एक सूचक घोषित करने के लिए छोटा और अधिक स्थिर - हालांकि यह वास्तव में मेरे लिए चलता है: b[1<<20];main(int *c,char **v){strcpy(b,*v);strcat(b,".c");c=fopen(b,"r");for(;fscanf(c,"%s",b)>0;printf("%s ",b))getch();}(मुझे हालांकि इसके लिए स्थानापन्न getchar()करना getch()था)।
कॉमिनेटर

@Comintern आपके कोड अभी भी मेरे सिस्टम पर क्रैश करता है, लेकिन अच्छा काम यह काम करने के लिए हो रहा है। मुझे लगता है कि यह ऐसा है जैसा मैंने कहा - कार्यक्रम का प्रत्येक संस्करण 1 कंप्यूटर पर चलेगा।
5

आप K & R प्रोटोटाइप का उपयोग क्यों नहीं करते? के *fopen()बजाय *fopen(a,b)?
फ़ूजएक्सएक्सएल

1

पर्ल - 87 बाइट्स

#!/usr/bin/perl -040
use Term::ReadKey;open F,$0;ReadMode 3;print''.<F>while ReadKey 0

मुझे इस बारे में नियमों में कुछ भी नहीं दिखाई दिया कि फ़ाइल को एक बार पढ़ने के बाद क्या करना है, इसलिए यह अंतिम चंक को प्रिंट करने के बाद इनपुट की प्रतीक्षा में बैठता है।


1

LiveScript के साथ नोड .js:

#!/usr/local/bin/lsc
console.log <| require \fs .readFileSync __filename, encoding: \utf8

अतुल्यकालिक संस्करण:

#!/usr/local/bin/lsc
require \fs .readFile __filename, encoding: \utf8, -> console.log &1

1

कोबरा - 147

class P
    def main
        while 1,for a in File.readLines(CobraCore.exePath[:-4]+'.cobra'),print if('[Console.readKey]'and (Console.cursorLeft=0)<1,a,'')*

CobraCore.exePath कितना उपयोगी है!


1

जावास्क्रिप्ट ईएस 6, 154

फ़ायरफ़ॉक्स 154 :

(a= (i=1,b="(a= "+a+")()",s="") => {window.onkeydown=()=>{clear();i=b.indexOf(" ",i+1),d=b.slice(0,i<0?b.length:i);console.log(s+d);if(i<0){i=0,s+=d}}})()

क्रोम 175 :

( a= function (i,s){b="( a= "+a+")()";c=console,window.onkeydown=function(){c.clear();s=s||"",i=b.indexOf(" ",i+1),d=b.slice(0,i<0?b.length:i);c.log(s+d);if(i<0){i=0,s+=d}}})()

दोनों 274 :

( a= function (i,s){b="( a= "+a+")()";c=console,window.onkeydown=function(){(clear)?clear():c.clear?c.clear():0;s=s||"",i=b.indexOf(" ",i+1),d=b.slice(0,i<0?b.length:i);c.log(s+d);if(i<0){i=0,s+=d}}})()

अघोषित (क्रोम):

( a= function (i,s){        // starting index | undefined, output string
    b="( a= "+a+")()";      // get a string representation of the function
    c=console,
    window.onkeydown=function(){    // on each key down event
        c.clear();                  // clear the output 
        s=s||"";
        i=b.indexOf(" ",i+1);       // get the index of next space
        d=b.slice(0,i<0?b.length:i);// get the string part wanted
        c.log(s+d);                 // print the string
        if(i<0){
            i=0,                    // reset counters
            s+=d                    // adding the string to the main output
        }
    }
})()

दो संस्करण हैं, क्योंकि क्रोम एरो फंक्शन को हैंडल नहीं करता है और कंसोल एक ही विधि से क्लियर नहीं होता है

फ़ायरफ़ॉक्स एक फ़ायरबग के साथ काम करता है, ऐसा लगता है कि डिफ़ॉल्ट डेवलपर कंसोल को स्क्रिप्ट से साफ़ नहीं किया जा सकता है।


क्या आपको आवश्यकता याद आती है कि उपयोगकर्ता को आउटपुट प्रिंट करने के लिए यादृच्छिक कुंजियों को दबाना है?
ऑप्टिमाइज़र

यकीन है कि, यह फिर से लिखना होगा।
हैकेटो

0

ग्रूवी - 379

import java.nio.file.*
Path p = Paths.get(System.getProperty("user.dir"))
DirectoryStream<Path> f = Files.newDirectoryStream(p,"*.groovy")
try{for(e in f){read(e.toAbsolutePath().toString())}}
catch(Exception e){ }
finally{f.close()}

void read(String x){
    def s = new File(x).text
    for(e in s.replace("%n"," %n").split(" ")) 
        print e + " " 
    Thread.sleep(200)
}   

चूंकि getch()Groovy जैसी Java और Java-esque भाषाओं में कोई समान या समतुल्य नहीं है ... मूल रूप से मेरा कोड keypresses को हैंडल नहीं करता है। वह सब है: डी


0

सी, 248 वर्ण

सच्ची रानी

केवल यूनिक्स में काम करता है, खिड़कियों में इसे _getch का उपयोग करके लागू किया जाएगा।

main(){char *p="main(){char *p=\"%s\",s[400];sprintf(s,p,p);system(\"stty raw\");for(p=s;*p!=0;putchar(*p++))getchar();system(\"stty cooked\");}",s[400];sprintf(s,p,p);system("stty raw");for(p=s;*p!=0;putchar(*p++))getchar();system("stty cooked");}

0

HTML और जावास्क्रिप्ट, 232 बाइट्स

<body><script>var n=0;var f=function (){document.onkeypress=function(){document.body.innerHTML+=("&lt;body>&lt;script>var n=0;var f="+f.toString()+"f()&lt;/script>&lt;/body>").split(" ")[n]+" ";n++;}};f()</script></body>

पारंपरिक जावास्क्रिप्ट क्वीन, लेकिन संशोधित।

JSFiddle यहाँ


0

स्माइलबासिक, 79 75 बाइट्स

LOAD"PRG1:"+PRGNAME$()
PRGEDIT 1
@L
IF BUTTON(2)THEN?PRGGET$();
WAIT
GOTO@L

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

स्पष्टीकरण:

LOAD "PRG1:"+PRGNAME$() 'load the code into slot 1 so we can easily read 1 line at a time
PRGEDIT 1 'Edit slot 1
@LOOP
IF BUTTON(2) THEN 'When a button is pressed...
                   PRINT PRGGET$(); 'get a line of code and print it
WAIT 'delay so we don't detect the same press multiple times in a single frame.
GOTO @LOOP 

-1

हास्केल

{-# LANGUAGE CPP #-}
main = readFile __FILE__ >>= putStrLn

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