Guten Abend Golf Agents,
Ihre Mission ist im Auftrag des berüchtigten Unterhaltungsgiganten Eviltronic Arts. Im Rahmen ihres schändlichen Plans zur Versklavung und Unterhaltung der Welt müssen sie so viele Exemplare wie möglich von SimStation V verkaufen. Dies bedeutet, dass die Software nach ein paar Starts auf mysteriöse Weise nicht mehr funktioniert.
Ihr Ziel ist es, ein Programm zu schreiben, das zählt, wie oft es ausgeführt wurde. Das Programm darf nichts anderes tun, als die Ganzzahl in stdout zu schreiben. Bei der ersten Ausführung sollte "1" zurückgegeben werden. Die nächste "2" und so weiter. Das Programm muss mindestens die Zahl "14" erreichen können, es ist jedoch keine Obergrenze erforderlich.
Ihr Programm darf jedoch keine neuen Dateien schreiben. Der Zugriff auf sich selbst, die Registrierung oder sogar das Internet ist absolut in Ordnung. Einige unserer Benutzer sind jedoch misstrauisch gegenüber neuen Dateien und werden diese lediglich überschreiben! Der Nerv! Die Einschränkungen der Software, die sie zu Recht gekauft haben, aufheben!
Das Programm kann keinen stabilen Interpreter oder keine stabile Shell annehmen - das Programm muss weiterhin funktionieren, wenn der gesamte Interpreter bzw. die Shell bzw. der Computer zwischen dem Ausführen neu gestartet wird.
Da es so unauffindbar wie möglich sein muss, gewinnt der kürzeste Quellcode.
Viel Glück Agenten. Die Unterhaltungsindustrie zählt auf Sie.
Antworten:
Bash-Skript,
39,37,2118Kurz und gut, meine erste Einsendung in Code Golf :)
quelle
echo
durchid
: D;
mit newline und entferne die nachlaufende newline. Es wird noch viel schöner aussehen :-)Python,
40,39, 38 ZeichenEs gibt auch keine solche Obergrenze für die Laufzeit:
Wie Sie sehen, nimmt die Größe des Programms allmählich zu, das ursprüngliche Problem unterlag jedoch keiner solchen Einschränkung. Ich glaube, die Größe des eingereichten Programms ist alles, was zählt
quelle
a+
,a
sollte gut funktionieren.PHP 48 Bytes
Ein einfacher selbstmodifizierender Ansatz. Nach 99 Läufen stürzt es spektakulär ab.
⋮
quelle
Bash-Skript, 37
quelle
Ruby:
3121 Zeichen(Dies ist ein Umschreiben von Abhijit ‚s Python - Lösung . Wenn Sie wie die Grundidee, upvote seine Antwort, wie ich es tat.)
Probelauf:
quelle
<<
Sie einige Zeichen speichern: `open ($ 0* sh, 17
Verwenden Sie einen Webservice, einen anderen Ansatz als die anderen bisherigen Lösungen. Limit: Der Speicher meiner Maschine.
JavaScript, 40
Gilt kaum als Programm, ist aber trotzdem ziemlich lang. Funktioniert nicht in Firefox in einer lokalen Datei. Limit: 2 ^ 31.
quelle
alert(localStorage.a=~~localStorage.a+1)
41 und technisch gesehen wäre das Javascript-Programm ohne die Script-Tags, die nur 33 wärenalert((l=localStorage).a=~~l.a+1)
a=localStorage;alert(a.b=~~a.b+1)
wenn Ihr sieht schöner aus: DPHP 31
37ZeichenSelbstmodifizierend. Es zählt unär. Achten Sie darauf, dass Ihr Texteditor nicht versucht, hilfreich zu sein, und fügen Sie nach dem 1. ein Zeilenumbruchzeichen ein. Es funktioniert nur (ordnungsgemäß) in PHP <5.3.2, da es beim Herunterfahren auf PHP angewiesen ist, offene Dateideskriptoren zu schließen. Oder ist es akzeptabel, Dateideskriptoren zu verlieren?
Originalversion (36 Zeichen), alle PHP-Versionen:
quelle
Python, 50
Es verwendet den gleichen Ansatz wie die Antwort von primo und stürzt in ähnlicher Weise beim 100. Durchgang ab.
quelle
J (58)
Sie müssen dies als Skript ausführen, es funktioniert offensichtlich nicht über die J-Befehlszeile.
In J steht der Tokenizer, den der Interpreter verwendet, als
;:
Funktion zur Verfügung. Wenn er alsox
J-Code;:x
enthält , enthält er die J-Token, dh:So:
echo m=.1
:m
auf 1 setzen und auf den Bildschirm schreibenk=.1{ARGV
: Speichern Sie das 2. Element inARGV
(den Skriptnamen) ink
.1!:2[k
: schreibe folgenden String in die Datei ink
:;:1!:1[k
:k
das aktuelle Skript lesen und tokenisieren(<":m+1)(<3)}
: Ersetzen Sie das 3. Token durch die Zeichenfolgendarstellung vonm + 1
;:^:_1
: Führen Sie den Tokenizer in umgekehrter Reihenfolge aus und erstellen Sie eine Zeichenfolgeexit
: verlasse den Interpreter (das macht er nicht von alleine, auch wenn du ein Skript ausführst)quelle
PHP,
3433 ZeichenDanke an Tim für das Update! Meine alte Lösung:
Das Problem ist, dass
$_SESSION[A]
es sich""
bei der ersten Iteration um eine leere Zeichenfolge handelt. Wenn Sie jedochsession_start()
1 zurückgeben, können Sie diese hinzufügen und zwei oder drei Fliegen auf einmal töten!Lösung mit korrekter Syntax (35 Zeichen):
quelle
Haskell - 36 Bytes
Fügt einfach
+1
das Ende der Quelldatei hinzu , von der angenommen wird, dass sie benannt ista.hs
. Die.hs
Erweiterung ist in ghc und ghci obligatorisch.quelle
TI-Basic, 9 Zeichen
quelle
Charge - 41
In Anbetracht des Anwendungsbeispiels würde ich wahrscheinlich nicht annehmen, dass diese Technik praktikabel ist. Sie benennt die .bat-Datei um, die das Skript enthält.
Speichern Sie dies in einer Datei namens
0.bat
- und rufen Sie mit0.bat 2>nul
.2>nul
leitet stderr nach nul um, was notwendig ist, da dieses Skript die Datei mit dem Skript umbenennt, wenn dies der Fall ist, kann cmd das Skript offensichtlich nicht mehr sehen (bevor es auf EOF trifft) und gibt den Fehler zurückThe batch file cannot be found.
Jeder nachfolgende Aufruf des Skripts muss natürlich sein
1.bat 2>nul ... 2.bat 2>nul ... 3.bat 2>nul ... etc ...
quelle
mIRC-Skript, 28/22 Bytes
In der Registerkarte "Aliase" kann "Alias" weggelassen werden, wodurch 22 Bytes entstehen.
quelle
Python,
4948 ZeichenIch erkannte, dass dies unter Windows nur 48 Zeichen sein wird
\r\n
. Ansonsten sollte es 49 sein.Eine billige Abzocke der Methode von @grc
quelle
C, 190 Zeichen. Funktioniert nur unter Win NT
quelle
C #, 142 Zeichen
quelle
Tcl, 63 oder 73 Bytes
Mit einigen Webservices sind es 73:
Änderung selbst ist 63:
quelle
C # -
201239234 ZeichenFunktioniert die ersten 255 Male und geht dann auf 0 über. Bei der ersten Ausführung wird nichts ausgegeben.
Speichern als Main.cs, kompilieren mit
Getestet mit gmcs 2.10.8.1 und Mono Runtime 2.10.8.1-5ubuntu2
quelle
Powershell, 47 Bytes
geht davon aus, dass das Skript benannt ist
a.ps1
Das Skript überschreibt sich das Ersetzen
0
in der ersten Zeile mit1
,2
,3
und so weiter.Sie könnten auch weitere 8 Byte speichern, indem Sie beide Instanzen von
a.ps1
mit ersetzen1
und das Skript als Datei namens speichern1
obwohl dies für mich ein wenig zu weit geht.Ersetzen Sie die zweite Zeile durch diese, wenn die Datei nicht als 'a.ps1' gespeichert ist.
0
in der ersten Zeile, um die Zählung zu initialisierenZeilenumbruch bietet die einfachste Möglichkeit, die Datei in zwei Teile zu teilen
dies nimmt die Datei 'a.ps1' und liest sie als Array von Zeilen ein, wir durchlaufen sie dann mit
[0..1]
und setzen sie auf die Variablen,$n
die als[int]
und$t
entsprechend umgewandelt werden, so dass die0
in der ersten Zeile wird$n
und der 'Code 'In der zweiten Zeile wird$t
Hierbei wurde die
,1,2
Array-Notation verwendet, um ein Array aus zwei Elementen zu erstellen, wobei eines die Zahl ist, die$n
vorab inkrementiert gespeichert und mit Hilfe impliziter Klammern auf stdout ausgegeben wird. Das zweite ist die zweite Textzeile aus der Datei und wird dann ebenfalls ausgegeben es in die Datei mit dem Namen "a.ps1"Da sowohl Eingabe als auch Ausgabe Arrays von Strings sind, ist nur eine minimale Formatierung erforderlich und fast alles wird vom Interpreter übernommen.
quelle
Zsh (keine Coreutils), 32 Bytes
(Beachten Sie den abschließenden Zeilenumbruch.) Verwendet die Länge des Skripts. Bei jedem Aufruf wird die letzte oben gezeigte Zeile
:
(identisch mittrue
) und eine neue Zeile an das Skript angehängt, daher die/2
.Probieren Sie es online!
quelle
Rust / Cargo-Skript, 283 Bytes
Einzeiler:
Speichern unter
w
und ausführen mitcargo-script
:Iteriere nicht zu schnell, sonst bleibt es hängen .
Teilweise ungolfed:
Wird nach 99999 brechen;
quelle
GNU sed, 13 + 1 (n Flag) = 14 Bytes
Run: sed -nf ss
Die Annahme ist, dass der Quellendateiname aufgerufen wird
s
. Nach dem Code, der in der Gesamtsumme der Bytes gezählt wurde, wird eine nachgestellte Zeile benötigt. Erläuterung:quelle