Geben Sie an n
, wie oft Ihr Programm ausgeführt wurde. Wenn n
eine Potenz von 2 ist, drucken Sie 2^x
wo n = 2^x
; Andernfalls geben Sie einfach die Nummer aus. Beispiellauf:
[1st time] 2^0
[2nd time] 2^1
[3rd time] 3
[4th time] 2^2
[5th time] 5
und so weiter. Dies ist ein Beliebtheitswettbewerb, daher gewinnt die Antwort mit den meisten positiven Stimmen.
popularity-contest
Jwosty
quelle
quelle
0
im ersten Durchgang ausgegeben ?n = 2^x
? Andernfalls wäre die Ausgabe das zweite Mal2^4
, das vierte Mal2^16
und so weiter.1
ist eine Zweierpotenz.2^0=1
x = 2^x
eher alsn = 2^x
Antworten:
Java - API Missbrauch
Es gibt viele Computer online, die zählen können. Warum also die Zählung selbst speichern?
Vollständiger Missbrauch der Stack-API, um das Kontingent zu erhalten, und das verbleibende Kontingent, um zu sehen, wie oft sie heute ausgeführt wurde:
Offensichtlich funktioniert dies nur mit einem neuen Tageskontingent für Ihre IP und nur bis zum Kontingent. Wenn Sie Unterstützung für höhere Zahlen möchten, senden Sie uns eine [Feature-Anfrage] heben
quota_max
zuMAX_INT
.quelle
JavaScript
alert((n=Math.log((l=localStorage).m=~~l.m+1)/Math.log(2))==(n|0)?"2^"+n:l.m)
Aufeinanderfolgende Warnungen lauten wie folgt:
quelle
C - Schreiben in die ausführbare Datei
Dieser C-Code aktualisiert die Zeichenfolge
data
in der ausführbaren Datei, sodass es sich im Wesentlichen um selbstmodifizierenden Code handelt. Wenn Sie es über 9.999.999 Mal ausführen, erhalten Sie interessante Dinge.quelle
gcc test.c
,./a.out
2^0 Segmentation fault (core dumped)
Java
Der folgende Code ändert die eigene Klassendatei, um die neue Laufanzahl zu speichern. Das hat besonders Spaß gemacht, als Sie keine Ahnung hatten, wie der Bytecode aussieht, aber nach unzähligen Stunden Googeln und Testen funktioniert es endlich! :) :)
Demo (mit 7 als Startwert für Demozwecke):
Code:
quelle
dg
Hier präsentiere ich Ihnen einen tragbaren Code! Bei jedem Lauf
#
wird am Ende ein hinzugefügt, wodurch ein Fortschrittsbalken erstellt wird! Sie können den Code auch auf einen anderen Computer verschieben und von Ihrem Standort aus fortfahren.Nach 18 mal:
quelle
Sinatra-basiertes Ruby-Beispiel
Diese serverbasierte Lösung speichert einen persönlichen Zähler für jeden Benutzer in einem Cookie.
Probieren Sie es unter http://every-2-to-the-n-times.herokuapp.com/ aus.
quelle
Perl
Hier ist ein bisschen Perl, um es zu tun. Wo sollen die Daten gespeichert werden? Warum in der Programmdatei selbst natürlich! =)
Ursprünglich hatte ich das magische DATA-Dateihandle so verwendet, aber ich denke, das oben genannte ist "reiner":
quelle
tell DATA
bevor Sie daraus lesen, und dann zu dieser Stelle zurückkehren.Bash
Einfaches selbstbearbeitendes Shell-Skript.
quelle
Bash
Ich mag die Bash-Lösung von dfernig , aber ich möchte auch meine posten:
Ich denke, die Lösung kann als anders angesehen werden, weil
Der "Speicher" ist die Skriptgröße (anfänglich 171 Byte), die bei jeder Ausführung mit dem Anhängen einer neuen Zeile um 1 erhöht wird.
Potenzen von 2 werden erkannt, indem die Programmgröße (natürlich minus 170) in Binär konvertiert und dann die Einsen gezählt werden: Wenn es genau eine Eins gibt, ist n eine Potenz von 2. Der Exponent ist die Anzahl der Nullen in Binär .
quelle
Java-Lösung
Verwenden Sie die Java-Einstellungs-API, um den Ausführungsbetrag zu speichern. und berechnete die Potenzen von 2 vor, damit eine Hashmap verglichen werden kann
quelle
Javascript
Ich habe mich dafür entschieden, nicht die offensichtliche
log2
Lösung zu verwenden, sondern mit bitweisen Operatoren zu arbeiten, um die Einzelbitposition in der binären Darstellung der Potenz von 2 Zahlen zu finden.quelle
for
Schleife von 1 bis 130 mit dem Rendering ...: /Rubin
Okay, ich denke ich werde es jetzt versuchen. Es sucht sich nach der Definition von
n
.(getestet in Ruby 1.9.3)
quelle
Fortran 77
Code:
Ergebnis:
quelle
C.
Eine der "richtigen" Möglichkeiten, dies zu tun (dh ohne Verwendung von Dateien).
Sie können es
reset
in der Befehlszeile eingeben, um es wieder auf Null zu setzen. Sie können die ausführbare Datei auch verschieben oder kopieren. Durch Verschieben der ausführbaren Datei wird sie zurückgesetzt, und mehrere Kopien der ausführbaren Datei sind unabhängig voneinander.quelle
Funkelnd, 423 Zeichen (ein weiterer selbstmodifizierender Code). Speichern Sie es als
count.spn
dann ausführenspn count.spn
:quelle
Hier ist eine schnelle Python 3-Lösung, die zum Speichern
n
undx
zwischen Läufen eine Datendatei verwendet :Die Ausgabe von 16-mal ausführen:
quelle
Python 2
quelle
C #
Dies erfordert jedoch, dass Sie eine Einstellungseigenschaft in Ihrem Visual Studio-Projekt definieren:
quelle
C / POSIX
Dieses Programm verwendet die Anzahl der festen Links zu seiner eigenen ausführbaren Datei als Zähler dafür, wie oft es aufgerufen wurde. Es erstellt die neuen Hardlinks in dem Verzeichnis, aus dem es gestartet wurde (da es sich auf diese Weise garantiert im selben Dateisystem befindet), für das daher eine Schreibberechtigung erforderlich ist. Ich habe die Fehlerbehandlung weggelassen.
Stellen Sie besser sicher, dass Sie keine wichtige Datei mit demselben Namen wie einer der erstellten Hardlinks in diesem Verzeichnis haben, da diese sonst überschrieben wird. Wenn beispielsweise die ausführbare Datei benannt ist
counter
, werden die Hardlinks genannt werdencounter_1
,counter_2
usw.Beispiellauf (die erste Zeile setzt den Zähler zurück, falls die ausführbare Datei bereits ausgeführt wurde):
quelle
Fortran 95
Eine Datei mit dem Namen "a" (ohne Erweiterung) verfolgt den Programmablauf.
quelle