Niech n
będzie liczbą wykonań twojego programu. Jeśli n
jest potęgą 2, wydrukuj 2^x
gdzie n = 2^x
; w przeciwnym razie po prostu wypisz liczbę. Przykładowy przebieg:
[1st time] 2^0
[2nd time] 2^1
[3rd time] 3
[4th time] 2^2
[5th time] 5
i tak dalej. To konkurs popularności, więc wygrywa odpowiedź z największą popularnością.
popularity-contest
Jwosty
źródło
źródło
0
w pierwszym uruchomieniu?n = 2^x
? W przeciwnym razie po raz drugi wynik byłby2^4
, po raz czwarty2^16
i tak dalej.1
to potęga dwóch.2^0=1
x = 2^x
zamiastn = 2^x
Odpowiedzi:
Java - API Abuse
Istnieje wiele komputerów online, które mogą liczyć, więc po co przechowywać te liczby osobiście?
Całkowite nadużycie interfejsu API stosu w celu uzyskania limitu i pozostałego limitu, aby zobaczyć, ile razy został uruchomiony dzisiaj:
Oczywiście działa to tylko ze świeżym dziennym przydziałem dla twojego adresu IP i tylko do limitu. Jeśli chcesz wsparcie dla wyższych liczb, napisać wniosek [funkcje], aby podnieść
quota_max
sięMAX_INT
.źródło
JavaScript
alert((n=Math.log((l=localStorage).m=~~l.m+1)/Math.log(2))==(n|0)?"2^"+n:l.m)
Kolejne alerty są następujące:
źródło
C - pisanie do pliku wykonywalnego
Ten kod C aktualizuje ciąg
data
w pliku wykonywalnym, więc zasadniczo jest to kod samodmodyfikujący. Jeśli uruchomisz go 9 999 999 razy, otrzymasz ciekawe rzeczy.źródło
gcc test.c
,./a.out
2^0 Segmentation fault (core dumped)
Jawa
Poniższy kod modyfikuje własny plik klasy w celu zapisania nowej liczby uruchomień. Było to szczególnie zabawne, gdy nie miałeś pojęcia, jak wygląda kod bajtowy, ale po niezliczonych godzinach Googlingu i testowania w końcu działa! :)
Demo (użycie 7 jako wartości początkowej do celów demonstracyjnych):
Kod:
źródło
dg
Tutaj przedstawiam Ci przenośny kod! Na każdym biegu
#
dodaje się a na końcu, tworząc pasek postępu! Możesz także przenieść kod na inną maszynę i wznowić od miejsca, w którym byłeś.Po 18 razy:
źródło
Przykład Ruby oparty na Sinatrze
To rozwiązanie serwerowe przechowuje osobisty licznik dla każdego użytkownika w pliku cookie.
Wypróbuj na http://every-2-to-the-n-times.herokuapp.com/
źródło
perl
Oto krótki perl, aby to zrobić. Gdzie powinny być przechowywane dane? Oczywiście w samym pliku programu! =)
Pierwotnie użyłem magicznego uchwytu pliku DATA, ale czuję, że powyższe jest „czystsze”:
źródło
tell DATA
przed przeczytaniem, a następnie wrócić do tego miejsca.Grzmotnąć
Prosty skrypt powłoki do samodzielnej edycji.
źródło
Grzmotnąć
I jak dfernig „s rozwiązanie bash , ale chciałbym, aby umieścić kopalni, a także:
Myślę, że rozwiązanie można uznać za inne, ponieważ
„Pamięć” to rozmiar skryptu (początkowo 171 bajtów), który jest powiększany o 1 wraz z dodawaniem nowego wiersza przy każdym wykonaniu.
Potęgi 2 są rozpoznawane przez konwersję rozmiaru programu (minus 170, oczywiście) na binarne, a następnie zliczenie tych: jeśli jest dokładnie jeden, to n jest potęgą 2. Wykładnik to liczba zer w binarnych .
źródło
Rozwiązanie Java
Użycie interfejsu API preferencji Java do przechowywania kwoty uruchomienia; i wstępnie obliczył potęgę 2 dla porównania
źródło
JavaScript
Nie zdecydowałem się na oczywiste
log2
rozwiązanie, ale pracowałem z operatorami bitowymi, aby znaleźć pozycję pojedynczego bitu w binarnej reprezentacji potęgi 2 liczb.źródło
for
pętla jest od 1 do 130, z renderowaniem ...: /Rubin
Dobra, chyba spróbuję tego teraz. Sam szuka definicji
n
.(testowany w Ruby 1.9.3)
źródło
Fortran 77
Kod:
Wynik:
źródło
do
Jeden z „właściwych” sposobów na zrobienie tego (bez używania plików).
Możesz podać go
reset
w wierszu poleceń, aby ustawić go ponownie na zero. Możesz także przenieść lub skopiować plik wykonywalny. Przeniesienie pliku wykonywalnego resetuje go, a wiele kopii pliku wykonywalnego jest niezależnych.źródło
Musujące, 423 znaki (kolejny kod samodmodyfikujący). Zapisz go, a
count.spn
następnie uruchomspn count.spn
:źródło
Oto szybkie rozwiązanie Python 3, które używa pliku danych do przechowywania
n
ix
między uruchomieniami:Wydajność jego uruchomienia 16 razy:
źródło
Python 2
źródło
DO#
Wymaga to jednak zdefiniowania właściwości ustawień w projekcie Visual Studio:
źródło
C / POSIX
Ten program wykorzystuje liczbę twardych dowiązań do własnego pliku wykonywalnego jako licznik tego, jak często był wywoływany. Tworzy nowe twarde dowiązania w katalogu, z którego został uruchomiony (ponieważ w ten sposób gwarantuje to, że znajduje się w tym samym systemie plików), co wymaga uprawnień do zapisu. Pominąłem obsługę błędów.
Lepiej upewnij się, że nie masz ważnego pliku o takiej samej nazwie jak jeden z utworzonych twardych linków w tym katalogu, w przeciwnym razie zostanie on nadpisany. Jeśli na przykład plik wykonywalny nazywa
counter
, twarde linki zostaną nazwanecounter_1
,counter_2
etc.Przykład uruchomienia (pierwszy wiersz resetuje licznik, jeśli plik wykonywalny został już uruchomiony):
źródło
Fortran 95
Plik o nazwie „a” (bez rozszerzenia) śledzi przebieg programu.
źródło