कई सत्रों में संख्या बढ़ाना


30

गुड इवनिंग गोल्फ एजेंट,

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

आपका लक्ष्य एक प्रोग्राम लिखना है जो उस समय की मात्रा को गिनता है जो इसे चलाया गया है। प्रोग्राम को कुछ और नहीं करना चाहिए तो पूर्णांक को stdout में लिखें। पहली बार जब इसे चलाया जाता है, तो इसे "1" वापस करना चाहिए। अगला "2" और इसी तरह। कार्यक्रम कम से कम "14" संख्या तक पहुंचने में सक्षम होना चाहिए, लेकिन आवश्यक ऊपरी सीमा नहीं है।

हालाँकि, आपके प्रोग्राम को कोई नई फ़ाइल नहीं लिखनी चाहिए। खुद को एक्सेस करना, या रजिस्ट्री, या यहां तक ​​कि इंटरनेट बिल्कुल ठीक है। लेकिन हमारे कुछ उपयोगकर्ता नई फ़ाइलों के बारे में संदेह करते हैं, और केवल उन्हें अधिलेखित कर देंगे! नस! सॉफ्टवेयर पर सीमाओं को हराकर वे वैध रूप से खरीदे गए!

प्रोग्राम एक स्थिर दुभाषिया या शेल को ग्रहण नहीं कर सकता है - प्रोग्राम को अभी भी काम करना चाहिए अगर पूरा इंटरप्रेटर नाय शेल नाय कंप्यूटर को चलाने के बीच पुनरारंभ किया जाता है।

जैसा कि यह संभव के रूप में undetectable होना चाहिए, सबसे छोटा स्रोत कोड जीत जाएगा।

गुड लक एजेंट। मनोरंजन उद्योग आप पर भरोसा कर रहा है।


जवाबों:


21

बैश स्क्रिप्ट, ३ ९ , ,, २१ १,

wc -l<$0;echo>>$0

लघु और मधुर, कोड गोल्फ में मेरा पहला सबमिशन :)


1
इसके echoसाथ बदलें id: D
thejh

यह फाइल करने के लिए अनावश्यक उत्पादन को जोड़ता है, जिसे stderr पर पुनर्निर्देशित किया जाएगा
Rozuur

है ना? यहाँ ऐसा कुछ भी नहीं है जो stderr के साथ इंटरैक्ट करता हो। लेकिन सही है, यह समय के साथ फ़ाइल को बड़ा बनाता है।
thejh

17 को गोल्फ हो सकता है: नईलाइन के ;साथ बदलें और पीछे आने वाली नई लाइन को हटा दें। यह भी एक बहुत अच्छे लगेंगे :-)
टॉमस

क्या स्क्रिप्ट का केवल शुरुआती आकार प्रासंगिक है? यह देखते हुए कि यह हर रन के आकार में वृद्धि करेगा।
चाचा

18

पायथन, 40 , 39 , 38 अक्षर

इसके अलावा रनटाइम पर ऐसी कोई ऊपरी सीमा नहीं है:

open(__file__,'a').write("+1");print 1

जैसा कि आप देख सकते हैं, कार्यक्रम का आकार धीरे-धीरे बढ़ता है लेकिन मूल समस्या में ऐसा कोई प्रतिबंध नहीं था। मेरा मानना ​​है, प्रस्तुत कार्यक्रम का आकार सभी मायने रखता है


मुझे नहीं लगता कि आपको लगाने की जरूरत है a+, aठीक काम करना चाहिए।
beary605

@ beary605: टिप के लिए धन्यवाद
अभिजीत

10

PHP 48 बाइट्स

<?=$n=1 ;fputs(fopen(__FILE__,c),'<?=$n='.++$n);

एक सरल आत्म संशोधित दृष्टिकोण। 99 बार चलाने के बाद, यह शानदार ढंग से दुर्घटनाग्रस्त हो जाएगा।

$ php increment.php
1
$ php increment.php
2
$ php increment.php
3

$ php increment.php
97
$ php increment.php
98
$ php increment.php
99
$ php increment.php
PHP Parse error:  syntax error, unexpected T_STRING, expecting ',' or ';' in increment.php on line 1

एकल व्हाट्सएप अकारण नहीं है?
जॉन ड्वोरक

1
@JanDvorak कार्यक्रम में एकल व्हाट्सएप आवश्यक है, अन्यथा यह केवल 10 निष्पादन के बाद दुर्घटनाग्रस्त हो जाएगा, जो विनिर्देश को पूरा नहीं करता है। 100 वें निष्पादन के बाद अर्धविराम को अधिलेखित कर दिया जाता है, जो वाक्यविन्यास त्रुटि का कारण बनता है।
प्रिमो

35 वर्णों के लिए PHP समाधान मिला , मुझे हरा देना चाहते हैं? :)
टॉमस


5

रूबी: 31 21 अक्षर

(यह अभिजीत के पाइथन समाधान का पुनर्लेखन है । यदि आपको आधार विचार पसंद है, तो उसके उत्तर को लाइक करें, जैसे मैंने किया।)

open($0,?a)<<"+1";p 1

नमूना रन:

bash-4.2$ ruby increment.rb 
1

bash-4.2$ ruby increment.rb 
2

bash-4.2$ ruby increment.rb 
3

1
उपयोग करने से <<आप कुछ वर्णों को बचा सकते हैं: `खुला ($ 0; (a) <<" + 1 "; पी 1 \
_

रवींद्र। डेटा फ़ाइलों को सुनिश्चित करने की अच्छी पुरानी आदत बंद हो जाती है: ... धन्यवाद, @steenslag।
manatwork

5

* श, १,

curl -L x.co/z7Uk

एक वेब सेवा का उपयोग करना, अन्य मौजूदा समाधानों की तुलना में एक अलग दृष्टिकोण। सीमा: मेरी मशीन की मेमोरी।


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

alert(localStorage.a=~~localStorage.a+1)

शायद ही एक कार्यक्रम के रूप में गिना जाता है, लेकिन यह काफी लंबा रास्ता है। स्थानीय फ़ाइल में फ़ायरफ़ॉक्स में काम नहीं करता है। सीमा: 2 ^ 31।


क्यों नहीं alert(localStorage.a=~~localStorage.a+1)41 और तकनीकी रूप से जावास्क्रिप्ट प्रोग्राम बोलना स्क्रिप्ट टैग के बिना होगा जो केवल 33 होगा
डेविड मुल्डर डिक

@DavidMulder ओह, राइट
कॉपी

2
डाउन टू 33:alert((l=localStorage).a=~~l.a+1)
नाइट्रो 2k01

@ nitro2k01: ऐसा लगता है कि मैंने गलत सामान की नकल की, इसका कारण यह था कि 33 मैं O के बारे में बात कर रहा था :) 41 स्क्रिप्ट टैग्स सहित एक ही बात थी ~ (ठीक है, मैंने अलर्ट से पहले घोषणा की थी, क्योंकि यह अभी तक लंबा है: a=localStorage;alert(a.b=~~a.b+1)हालांकि आपका अच्छा लग रहा है: D
डेविड मुल्डर

1
@ वास्तव में, यह वास्तव में बिटवाइज़ इनवर्ट है और जावास्क्रिप्ट के अजीब प्रकार के रूपांतरण नियमों का दुरुपयोग करता है
कॉपी

4

PHP 31 37 वर्ण

आत्म संशोधन। यह यूनिटी में मायने रखता है। सावधान रहें कि आपका पाठ संपादक सहायक होने का प्रयास नहीं करता है और 1. के बाद एक नई पंक्ति वर्ण सम्मिलित करता है। यह PHP <5.3.2 में केवल (ठीक से) काम करेगा क्योंकि यह शटडाउन पर खुले फ़ाइल विवरणकों को बंद करने के लिए php पर निर्भर करता है। या फ़ाइल डिस्क्रिप्टर को लीक करना स्वीकार्य है?

<?fputs(fopen(__FILE__,a),1)?>1

मूल संस्करण (36 वर्ण), सभी PHP संस्करण:

<?file_put_contents(__FILE__,1,8)?>1

2
"यह एकात्मकता में गिना जाता है" ... सर्वश्रेष्ठ गोल्फ हैक मैंने लंबे समय से देखा है!
लोचनोक

मैं तुम्हें चुनौती देता हूँ। 35 वर्णों के लिए PHP समाधान , और यह दशमलव में है :)
टॉमस

1
वाह, मैं देख रहा हूं कि आपने मुझे अपने तरीके से पीटा है! बधाई हो! :-) और मेरी विधि के सुधार के लिए धन्यवाद। मैंने इसे अपने उत्तर में शामिल किया है और आपको इसके लिए एक क्रेडिट दिया है।
टॉमस

@ टॉमास मैं आपको श्रेय देता हूं। अगर आपने मुझे चुनौती नहीं दी, तो मैंने इस जवाब पर दोबारा गौर नहीं किया।
टिम सेगिन

टिम, यह बिल्कुल एक-दूसरे को चुनौती देने की खुशी और उत्साह है! :)
टॉमस

2

अजगर, ५०

n=1;
print n
open(__file__,'r+').write("n="+`n+1`)

यह प्राइमो के उत्तर के समान दृष्टिकोण का उपयोग करता है और इसी तरह 100 वें रन पर क्रैश होता है।


2

जे (58)

आपको इसे स्क्रिप्ट के रूप में चलाने की आवश्यकता है, यह स्पष्ट रूप से जे कमांड लाइन से काम नहीं करेगा।

echo m=.1
exit(;:^:_1(<":m+1)(<3)};:1!:1[k)1!:2[k=.1{ARGV

J में, टोकनर जो कि दुभाषिया उपयोग करता है ;:, फ़ंक्शन के रूप में उपलब्ध है , इसलिए यदि xJ कोड ;:xमें J टोकन शामिल है, अर्थात:

    ;: 'echo 1 2 3+4 5 6'
+----+-----+-+-----+
|echo|1 2 3|+|4 5 6|
+----+-----+-+-----+

इसलिए:

  • echo m=.1: m1 पर सेट करें, और इसे स्क्रीन पर लिखें
  • k=.1{ARGV: ARGV(स्क्रिप्ट नाम) में दूसरा तत्व संग्रहीत करें k
  • ... 1!:2[k: निम्न स्ट्रिंग को फ़ाइल में लिखें k:
  • ;:1!:1[k: पढ़ें k, वर्तमान स्क्रिप्ट, और टोकन
  • (<":m+1)(<3)}: स्ट्रिंग प्रतिनिधित्व द्वारा तीसरी टोकन की जगह m + 1
  • ;:^:_1: एक टोकन का निर्माण, रिवर्स में टोकन चलाएं
  • exit: दुभाषिया से बाहर निकलें (यह आपके द्वारा स्क्रिप्ट चलाने पर भी ऐसा नहीं करता है)

2

PHP, 34 33 वर्ण

<?=$_SESSION[A]+=session_start();

अपडेट के लिए टिम को धन्यवाद! मेरा पुराना हल:

<?=session_start()+$_SESSION[A]++;

समस्या यह है कि है $_SESSION[A]है ""रिक्त स्ट्रिंग - - पहले चरण में है, लेकिन के रूप मेंsession_start() रिटर्न 1, आप इसे जोड़ सकते हैं और एक शॉट में दो या तीन मक्खियों को मार सकता है!

सही सिंटैक्स के साथ समाधान (35 वर्ण):

<?=session_start()+$_SESSION[A]++?>

मैं दो कारणों से एक दूसरे के लिए निर्णय ले सकता हूं। "हालाँकि, आपके प्रोग्राम को कोई नई फ़ाइल नहीं लिखनी चाहिए।": मुझे यकीन नहीं है कि अगर इस समाधान के लिए कोई समस्या नहीं है, क्योंकि एक सत्र खोलने से एक अस्थायी फ़ाइल बन जाती है। साथ ही डिफ़ॉल्ट सत्र gc 24 मिनट के बाद होता है। क्या वास्तव में "कई सत्रों में" के रूप में गिना जाता है? शायद ओपी टिप्पणी कर सकते हैं।
टिम सेगिन

टिम, प्रोग्राम कोई फाइल नहीं लिखता है। दुभाषिया क्या करता है, इसके लिए मैं जिम्मेदार नहीं हूं। यह वैसा ही है जैसा कि HTML पेज कैश में कुछ फाइल बनाने वाले ब्राउजर के लिए जिम्मेदार नहीं है, डिस्क पर अस्थायी टेबल्स बनाने के लिए sql क्वेरी जिम्मेदार नहीं है। टाइमआउट के लिए, यह नियमों में निर्दिष्ट नहीं था :) वैसे भी, मैं नहीं हूं क्यों, लेकिन मेरी मशीन पर काउंटर अभी भी कई घंटों से अधिक समय तक रहता है !!!
टॉमस

हां, इसीलिए मैं कह रहा हूं कि मैं इंतजार करूंगा कि ओपी क्या सोचता है। आपको निश्चित रूप से एक बहुत ही ग्रे क्षेत्र मिला। आपको समापन php टैग btw की आवश्यकता नहीं है। इसलिए आपका 34 चार संस्करण पर्याप्त है। मुझे एक सुधार के लिए एक विचार है, लेकिन मुझे पहले इसका परीक्षण करने की आवश्यकता होगी।
टिम सेगिन

ठीक है, मैं इसे 33 वर्णों तक ले गया। मैंने आपसे बेहतर करने की हिम्मत की। ;)
टिम सेगिन

@TimSeguine Aaaah, आपके लहजे में क्या बदलाव है! :-) अब आपको मेरी पोस्ट में नियमों की परवाह नहीं है! :
टॉमस

2

हास्केल - 36 बाइट्स

main=do appendFile"a.hs""+1";print$1

बस +1स्रोत फ़ाइल के अंत में जोड़ा जाता है, जिसे नाम दिया गया है a.hs.hsविस्तार दोनों GHC और GHCi में अनिवार्य है।



1

बैच - 41

उदाहरण के उपयोग के मामले को देखते हुए मैं शायद यह नहीं मानूंगा कि यह तकनीक एक व्यवहार्य है - यह स्क्रिप्ट वाली .bat फ़ाइल का नाम बदल देता है -

@set/aa=%~n0+1
@echo %a%&@ren %0 %a%.bat

इसे एक फ़ाइल में सहेजें 0.bat- और कॉल का उपयोग करके 0.bat 2>nul2>nulरीडर्स को nul में पुनर्निर्देशित करता है जो आवश्यक है क्योंकि यह स्क्रिप्ट स्क्रिप्ट वाली फ़ाइल का नाम बदल देगा, एक बार यह करने के बाद कि cmd स्पष्ट रूप से स्क्रिप्ट नहीं देख सकता है (इससे पहले कि ईओएफ हिट हो) और वह त्रुटि वापस कर देगाThe batch file cannot be found.

स्क्रिप्ट के प्रत्येक लगातार कॉल को निश्चित रूप से करना होगा 1.bat 2>nul ... 2.bat 2>nul ... 3.bat 2>nul ... etc ...


इस विचार के आधार पर, आप गणना में मेरे php उत्तर की भिन्नता को भिन्न कर सकते हैं और मुझे लगता है कि यह इससे भी कम है।
टिम सेगिन

1

mIRC स्क्रिप्ट, 28/22 बाइट्स

यदि "उपनाम" टैब में रखा जाता है, तो "अलियास" को 22 बाइट्स बनाकर छोड़ा जा सकता है।

alias x inc %i | echo -ag %i

1

पायथन, 49 48 वर्ण

मैंने महसूस किया कि यह केवल विंडोज पर 48 चार्ट होने के कारण होगा \r\n। अन्यथा यह 49 होना चाहिए।

n=1

print n;print>>open(__file__,'r+'),"n=",n+1

@Grc द्वारा विधि का एक सस्ता ripoff


1

सी, 190 वर्ण। केवल विन NT पर काम करता है

#include <stdio.h>
int main(int c,char *v[]){
char f[100];sprintf(f,"%s:s",v[0]);
if (FILE *fp=fopen(f,"r"))fscanf(fp,"%d",&c);
FILE *fp=fopen(f,"w");printf("%d",c-1);fprintf(fp,"%d",++c);
}

मुझे लगता है कि यह बहुत सरल है कि इसका काम कैसा है, लेकिन फिर भी यदि आवश्यक हो तो मैं एक स्पष्टीकरण जोड़ सकता हूं :-)
अभिजीत

1

सी #, 142 वर्ण

int v=(Microsoft.Win32.Registry.CurrentUser.GetValue("c") as int?)??0+1;Console.Write(v);Microsoft.Win32.Registry.CurrentUser.SetValue("c",v);

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

आपको व्हॉट्सएप भी हटा देना चाहिए।
टाइमटेक

1
हर बार लंबे एपीआई नाम को कॉल करने के बजाय, इसे एक चर में स्टोर करें जैसे: var a = Microsoft.Win32.Registry.CurrentUser; a.GetValue (); a.SetValue ();
Xantix

1

Tcl, 63 या 73 बाइट्स

  • कुछ वेब सेवा के साथ यह 73 है:

    package require http
    puts [set [http::geturl http://example.com/c](data)]
    
  • खुद को संशोधित करना 63 है:

    proc a a {puts [string le $a]};puts -nonewline [open $argv0 a] a; a a
    

1

सी # - 201 239 234 चार्ट

पहले 255 बार काम करता है, फिर 0 से अधिक लपेटता है। यह पहले निष्पादन पर कुछ भी आउटपुट नहीं करेगा।

namespace System.IO{class s{static void Main (string[]a){char f='|';if(f!='|'){Console.Write (255);}string p=Reflection.Assembly.GetCallingAssembly().Location;byte[]d=File.ReadAllBytes(p);d[769]++;d[780]++;File.WriteAllBytes(p,d);}}}

Main.cs के रूप में सहेजें, के साथ संकलित करें

gmcs Main.cs

Gmcs 2.10.8.1 और मोनो रनटाइम 2.10.8.1-5ubuntu2 के साथ परीक्षण किया गया


1
असल में - मैंने किया। "कार्यक्रम कम से कम 14 की संख्या तक पहुंचने में सक्षम होना चाहिए"
lochok

यह अब 255 बार काम करता है।
user3188175

1

पॉवरशेल, 47 बाइट्स

स्क्रिप्ट का नाम रखा गया है a.ps1

0
[int]$n,$t=(gc a.ps1)[0..1];,(++$n),$t>a.ps1

स्क्रिप्ट खुद की जगह के ऊपर लिख देगा 0के साथ पहली पंक्ति पर 1, 2,3 और इतने पर।

भी की दोनों मामलों replaceing द्वारा एक और 8 बाइट्स बचा सकता है a.ps1के साथ 1और नाम की एक फ़ाइल के रूप में स्क्रिप्ट सहेजने 1हालांकि यह थोड़ा मेरे लिए अब तक बाहर है।

यदि फ़ाइल 'a.ps1' के रूप में सहेजी नहीं गई है, तो इसके साथ दूसरी पंक्ति बदलें।

[int]$n,$t=(gc($s=$MyInvocation.MyCommand.Name))[0..1];,(++$n),$t>$s

0 गिनती शुरू करने के लिए पहली पंक्ति में

लाइनब्रेक फ़ाइल को दो में विभाजित करने का सबसे आसान तरीका प्रदान करता है

[int]$n,$t=(gc a.ps1)[0..1]

यह फ़ाइल को 'a.ps1' लेता है और इसे लाइनों की एक सरणी के रूप में पढ़ता है, फिर हम इसके माध्यम से पुनरावृति करते हैं [0..1]और सेट करते हैं कि चर और क्रमशः के $nरूप में डाली जाती है, ताकि पहली पंक्ति में और कोड बन जाए। 'दूसरी पंक्ति में हो जाता है[int]$t0$n$t

,(++$n),$t>a.ps1

यह इस्तेमाल किया ,1,2 सरणी संकेतन का , दो तत्वों की एक सरणी बनाने के लिए, जिसमें एक संख्या संग्रहीत है$n पूर्व-संवर्धित और निहित ब्रैकेट के उपयोग से स्टडआउट करने के लिए आउटपुट किया जाता है, दूसरा फ़ाइल से पाठ की दूसरी पंक्ति है, और आउटपुट भी है 'a.ps1' नाम की फ़ाइल में

चूंकि इनपुट और आउटपुट दोनों तार के सरणियाँ हैं, इसलिए न्यूनतम स्वरूपण आवश्यक है, और दुभाषिया द्वारा लगभग सब कुछ मान लिया गया है।


1

Zsh (कोई कोर्यूटिल्स ), 32 बाइट्स

a=`<$0`
<<<$[$#a/2-15]
>>$0<<<:

(अनुगामी न्यूलाइन पर ध्यान दें) स्क्रिप्ट की लंबाई का उपयोग करता है। प्रत्येक आह्वान पर, ऊपर दर्शाई गई अंतिम पंक्ति :(समरूप true) और स्क्रिप्ट के लिए एक नई रेखा होगी, इसलिए /2

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


0

जंग / कार्गो-स्क्रिप्ट, 283 बाइट्स

एक लाइन:

use std::fs::File;use std::io::Write;fn main(){let c=     0; let mut v = vec![];::std::io::Read::read_to_end(&mut File::open("w").unwrap(),&mut v);let mut q=&mut File::create("w").unwrap();q.write(&v[..53]);q.write(format!("{:6}",c+1).as_bytes());q.write(&v[59..]);println!("{}",c);}

के रूप में सहेजें wऔर साथ चलाएं cargo-script:

$ cargo-script script w
   Compiling w v0.1.0 (file:///home/vi/.cargo/script-cache/file-w-b4d6541706fabb11)
    (warnings skipped...)
    Finished release [optimized] target(s) in 1.47 secs
0
$ cargo-script script w
    (compilation output skipped)
1
$ cargo-script script w
...
2
$ cargo-script script w 2> /dev/null
3
$ cargo-script script w 2> /dev/null
4
$ cargo-script script w 2> /dev/null
5
$ cargo-script script w 2> /dev/null
6
$ cargo-script script w 2> /dev/null
7
$ cargo-script script w 2> /dev/null
8
$ cargo-script script w 2> /dev/null
9
$ cargo-script script w 2> /dev/null
10
$ cargo-script script w 2> /dev/null
11

बहुत तेजी से पुनरावृत्ति न करें या यह हो जाएगा अटक जाएगा

आंशिक रूप से अपराजित:

use std::fs::File;use std::io::Write;fn main(){let c=     0;
    let mut v = vec![];
    ::std::io::Read::read_to_end(&mut File::open("w").unwrap(),&mut v);
    let mut q = &mut File::create("w").unwrap();
    q.write(&v[..53]);
    q.write(format!("{:6}",c+1).as_bytes());
    q.write(&v[59..]);
    println!("{}", c);
}

99999 के बाद टूट जाएगा;


0

GNU sed, 13 + 1 (n ध्वज) = 14 बाइट्स

$=;$eecho>>s

चलाएँ: sed -nf एस.एस.

धारणा यह है कि स्रोत फ़ाइल नाम को कहा जाता है s। कोड के बाद एक अनुगामी न्यूलाइन की आवश्यकता होती है, जिसे बाइट्स में गिना जाता था। स्पष्टीकरण:

$=           # print the number of lines of the input file
$eecho>>s    # a shell echo call that appends an empty line to the source file 's'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.