Dobry wieczór agentów golfowych,
Twoim zadaniem jest w imieniu znanego giganta rozrywki Eviltronic Arts. W ramach nikczemnego planu zniewolenia świata i rozrywki muszą sprzedać jak najwięcej kopii SimStation V. Oznacza to, że oprogramowanie musi tajemniczo przestać działać po kilkukrotnym uruchomieniu.
Twoim celem jest napisanie programu, który zlicza liczbę uruchomień. Program nie może robić nic innego niż zapisywać liczbę całkowitą na standardowe wyjście. Przy pierwszym uruchomieniu powinien zwrócić „1”. Następne „2” i tak dalej. Program musi być w stanie osiągnąć co najmniej liczbę „14”, ale nie jest wymagany górny limit.
Twój program nie może jednak zapisywać żadnych nowych plików. Dostęp do samego siebie, rejestru, a nawet Internetu jest absolutnie OK. Ale niektórzy z naszych użytkowników są podejrzliwi wobec nowych plików i po prostu je zastąpią! Nerw! Pokonując ograniczenia oprogramowania, które legalnie kupili!
Program nie może założyć stabilnego interpretera lub powłoki - program musi nadal działać, jeśli cały komputer tłumacza zostanie zrestartowany między uruchomieniami.
Ponieważ musi być możliwie niewykrywalny, wygra najkrótszy kod źródłowy.
Powodzenia agenci. Branża rozrywkowa na ciebie liczy.
Odpowiedzi:
skrypt bash,
39,37,2118Krótkie i słodkie, moje pierwsze zgłoszenie w kodzie golfowym :)
źródło
echo
zid
: D;
znak nowej linii i usuń znak nowej linii. Będzie nawet ładniej wyglądać :-)Python,
40,39, 38 znakówPonadto nie ma takiego górnego limitu czasu wykonywania:
Jak widać, rozmiar programu stopniowo rośnie, ale nie było takiego ograniczenia w pierwotnym problemie. Uważam, że liczy się rozmiar przesłanego programu
źródło
a+
,a
powinno działać dobrze.PHP 48 bajtów
Proste podejście do samodzielnej modyfikacji. Po uruchomieniu 99 razy, spektakularnie się zawiesi.
⋮
źródło
skrypt bash, 37
źródło
Rubin:
3121 znaków(Jest to przepisać Abhijit „s rozwiązanie Python . Jeśli podoba Ci się pomysł bazowej upvote jego odpowiedź, tak jak ja).
Przykładowy przebieg:
źródło
<<
możesz zapisać niektóre znaki: `open (0 $* sh, 17 lat
Korzystanie z usługi sieci Web - inne podejście niż inne dotychczasowe rozwiązania. Limit: pamięć mojej maszyny.
JavaScript, 40
Nie liczy się jako program, ale i tak jest dość długi. Nie działa w przeglądarce Firefox w pliku lokalnym. Limit: 2 ^ 31.
źródło
alert(localStorage.a=~~localStorage.a+1)
41 i technicznie rzecz biorąc, program javascript byłby bez tagów skryptowych, które byłyby tylko 33alert((l=localStorage).a=~~l.a+1)
a=localStorage;alert(a.b=~~a.b+1)
chociaż twoje wygląda ładniej: DPHP 31
37znakówWłasna modyfikacja. Liczy się w jednym. Uważaj, aby twój edytor tekstu nie próbował być pomocny i wstawił znak nowej linii po 1. Będzie działał (poprawnie) w PHP <5.3.2, ponieważ polega na php do zamykania otwartych deskryptorów plików podczas zamykania. Czy też dopuszczalne jest przeciekanie deskryptorów plików?
Wersja oryginalna (36 znaków), wszystkie wersje PHP:
źródło
Python, 50
Używa tego samego podejścia co odpowiedź primo i podobnie ulega awarii przy 100 biegu.
źródło
J (58)
Musisz uruchomić to jako skrypt, to oczywiście nie zadziała z linii poleceń J.
W J tokenizer, którego używa interpreter, jest dostępny jako
;:
funkcja, więc jeślix
zawiera kod J,;:x
zawiera tokeny J, tj .:Więc:
echo m=.1
: ustawm
na 1 i zapisz na ekraniek=.1{ARGV
: zapisz drugi element wARGV
(nazwie skryptu) wk
.1!:2[k
: wpisz następujący ciąg do pliku wk
:;:1!:1[k
: czytajk
, bieżący skrypt i tokenizuj(<":m+1)(<3)}
: zamień trzeci token na ciąg znaków reprezentującym + 1
;:^:_1
: uruchom tokenizer w odwrotnej kolejności, generując ciągexit
: zamknij interpreter (nie robi tego sam, nawet jeśli uruchomisz skrypt)źródło
PHP,
3433 znakówDzięki Tim za aktualizację! Moje stare rozwiązanie:
Problemem jest to, że
$_SESSION[A]
jest""
- pusty ciąg znaków - w pierwszej iteracji, ale jakosession_start()
zwraca 1, można go dodać i upiec dwie lub trzy muchy w jeden strzał!Rozwiązanie z poprawną składnią (35 znaków):
źródło
Haskell - 36 bajtów
Po prostu dodaje
+1
się na końcu pliku źródłowego, który zakłada się, że ma nazwęa.hs
..hs
Rozszerzenie jest obowiązkowe zarówno GHC i ghci.źródło
TI-Basic, 9 znaków
źródło
Partia - 41
Biorąc pod uwagę przykładowy przypadek użycia, prawdopodobnie nie założyłbym, że ta technika jest wykonalna - zmienia nazwę pliku .bat zawierającego skrypt -
Zapisz to w pliku o nazwie
0.bat
- i zadzwoń za pomocą0.bat 2>nul
.2>nul
przekierowuje stderr na nul, co jest konieczne, ponieważ ten skrypt zmieni nazwę pliku zawierającego skrypt, gdy to zrobi, cmd oczywiście nie będzie już widział skryptu (zanim osiągnie EOF) i zwróci błądThe batch file cannot be found.
Oczywiście każde kolejne wywołanie skryptu musi być
1.bat 2>nul ... 2.bat 2>nul ... 3.bat 2>nul ... etc ...
źródło
skrypt mIRC, 28/22 bajtów
Jeśli umieścisz w zakładce „aliasy”, „alias” można pominąć, tworząc 22 bajty.
źródło
Python,
4948 znakówUświadomiłem sobie, że będzie to tylko 48 znaków w systemie Windows z powodu
\r\n
. W przeciwnym razie powinno być 49.Tanie odrywanie metody przez @grc
źródło
C, 190 znaków. Działa tylko w Win NT
źródło
C #, 142 znaki
źródło
Tcl, 63 lub 73 bajty
W przypadku niektórych usług sieciowych jest to 73:
sama modyfikacja to 63:
źródło
C # -
201239234 znakówDziała przez pierwsze 255 razy, a następnie zawija do zera. Nie wypisze niczego przy pierwszym wykonaniu.
Zapisz jako Main.cs, skompiluj z
Testowane z Gcsunt 2.10.8.1 i Mono runtime 2.10.8.1-5ubuntu2
źródło
PowerShell, 47 bajtów
zakłada, że skrypt ma nazwę
a.ps1
Skrypt zastąpi Sama zastępując
0
na pierwszej linii z1
,2
,3
i tak dalej.może także zaoszczędzić kolejne 8 bajtów przez replaceing obie instancje
a.ps1
z1
i zapisywania skryptu jako plik o nazwie1
choć jest to trochę daleko dla mnie.Zastąp drugi wiersz tym, jeśli plik nie jest zapisany jako „a.ps1”.
0
w pierwszej linii, aby zainicjować zliczaniePodział wiersza zapewnia najłatwiejszy sposób podzielenia pliku na dwie części
to pobiera plik „a.ps1” i wczytuje go jako tablicę wierszy, następnie iterujemy go
[0..1]
i ustawiamy zmienne,$n
które są rzutowane odpowiednio[int]
i$t
odpowiednio, tak aby0
pierwszy wiersz stał$n
się kodem „ „w drugim wierszu pojawi się$t
Wykorzystano
,1,2
notację tablicową, aby utworzyć tablicę dwóch elementów, z których jeden jest liczbą zapisaną w$n
inkrementacji i wyprowadzany na standardowe wyjście za pomocą niejawnych nawiasów, drugi jest drugim wierszem tekstu z pliku, a następnie również danymi wyjściowymi do pliku o nazwie „a.ps1”ponieważ zarówno dane wejściowe, jak i wyjściowe są tablicami ciągów, wymagane jest minimalne formatowanie i interpreter przyjmuje prawie wszystko.
źródło
Zsh (bez coreutils), 32 bajty
(Zwróć uwagę na końcowy znak nowej linii). Używa długości skryptu. Przy każdym wywołaniu ostatnia linia pokazana powyżej zostanie dołączona
:
(identyczna ztrue
) i nowy wiersz w skrypcie, stąd/2
.Wypróbuj online!
źródło
Skrypt rdzy / ładunku, 283 bajty
Oneliner:
Zapisz jako
w
i uruchom zcargo-script
:Nie powtarzaj zbyt szybko, bo utknie .
Częściowo niestrzeżony:
Zepsuje się po 99999;
źródło
GNU sed, 13 + 1 (flaga n) = 14 bajtów
Uruchom: sed -nf ss
Zakłada się, że nazwa pliku źródłowego jest nazywana
s
. Końcowy znak nowej linii jest potrzebny po kodzie, który został policzony w bajtach ogółem. Wyjaśnienie:źródło