कोड जो केवल एक बार निष्पादित करेगा


223

लक्ष्य

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

स्कोरिंग

वोटों की संख्या। सभी मान्यताओं को स्पष्ट रूप से सूचीबद्ध किया जाना चाहिए। रिबूट या पड़ाव शुरू करने वाले किसी भी उत्तर को अयोग्य घोषित किया जाएगा।

अतिरिक्त नियम क्योंकि ग्रेग हेविल एक डेमी-गॉड हैं

कोई रूट एक्सेस की अनुमति नहीं है।

समाप्ति तिथि

प्रतियोगिता 31 मई 2014 को बंद हो जाएगी।

संपादित करें

इस प्रतियोगिता को लोकप्रियता प्रतियोगिता में बदल दिया गया है।


7
@PeterTaylor एक संभावित सॉल्यूशन एक सेल्फ डिलीट होगा लेकिन जैसा कि परिणाम दिखा रहे हैं कि यह केवल एक ही नहीं है।
लुकेई

101
viएकल टर्मिनल वातावरण में कॉल करने वाले बहुत से लोगों पर इसका प्रभाव पड़ता है, जब तक आप इसे रीबूट नहीं करते हैं, तब तक इससे बचते हैं :) बस यहां एक मजाक है।
ओरियन

6
इस तरह के प्रश्न का प्रस्ताव करने के लिए साइट आपके लिए स्वतंत्र है।
ओजबलास

16
echo "If you try to execute me again, it means you are an idiot.";<- कोई भी एक से अधिक बार निष्पादित नहीं करेगा: P
user3459110

25
क्या मिसाइल से संबंधित सॉफ्टवेयर ने योग्य बनाया होगा? ;)
rsegal

जवाबों:


518

जलूस

अंत में विजिल के लिए एक usecase!

def main():
  raise Exception()

"भाषा विनिर्देश" से अंश:

यह बिना कहे चला जाता है कि कोई भी फ़ंक्शन जो अपवाद को नहीं फेंकता है वह गलत है और उसे दंडित किया जाना चाहिए।

...

यदि कोई शपथ तोड़ी जाती है, तो अपमानजनक कार्य [...] की विधिवत सजा दी जाएगी।

कैसे?

सरल: यह आपके स्रोत कोड से हटा दिया जाएगा।

अपने कार्यक्रम को सुनिश्चित करने का एकमात्र तरीका अपनी आवश्यकताओं को पूरी तरह से निषिद्ध कोड से पूरा करता है जो ऐसा करने में विफल रहता है। विजिल के साथ, यह आपके लिए यह स्वचालित रूप से करेगा।

ऐसा करने के अन्य तरीके हैं, क्योंकि विजिल कीवर्ड प्रदान करता है imploreऔर swearजो मूल रूप से कुछ पूर्व और बाद की शर्तों का पालन करने की शपथ हैं:

def main():
  swear 0 > 1

116
कोई शक नहीं, यह जीतने के लिए योग्य है।
माटेओ इटालिया

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

13
मेरे लिए ऐसा लगता है कि यह जरूरी नहीं है कि फ़ंक्शन का दोष जो एक अनकहा अपवाद को फेंकता है, यह भी हो सकता है कि कॉल स्टैक पर फ़ंक्शन इसे पकड़ने में विफल होने के लिए लापरवाह हैं। यह भी सुझाव दे सकता है कि पूरे आवेदन की वास्तुकला त्रुटिपूर्ण है (क्योंकि शायद कोड को पुनर्गठन किए बिना उस अपवाद को ठीक से संभालने का कोई तरीका नहीं है?) संक्षेप में, पूरे कार्यक्रम को हटा दिया जाना चाहिए।
जोनाथन पुलानो


32
शपथ ग्रहण के अतिरिक्त बिंदु। एक आत्मविश्वास से भरा गलत बयान देने वाले कार्यक्रम को समाप्त करने की आवश्यकता नहीं है।
ओरियन

293

बहुत ज्यादा किसी भी लिनक्स डिस्ट्रो, 9 वर्ण

यह एक क्लासिक है!

#!/bin/rm

इसे एक फ़ाइल में रखें और इसे चलाएं:

> ed
a
#!/bin/rm
.
wq foo
> ls
Mail mbox foo
> chmod 777 foo
> ./foo
> ls
Mail mbox

आआंद!

जैसा चल रहा है: मैं वास्तव में बस चल रहा हूं rm! #!को शेबंग कहा जाता है । और यदि आप इनमें से किसी एक को अपनी स्क्रिप्ट में पहली पंक्ति के रूप में कुछ निष्पादन योग्य मार्ग पर रखते हैं, तो प्रोग्राम लोडर आपकी स्क्रिप्ट फ़ाइल को आपके द्वारा लिखी गई चीजों के साथ निष्पादित करेगा - डिफ़ॉल्ट आमतौर पर #!/bin/bashया #!/bin/sh(बॉर्न-फिर शेल / बॉर्न शेल) । इस स्क्रिप्ट के लिए दिया गया पहला तर्क स्वयं फ़ाइल नाम होगा (यही कारण है कि आपको इसमें %0या $0यहाँ सहित कई समाधान मिलते हैं); इसलिए मेरी फ़ाइल को बनाने #!/bin/rmऔर इसे चलाने के बाद, मैं जो कुछ भी कर रहा हूं वह मेरी फ़ाइल का फ़ाइल नाम दे रहा है rm


9
कभी भी लिनक्स का उपयोग किए बिना, मुझे लगता है कि यह स्क्रिप्ट फ़ाइल को हटा देता है।
Οवस

56
@NateKerkhofs के #!अनुक्रम में एक शेल्बर शुरू होता है, जो पहचानता है कि स्क्रिप्ट के लिए आप किस दुभाषिया का उपयोग करने जा रहे हैं - सामान्य रूप से /bin/bash। यहाँ, फ्लोंक ने /bin/rm"दुभाषिया" के रूप में उपयोग किया है । rmएक प्रोग्राम है जो फ़ाइलों को हटा देता है। क्योंकि लिनक्स सोचता है कि हम rmएक दुभाषिया बनना चाहते हैं , यह एक तर्क के रूप में फाइलनाम को पारित करता है। इसलिए, फ़ाइल स्वयं को हटा देती है

19
यह हिस्टेरिकल है
ojblass

25
@ user80551 मुझे इसके लिए रूट एक्सेस की आवश्यकता नहीं है।
फ्लॉन्क

9
हम्म ..../foo mbox
इज़्काता

241

x86 बाइनरी, 4 बाइट्स

F0 0F C7 C8

धारणा: P5 पेंटियम CPU पर चलना चाहिए।

उपरोक्त निर्देश को आमतौर पर F00F बग के रूप में जाना जाता है । यह एक अवैध निर्देश को निष्पादित करने का प्रयास करता है, जो लॉक के साथ उपसर्ग करता है

यह पूरी तरह से सीपीयू को फ्रीज करता है (न तो रुकना और ना ही रिबूट) और इसे रूट एक्सेस की भी आवश्यकता नहीं है।


4
वाह ... यह वाकई दिलचस्प है।
ओब्लाज

31
@ जैक: यह होगा, लेकिन यह स्पष्ट रूप से सवाल में अनुमति दी है।
डेनिस

34
@JackM, जो "स्क्रिप्ट" को चलने से रोकने का एक शानदार तरीका लगता है।
पॉल ड्रेपर

5
मुझे याद है जब यह बग गोल बना रहा था। एक कर्नेलसाइड वर्कअराउंड लगभग तुरंत मिल गया था - यह कंप्यूटर को तब तक क्रैश नहीं करेगा जब तक आप पैच के बिना ओएस नहीं चला रहे हों।
झोल

3
@RosLuP 209 विभिन्न उपयोगकर्ताओं, जाहिरा तौर पर। यदि आप असहमत हैं, नीचे उतरें और आगे बढ़ें।
डेनिस

150

मारना, ५

>"$0"

खुद को शून्य लंबाई तक काटता है।

यदि फ़ाइल नाम में रिक्त स्थान नहीं है, तो 3 वर्णों के>$0 लिए कार्य करता है !


2
वास्तव में, इस तरह के रीडायरेक्ट फ़ाइलनाम में प्रयुक्त चर के लिए उद्धरणों की आवश्यकता कभी नहीं होती है, भले ही प्रोग्राम या प्रोग्राम में रिक्त स्थान हो, शेल पार्सिंग नियमों में एक विशेष मामले के कारण। तो आप इसे हमेशा 3 वर्णों में कर सकते हैं!
अपेनवर

3
@apenwarr यह कहती है कि "$ 0: अस्पष्ट पुनर्निर्देशन" जब बिना उद्धरण और फ़ाइल नाम के रिक्त स्थान हों

1
@apenwarr, यह आवश्यक है यदि वह शेल जो उस स्क्रिप्ट की व्याख्या करता है जो ksh88 पर आधारित है या पॉश मोड में नहीं है। यह अंतरिक्ष के बारे में नहीं है, यह $IFSबैश और ksh88 के लिए बैश और वाइल्डकार्ड वर्णों के किसी भी चरित्र के बारे में है । एक धमाकेदार कम स्क्रिप्ट की व्याख्या आमतौर पर सिस्टम के श द्वारा की जाएगी, लेकिन बैश और ksh88 सहित कुछ गोले उन्हें स्वयं के बजाय एक बच्चे में व्याख्या करेंगे।
sch

144

gzip

#!/bin/gzip

gzipडिफ़ॉल्ट रूप से मूल फ़ाइल को बर्बाद करके, इसे एक gzipped संस्करण (प्रत्यय जोड़कर) के साथ बदलकर nondestructive कमांडलाइन टूल के लिए उपयोग किए जाने वाले लोगों के लिए बहुत अधिक परेशान करने के लिए ।

यह एक भिन्नता है #!/bin/rm विकल्प , इसके अलावा यह मैनुअल मानव हस्तक्षेप ( gunzipउस पर कॉल ) द्वारा पुनर्प्राप्त करने योग्य है । एक विशेष बोनस के रूप में, परिणामी फ़ाइल मूल की तुलना में बहुत अधिक है (अंतर फ़ाइल नाम की लंबाई पर निर्भर करता है)।

चेतावनी: का स्थान gzip भिन्न हो सकते हैं।

EDIT: जैसा कि WChargin ने बताया है, यह अधिक पोर्टेबल है:

#!/usr/bin/env gzip

बाकी फ़ाइल में कोई भी सामग्री हो सकती है। यह अनिवार्य रूप से एक फ़ाइल है, जिसे जब बुलाया जाता है, खुद को एक बॉक्स में छुपाता है और जब तक आप इसे जबरन अनपैक नहीं करते तब तक बाहर आने से इनकार करते हैं।


7
मैंने इसके बारे में पहले कभी नहीं सोचा था लेकिन आप बिल्कुल सही हैं।
ओजबलास

बहुत दिलचस्प
बृजेश चौहान

11
"चेतावनी: स्थान gzipभिन्न हो सकते हैं" - यह कोड-गोल्फ नहीं है , इसलिए आप उपयोग कर सकते हैं#!/usr/bin/env gzip
wchargin

37
+1 के लिए बस It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.आपने मेरा दिन बना दिया, और यह 1 बजे है।
ताली

यह अनिवार्य रूप से एक फाइल है जिसे कहा जाता है, खुद को एक बॉक्स में छुपाता है और जब तक आप इसे जबरन अनपैक नहीं करते हैं तब तक बाहर आने से इनकार करते हैं। मुझे हंसी आ गई। : डी
मिशा

121

बैश, १३ १२

सबसे छोटा नहीं है, लेकिन यह वास्तव में फ़ाइल को नष्ट नहीं करता है या सिस्टम को अनुपयोगी बनाता है।

chmod 0 "$0"

यदि फ़ाइल नाम में स्थान नहीं हैं, तो आप 2 वर्णों को सहेजने के लिए उद्धरण हटा सकते हैं।

व्याख्या

यह rwxस्वयं से सभी अनुमतियाँ ( ) हटा देता है। जब आप इसे चलाने का प्रयास करते हैं, या यहां तक ​​कि इसके कोड को देखते हैं, तो दूसरी बार, मैन्युअल रूप से अनुमतियों को पुनर्स्थापित किए बिना, यह कुछ ऐसा कहेगा

bash: <FILENAME>: Permission denied

के साथ अनुमतियों को पुनर्स्थापित करें

chmod +rwx <FILENAME>

पुराना संस्करण

केवल निष्‍पादन अनुमतियों को हटाता है, लेकिन एक आकर्षण लंबे समय तक (यह एक प्रश्न था, इससे पहले कि यह परिवर्तित हो जाए ):

chmod -x "$0"

स्नीकी संस्करण asukasz Niemier द्वारा

#!/bin/chmod 0

4
chmod 0भी काम करता है
gnibbler

@gnibbler thnx, ने कहा

मुझे लगता है कि आप कार्यक्रम को कॉल कर सकते हैं aऔर अभी तक 3 चार्ट बचा सकते हैं :chmod 0 a
यो '

@tohecz कि हालांकि मूल रूप से धोखा दे रहा है

5
यहां तक ​​कि #!/bin/chmod 0
अच्छाई

112

6800 मशीन कोड - 1 बाइट

0xDD

इसे HCF या हाल्ट एंड कैच फायर के नाम से जाना जाता है


78
खैर, नियम कहते हैं, "रिबूट या पड़ाव शुरू करने वाले किसी भी उत्तर को अयोग्य घोषित किया जाएगा", लेकिन यह सिर्फ एक पड़ाव शुरू नहीं करता है , क्योंकि यह आग भी पकड़ता है। इस प्रकार, +1!
तर्जुक

94

शेल + सेड, 16 बाइट्स

अन्य उत्तरों में से कुछ के रूप में काफी विनाशकारी नहीं ;-)

यह स्क्रिप्ट #स्वयं की प्रत्येक पंक्ति की शुरुआत में एक टिप्पणी सम्मिलित करती है:

sed -i s/^/#/ $0

3
कैसे के बारे में sed -i g $0?
शीशमारा

91

कमोडोर 64 बुनियादी

यह एक कार्यक्रम को नष्ट नहीं करता है।

1 POKE 2048,1

आत्म विनाश

कमोडोर 64 मेमोरी मैप के अनुसार , पता 2048अप्रयुक्त है, लेकिन इसमें एक मान होना चाहिए 0ताकि BASIC प्रोग्राम RUN हो सके।


1
क्या प्रहार बस एक चर को एक स्थान पर ले जाता है?
ojblass

12
@ojblass हां, प्रभावी रूप से। poke a, bC कोड के बराबर है *((unsigned char *)a) = b;
जूल्स

4
मैं इस तरह से मेरे फेसबुक पॉक्स की कल्पना करना चाहूंगा!
सनी आर गुप्ता

3
अरे वाह ... मुझे C64 बेसिक से PEEK और POKE याद है! मैं यह सामान 1977 के आसपास लिख रहा था।
फिक्सि

साइड नोट: 0कोड लाइनों के अंत को चिह्नित करने के लिए एक बाइट का उपयोग किया जाता है; इसलिए पता 0x800 को पहली कोड लाइन की शुरुआत को चिह्नित करने के लिए शायद एक की जरूरत है।
टाइटस

89

धारणा: रनिंग सोलारिस, रूट के रूप में लॉग इन किया

killall

3
क्या वास्तव में सोलारिस में ऐसा होता है?
ojblass

21
हाँ, यह वही करता है जो इसे टिन पर कहता है और सभी चलने वाली प्रक्रियाओं को मारता है।
ग्रेग हेविल

तुम्हारे लिए एक उत्थान!
ओब्लाज

9
1, इस सवाल का उल्लेख है कि कोई रूट एक्सेस की अनुमति नहीं है।
user80551

119
@ user80551 वह उस नियम का कारण है।
सीयारिया

68

अजगर, १ 18

open(__file__,'w')

फ़ाइल को केवल-लेखन मोड में खोलकर ट्रंकटेट करता है।


14
यदि आप गंभीर हैं, तो यह स्वयं ही खुल जाता है ( __file__अपने स्वयं के फ़ाइलनाम को संदर्भित करता है)। wमोड में खोलना फ़ाइल को काट देता है, मूल रूप से इसे साफ़ करता है।
बॉब

7
मुझे लगता है कि ट्रंकेशन खुले में होता है, लेकिन परवाह किए बिना पायथन रनटाइम को प्रोग्राम के अंत में सभी खुली फाइलों को फ्लश करना चाहिए, और प्रक्रिया समाप्त होने पर या तो पायथन या ओएस उन्हें बंद कर देंगे। जब आप उनके साथ काम करते हैं, तो खुले खुले हैंडल को बंद करने के लिए यह आम तौर पर अच्छा अभ्यास है।
बॉब

5
पायथन में फ़ाइलों को संभालने का "सही" तरीका है ... एर, के साथ। with open("myfile.txt","r") as thefile:और फिर आपका फ़ाइल-हैंडलिंग कोड स्वचालित रूप से फ़ाइल बंद कर देगा जब आप कर रहे हैं।
शिलकोट

1
इसे कुछ इस तरह छोटा किया जा सकता है open("f.py","w")
एथन बिएरेलिन

1
सीटीआर काम करने के लिए संघर्ष नहीं करता है। मानस में
minmaxavg

66

बैच: 5 बाइट्स

%0|%0

यह मूल रूप से विंडोज के लिए फोरबॉम्ब है।

ऐप अपना पहला तर्क दो बार शुरू करता है। इसे उत्पादक वातावरण में न चलाएं;)


83
क्या एक उत्पादक खिड़कियों का वातावरण है? (मैं मजाक कर रहा हूँ)।
ओरियन

17
यह बहुत मासूम लग रहा है!
ओजबलास

15
ठीक है, निश्चित रूप से कोशिश मत करो। यह ठीक नहीं हुआ।
rmobis

75
डाउनवोट करने के लिए प्रतिनिधि नहीं है, लेकिन यह संभव सबसे गंभीर तरीके से "केवल एक बार चलाता है" का उल्लंघन करता है।
Xan

14
मेरा मानना ​​है कि एक मानव केवल एक बार इसे क्रियान्वित करता है और यह योग्य होता है।
ojblass

54

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

localStorage.x = eval(localStorage.x + localStorage.x)

पहली बार जब आप इसे चलाते हैं, तो यह ठीक चलेगा:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
NaN

यदि आप इसे और अधिक चलाने की कोशिश करते हैं (भले ही आप ताज़ा करें), तो आपको एक त्रुटि मिलेगी:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
ReferenceError: NaNNaN is not defined

5
इसलिए यदि आप इसे बहुत बार चलाते हैं, तो आपको बैटमैन थीम मिलती है। उसके लिए +1।
हैन्केरॉर्ड्स

2
@ हैन्कॉर्डर्स दुख की बात है, वास्तव में नहीं, क्योंकि बाद में इसे अंजाम नहीं दिया जा रहा है ...
RedClover

@ सोकु बुम्मर ...
हैनकॉर्डर्स

जब तक आप नहीं हटाते हैं eval, तब तक #Hankrecords इस चुनौती को पूरा नहीं करेगा
RedClover

46

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

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

एकल संख्यात्मक अंक का अर्थ है, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dka3/hcsd0b10127.htm , और इस कार्य के लिए। यह नंबर 3 दिलचस्प है:

फ़ाइल मोड नंबर 3
फ़ाइल मोड नंबर 3 का मतलब है कि फ़ाइलें पढ़ने के बाद मिट जाती हैं। यदि आप अपने minidisks पर या अपने SFS निर्देशिकाओं में प्रतियां बनाए रखना नहीं चाहते हैं तो आप फ़ाइल मोड नंबर 3 का उपयोग कर सकते हैं।

इसलिए, अपनी स्क्रिप्ट लिखने में घंटों बिताएं और इसे `LOST FOREVER A3 'के रूप में फाइल करें। इसे चलाएं, यह पहली बार काम करता है। घर बसाओ, अच्छी तरह से नौकरी करो।

ध्यान दें, कोई भी संदेश मिटाए जाने का संकेत नहीं है। आखिरकार, हर कोई जानता है कि 3इसका क्या मतलब है, क्या वे नहीं?

यह वास्तव में बहुत उपयोगी है। आप एक बार परीक्षण पूरा कर सकते हैं, 3अस्थायी फ़ाइलों के लिए उपयोग कर सकते हैं, और बाद में उन्हें साफ नहीं करना होगा, क्योंकि वे एक बार पढ़ने वाली फाइलें हैं।


44

कमोडोर 64 बुनियादी

0 NEW

NEW कार्यक्रम को हटा देता है।


1
वह क्या है?
डेथ एग्रीगियस

3
@ user973810 अगर मैं बुनियादी याद है, नई स्मृति की सफाई के लिए है, इसलिए यह कार्यक्रम को नष्ट करेगा
user902383

3
अच्छा लगा। कमोडोर 64 के लिए विशिष्ट नहीं है, संभवतः 80 के दशक से लगभग हर 8-बिट बेसिक मशीन पर काम करता है ...
ysap

आप OLD या O कर सकते हैं। यह वापस भी आ सकता है। मैं 12 साल के 12 महीने के बच्चों को खेल कोडिंग जीनियस के नए रूप में पेश करता हूं; एक बार दुर्घटना से काम करता हूं। फिर गलती से पुराने-इंग के बजाय बचा लिया गया। ओ। अब और काम नहीं किया :( मैंने सीखा कि कैसे हेक्स संपादकों ने हालांकि बहुत तेज काम किया :)
मैट वारेन

3
@ डायसप: यह 1 नंबर लाइन के रूप में उपयोग कर रहा है तो यह अधिक पोर्टेबल होगा; सभी मूल कार्यान्वयनों ने लाइन नंबर 0. का समर्थन नहीं किया
celtschk

41

बैश, १२

नोट: यह विनाशकारी है।

:(){ :|:&};:

यह लोकप्रिय बैश कांटा-बम है। यह तेजी से सभी मेमोरी और पीआईडी ​​लॉक सिस्टम को खाता है। एक हार्ड-रिबूट कोड को फिर से चलाने की अनुमति देगा हालांकि आप ऐसा क्यों करना चाहेंगे?


बैश, १०

:(){ :&};:

दो कम वर्णों के लिए, यह आपकी मेमोरी को रैखिक रूप से खाता है।


मारना,,

w;PATH=

w सबसे छोटा निष्पादन योग्य है जिसे मैं सोच सकता था।

यह केवल पथ चर मिटाता है ताकि शेल /usr/bin/wअगली बार न मिल सके। शेल को पुनरारंभ करना इसे ठीक करता है क्योंकि पथ आमतौर पर अंदर संग्रहीत होता है~/.profile


डरने की बात है: DI का सिर्फ एक ही विचार था: P
Knerd

1
:(){ :&};:अपनी याददाश्त नहीं खानी चाहिए जैसे ही यह कांटा लगा, यह बंद हो गया, इसलिए केवल O(1)सक्रिय है। आपने किया है while(fork());, आपकी याददाश्त क्या खाएगी, इसके बराबर है fork(); while(1);
मारिनस

26
वाह! वे कुछ घातक इमोटिकॉन हैं! मैं सबसे अच्छा नहीं कहता हूँ कि मेरे कंप्यूटर को फ्रिगनीफेस कहा जाए :(){ ...
लेवल रिवर सेंट

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

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

20

सी#

स्वयं को हटाने के लिए सबसे छोटा कोड

Process.Start(new ProcessStartInfo("cmd.exe", "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location + "\""));

यूआई में इसे नोट करने योग्य बनाने के लिए कोड

Process.Start( new ProcessStartInfo()
{
    Arguments = "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location+"\"",
    WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, FileName = "cmd.exe"
});

7
आखिर में, एक C # उत्तर!
छप्पर

चुनाव की आवश्यकता क्यों है?
wizzwizz4

19

सी ++ 71

निष्पादन योग्य फ़ाइल "गोल्फ" अगली बार चलाने की अनुमति से वंचित है।

#include <stdlib.h>
int main()
{
system("chmod a-x golf");
return 0;
}

जावास्क्रिप्ट / HTML 137, 145 कंसोल टेस्ट के साथ

<script id="s"> 
function h(){
console.log(1);
var s=document.getElementById("s");
h=s.innerHTML;
h=h.replace("h","g");
s.innerHTML=h;
}

11
@Templar जावास्क्रिप्ट के संदर्भ में, मुझे लगता है कि पृष्ठ को

2
यहां तक ​​कि अगर आप पृष्ठ से स्क्रिप्ट को नहीं हटा रहे थे, तब भी यह केवल एक बार निष्पादित होगा। इसका कोई मतलब नहीं है।
14'13 बजे अंडरस्कोर

2
@nderscore फ़ंक्शन की तरह दिखता है, जो hकेवल एक बार निष्पादित करेगा। आपको वास्तव में इसे कहीं और से कॉल करना होगा (एक कार्यक्रम चलाने के लिए अनुरूप, मुझे लगता है)। , कहो <button onclick="h();">
बॉब

4
यह देखते हुए कि पृष्ठ को फिर से लोड करने की अनुमति है, और आपका लक्ष्य केवल एच को एक से अधिक बार निष्पादन योग्य होने से रोकना है जबकि यह पहले से ही लोड है, इसमें गलत क्या है function h(){h=0}?
कीन

1
साथ #include <sys/stat.h>आप उपयोग कर सकते हैं chmod, सीधे समारोह काफी कुछ बाइट्स बचत ( <stdlib.h>अब जरूरत है, और न है system)। इसके अलावा, कोई returnजरूरत नहीं है।
बेन वोइगट

19

मेरे नाम का खोल ... पॉवरशेल

क्लासिक स्व विनाशकारी संदेश:

@'
##################################
Project X is a go

Meet Eagle 1 at WP Alpha

Further comms is hereby prohibited
##################################
This message will self destruct in 
5 seconds
'@
5..1| %{$_;Sleep 1;}
"Goodbye"
rm $(.{$MyInvocation.ScriptName})

स्पष्टीकरण, कृपया?
no --zɐɹƆ

@ no @z। 13 तक की लाइनें केवल बकवास हैं। उसके बाद, किसी भी अन्य शेल की तरह, PowerShell रनिंग स्क्रिप्ट को मेमोरी में लोड करता है और इस प्रकार इसे अब मूल स्क्रिप्ट फ़ाइल की आवश्यकता नहीं है ... इसलिए यह स्वयं को हटा देता है।
SomeShinyObject

18

बैश (5)

rm $0

मान लें कि आपके पास फ़ाइलनाम में स्थान नहीं हैं।


40
यही कारण है कि यूनिक्स विंडोज से बेहतर है: डेल के बजाय आरएम ने आपको एक बाइट बचा लिया।
मैडक्स

1
@ मैडाक्स मैं यूनिक्स को * निक्स पसंद करते हैं।
wizzwizz4

14

#!/bin/sh
curl http://runonce.herokuapp.com/

केवल एक बार चलेगा (और यह दिखाता है कि "हैलो, दुनिया!" अगर यह चलता है), भले ही आप सिस्टम को पुनर्स्थापित करें, और स्क्रिप्ट को फिर से डालें।


संपादित करें: मुझे लगा कि मैं एक स्क्रिप्ट के रूप में अच्छी तरह से रनऑन के पीछे छोड़ दूंगा। कुछ खास नहीं, क्योंकि इसे या तो जारी नहीं किया जाना था, लेकिन जो भी हो।

<?php
$db = pg_connect("[connection information]");
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];

pg_query("DELETE FROM users WHERE time < now() - interval '1 day'");

$result = pg_query_params($db, "SELECT * FROM users WHERE ip = $1 LIMIT 1", array($ip));

if (!pg_fetch_row($result)) {
    echo "Hello, world!\n";
    pg_query_params($db, "INSERT INTO users (ip) VALUES ($1)", array($ip));
}

साथ ही डेटाबेस स्कीमा

CREATE TABLE users (
    ip inet PRIMARY KEY,
    time timestamp with time zone NOT NULL DEFAULT now()
);
CREATE INDEX ON users (time);

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


4
मेरा तर्क है कि यह कई बार चलेगा, यह सिर्फ पहले के बाद कोई आउटपुट नहीं देता है।
ब्रिलियनड

5
एक बार भी मेरे लिए "हैलो वर्ल्ड" नहीं दिखा।
पाओलो एबरमन

1
@ StéphaneGourichon: हाँ, यह IP को याद रखता है, और स्वचालित हटाने से पहले IP हटाने का कोई तरीका नहीं है। मैंने स्रोत कोड डालने का फैसला किया, ताकि आप जांच सकें कि यह क्या करता है।
कोनराड बोरोस्की

1
@ स्टीफनगॉरिचोन: pg_query_paramsएसक्यूएल इंजेक्शन से बहुत ज्यादा बचाता है। हालाँकि, इसे सहेजा नहीं जाएगा, क्योंकि '; DROP TABLE users;--यह एक वैध आईपी नहीं है ( inetकेवल आईपी स्वीकार करता है), और इसलिए यदि आपके पास एक नकली X-Forwarded-Forहेडर है, तो आपकी यात्रा को बचाया नहीं जाएगा। मैं इसे स्वयं समस्या नहीं मानता।
कोनराड बोरोस्की

2
मेरा मानना ​​है कि यह एक मानक खामियों का उल्लंघन है: असली जवाब आउटसोर्सिंग
जूनियर जूनियर

12

PHP, 22 20 वर्ण

<?=unlink(__FILE__);

संपादित करें: प्रति टिप्पणी के अंत में दो वर्ण हटाए गए।


2
इसे आगे सरलीकृत किया जा सकता है:, <?unlink(__FILE__);अनुगामी ?>की आवश्यकता नहीं है
जुआन

आपको शुरुआत करना है <?=या प्रारंभ टैग को मान्यता नहीं दी गई है।
माइकल जूनियर

2
PHP खुद को नष्ट कर रहा है ... हा! E_NOTICE लाइन 3048
मेटाडिंग्स

<?+ स्थान भी ठीक है। आप केवल लघु टैग के बाद एक पत्र का उपयोग नहीं कर सकते।
टाइटस

11

रूबी, 14

यह प्रोग्राम के नाम के रूप में स्रोत कोड को फिर से लिखता है।

IO.write $0,$0

3
और क्या होगा अगर कार्यक्रम का नाम "IO.write $ 0, $ 0" है? "मान लें: प्रोग्राम का नाम कुछ ऐसा है जो किसी भी भाषा में मान्य कोड नहीं है।"
ब्रिलियनड

@Brilland एक रूबी प्रोग्राम हमेशा समाप्त होना चाहिए .rbऔर भले ही इसका नाम "IO.write $ 0, $ 0 # .rb" हो, जो काम नहीं करेगा क्योंकि इसे लिखते समय पूरा रास्ता शामिल होगा।
ममद

3
@ एक रूबी प्रोग्राम किसी भी चीज़ के साथ समाप्त हो सकता है। उदाहरण के लिए gemऔर irbबिना विस्तार वाले रूबी कार्यक्रम हैं।
bfontaine

@bfontaine जिसमें शेबंग हैं। यह नहीं है
wizzwizz4

@ wizzwizz4 शेबंग्स का विस्तार से कोई लेना-देना नहीं है। ruby fooऔर ruby foo.rbशेबंग के साथ या उसके बिना भी यही काम करेगा। ./fooऔर ./foo.rb(वे निष्पादनीय हैं) यह दोनों शबंग के बिना विफल हो जाएंगे और इसके साथ सफल होंगे (सही कोड, आदि को मानते हुए)।
bfontaine

10

बैच (6 अक्षर)

यह मान रहा है कि हमारे पास फ़ाइल को हटाने की अनुमति है, और निश्चित रूप से विंडोज पर (शायद एमएस-डॉस के रूप में भी) किया जा सकता है।

del %0

10

बैश ers अक्षर

nc -l 1&

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


1
मुझे लगता है कि यह काम नहीं करता है, क्योंकि 0एक विशेष बंदरगाह है (यह आरक्षित है)। जब मैं इसे अपने कंप्यूटर पर चलाता हूं तो मैं इसे कई बार खोल सकता हूं। इसके अलावा, यह एक बंदरगाह है < 1024, जिसका अर्थ है कि इस पर रूट एक्सेस की आवश्यकता होती है।
हेनरिच 5991

nc -l 1&समस्या को ठीक करेगा 0और एक बाइट कम होगी, क्योंकि अंतिम स्थान की आवश्यकता नहीं है।
कसपर

@kasperd इनपुट के लिए धन्यवाद :-)
फाल्को

@ heinrich5991 ठीक है - मुझे 9654 जैसे पोर्ट का उपयोग करने के लिए रूट एक्सेस के बिना 11 वर्णों की आवश्यकता होगी
फाल्को

यह समझाने की परवाह करें कि आपने क्यों अपमानित किया?
फाल्को

9

NodeJS - 33 बाइट्स

require('fs').unlink(__filename);

क्या आप इसका वर्णन कर सकते हैं कि यह उन लोगों के लिए क्या करता है जो भाषा से अपरिचित हैं?
काइल कानोस

1
@KyleKanos यह फ़ाइल सिस्टम मॉड्यूल fsऔर वर्तमान फ़ाइल __filenameनाम प्राप्त करता है और फ़ाइल सिस्टम से उस फ़ाइल नाम को हटा देता है।
कीन

7
आप अर्धविराम को समाप्त कर सकते हैं क्योंकि वे जावास्क्रिप्ट में वैकल्पिक हैं।
नालपुरी 12

8

बैच, 7 चार्ट

इसे आज़माने से पहले बिना सहेजे हुए काम को बचाएं।

64-बिट सिस्टम, या <2 जीबी रैम मेमोरी के साथ 32-बिट सिस्टम मानता है। लॉन्च होने से पहले एक .bat या .cmd फ़ाइल में सहेजा जाना चाहिए, बस इसे cmd.exe में दर्ज करने से काम नहीं चलेगा।

^ nul<^

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

सभी क्रेडिट्स इसके लिए StackOverflow पर txtechhelp पर जाते हैं, यहाँ अधिक जानकारी देखें: https://stackoverflow.com/q/23284131/1955334


यह कैसे संभव होगा? पेजिंग के बारे में क्या? प्रक्रिया प्राथमिकता?
निकोलस बारबुल्स्को

मैंने इस स्क्रिप्ट को चलाया, कुछ नहीं हुआ।
पावेल

@ मुझे लगता है कि यह विंडोज 10 में तय हो गया है। मैं इसे विंडोज 10 पर पुन: पेश नहीं कर सकता, लेकिन यह विंडोज 8.1 पर काम करता है।
bilde2910

1
"यह एक पूर्ण सीपीयू कोर का उपभोग करता है और आपकी रैम मेमोरी को कई सौ मेगाबाइट प्रति सेकंड की दर से भरता है। यदि आप इसे समय (टास्क मैनेजर) में नहीं रोकते हैं, तो यह आपके कंप्यूटर, आपके पूरे सिस्टम पर रैम की हर बाइट का उपभोग करेगा। फ्रीज कर देंगे और आप कुछ भी नहीं कर सकते इससे पहले कि आप जबरन बंद कर दें और अपने कंप्यूटर को बिजली काटने या बिजली बंद करने के माध्यम से पुनरारंभ करें। " कंप्यूटर के लिए एक डरावनी कहानी की तरह लगता है ...
no az

7

यहाँ एक युगल है। कई के विपरीत, ये विनाशकारी नहीं हैं, बस रचनात्मक और अपरंपरागत हैं।

दे घुमा के

#!/usr/bin/env bash
read <<< ''
printf "$REPLY" > "$0"

यह बहुत आसान है। चर का $REPLYअर्थ निहित रूप से बनाया गया है read, लेकिन एक खाली हेस्ट्रिंग के साथ भरा हुआ है। उस खाली स्ट्रिंग को printfवर्तमान स्क्रिप्ट में एड किया जाता है। यह निम्नलिखित के बजाए एक बहुत ही संतुलित है:

#!/usr/bin/env bash
cat <<< '' > "$0" # probably a lot more portable

विंडोज बैच

copy con %0 < nul

दूसरा मूल रूप से कंसोल इनपुट को कॉपी करता है, nulवर्तमान फ़ाइल में से पढ़ा जाता है।


इसके बाद एक लोकप्रियता की प्रतियोगिता बन गई
इसियाह मीडोज

1
पहला रूट रूट अनुमतियों के बिना काम नहीं करेगा। आप अशक्त डिवाइस को बदलने की कोशिश क्यों कर रहे हैं? जब रूट के रूप में चलाया जाता है, तो यह वास्तव में सिस्टम को गलत तरीके से व्यवहार करेगा। आप इसे लिखते समय अशक्त भी लिख रहे हैं :) क्यों नहीं इसे कहीं और स्थानांतरित करें? जैसे mv "$ 0" "$ {0} x" या कुछ और? यह चाल करना चाहिए।
ओरियन

क्या फाइल अभी भी बाद में मौजूद है?
इशायाह

मैंने अब बैश उदाहरण को पूरी तरह से बदल दिया।
इश्स मीडोज

ये कैसे विनाशकारी नहीं हैं?
ysap

7

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

10 POKE 23635,255

मेमोरी में BASIC प्रोग्राम के पते को दूर ले जाता है जहाँ से यह (203) होना चाहिए ताकि गलत डेटा दुभाषिया द्वारा पाया जाए।


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