Buenas tardes agentes de golf,
Su misión es en nombre del famoso gigante del entretenimiento Eviltronic Arts. Como parte de su nefasto plan de esclavitud y entretenimiento mundial, deben vender tantas copias de SimStation V como sea posible. Esto significa que el software debe dejar de funcionar misteriosamente, después de iniciarlo varias veces.
Su objetivo es escribir un programa que cuente la cantidad de veces que se ha ejecutado. El programa no debe hacer nada más que escribir el número entero en stdout. La primera vez que se ejecuta, debe devolver "1". El próximo "2" y así sucesivamente. El programa debe poder alcanzar al menos el número "14", pero no hay un límite superior requerido.
Sin embargo, su programa no debe escribir ningún archivo nuevo. Acceder a sí mismo, al registro o incluso a Internet está absolutamente bien. ¡Pero algunos de nuestros usuarios sospechan de nuevos archivos, y simplemente los sobrescribirán! ¡El nervio! ¡Derrotando las limitaciones del software que compraron legítimamente!
El programa no puede asumir un intérprete o shell estable; el programa aún debe funcionar si se reinicia todo el intérprete, más allá de la computadora.
Como debe ser lo más indetectable posible, el código fuente más corto ganará.
Buena suerte agentes. La industria del entretenimiento cuenta contigo.
Respuestas:
guión bash,
39,37,2118Corto y dulce, mi primera presentación en código golf :)
fuente
echo
conid
: D;
con nueva línea y elimine la nueva línea final. Incluso se verá mucho mejor :-)Python,
40,39, 38 caracteresAdemás, no existe dicho límite superior en el tiempo de ejecución:
Como puede ver, el tamaño del programa aumenta gradualmente, pero no hubo tal restricción en el problema original. Creo que el tamaño del programa presentado es todo lo que importa
fuente
a+
,a
debería funcionar bien.PHP 48 bytes
Un enfoque simple de auto modificación. Después de correr 99 veces, se bloqueará espectacularmente.
⋮
fuente
guión bash, 37
fuente
Rubí:
3121 caracteres(Esta es una reescritura de la solución Python de Abhijit . Si le gusta la idea base, vote su respuesta, como a mí).
Ejecución de muestra:
fuente
<<
puede guardar algunos caracteres: `abierto ($ 0* sh, 17
Usando un servicio web, un enfoque diferente al de las otras soluciones existentes hasta ahora. Límite: la memoria de mi máquina.
JavaScript, 40
Apenas cuenta como un programa, pero de todos modos es bastante largo. No funciona en Firefox en un archivo local. Límite: 2 ^ 31.
fuente
alert(localStorage.a=~~localStorage.a+1)
41 y técnicamente hablando el programa javascript sería sin las etiquetas de script que serían sólo el 33alert((l=localStorage).a=~~l.a+1)
a=localStorage;alert(a.b=~~a.b+1)
aunque la tuya se ve mejor: DPHP 31
37caracteresAuto modificante. Cuenta en unario. Tenga cuidado de que su editor de texto no intente ser útil e inserte un carácter de nueva línea después del 1. Solo funcionará (correctamente) en PHP <5.3.2 porque se basa en php para cerrar los descriptores de archivos abiertos al apagar. ¿O es aceptable filtrar descriptores de archivos?
Versión original (36 caracteres), todas las versiones de PHP:
fuente
Python, 50
Utiliza el mismo enfoque que la respuesta de primo y se bloquea de manera similar en la carrera número 100.
fuente
J (58)
Necesita ejecutar esto como un script, obviamente no funcionará desde la línea de comando J.
En J, el tokenizer que utiliza el intérprete está disponible como la
;:
función, por lo que six
contiene código J,;:x
contiene los tokens J, es decir:Asi que:
echo m=.1
: establecerm
en 1 y escribirlo en la pantallak=.1{ARGV
: almacena el segundo elemento enARGV
(el nombre del script) enk
.1!:2[k
: escriba la siguiente cadena en el archivo enk
:;:1!:1[k
: leerk
, el script actual y tokenizar(<":m+1)(<3)}
: reemplaza el tercer token por la representación de cadena dem + 1
;:^:_1
: ejecuta el tokenizer en reversa, produciendo una cadenaexit
: sale del intérprete (no lo hace solo, incluso si ejecuta un script)fuente
PHP,
3433 caracteres¡Gracias a Tim por la actualización! Mi vieja solución:
El problema es que
$_SESSION[A]
es""
- cadena vacía - en la primera iteración, pero comosession_start()
devuelve 1, puede agregarlo y matar dos o tres moscas de una sola vez.Solución con la sintaxis correcta (35 caracteres):
fuente
Haskell - 36 bytes
Simplemente agrega
+1
al final del archivo fuente, que se supone que tiene nombrea.hs
. La.hs
extensión es obligatoria tanto en ghc como en ghci.fuente
TI-Basic, 9 caracteres
fuente
Lote - 41
Dado el caso de uso del ejemplo, probablemente no asumiría que esta técnica es viable. Cambia el nombre del archivo .bat que contiene el script.
Guarde esto en un archivo llamado
0.bat
- y llame usando0.bat 2>nul
.2>nul
redirige stderr a nul, lo cual es necesario porque esta secuencia de comandos cambiará el nombre del archivo que contiene la secuencia de comandos, una vez que lo hace, obviamente cmd ya no puede ver la secuencia de comandos (antes de que llegue a EOF) y devolverá el errorThe batch file cannot be found.
Por supuesto, cada llamada consecutiva del guión tendrá que ser
1.bat 2>nul ... 2.bat 2>nul ... 3.bat 2>nul ... etc ...
fuente
script mIRC, 28/22 bytes
Si se coloca en la pestaña "alias", se puede omitir "alias" haciendo 22 bytes.
fuente
Python,
4948 caracteresMe di cuenta de que esto solo serán 48 caracteres en Windows debido a
\r\n
. De lo contrario, debería ser 49.Una estafa barata del método por @grc
fuente
C, 190 personajes. Funciona solo en Win NT
fuente
C #, 142 caracteres
fuente
Tcl, 63 o 73 bytes
Con algún servicio web es 73:
modificarse es 63:
fuente
C # -
201239234 caracteresFunciona las primeras 255 veces, luego se ajusta a 0. No generará nada en la primera ejecución.
Guardar como Main.cs, compilar con
Probado con gmcs 2.10.8.1 y Mono runtime 2.10.8.1-5ubuntu2
fuente
Powershell, 47 bytes
asume que el script se llama
a.ps1
El guión se sobreponen a la sustitución de la misma
0
en la primera línea con1
,2
,3
y así sucesivamente.También podría ahorrar otros 8 bytes por replaceing ambas instancias de
a.ps1
con1
y guardar el script como un archivo con el nombre1
aunque esto es un poco lejos para mí.Reemplace la segunda línea con esto si el archivo no se guarda como 'a.ps1'.
0
en primera línea para inicializar el recuentoLinebreak proporciona la forma más fácil de dividir el archivo en dos
esto toma el archivo 'a.ps1' y lo lee como una matriz de líneas, luego iteramos a través de él
[0..1]
y lo configuramos en las variables$n
que se convierten como[int]
y$t
respectivamente, de modo que se0
convierte en la primera línea$n
y el 'código 'en la segunda línea se convierte$t
Esto usó la
,1,2
notación de matriz, para crear una matriz de dos elementos, uno es el número almacenado en$n
pre-incrementado y enviado a stdout mediante el uso de corchetes implícitos, el segundo es la segunda línea de texto del archivo, y luego también sale al archivo llamado 'a.ps1'Como tanto la entrada como la salida son conjuntos de cadenas, se requiere un formato mínimo y el intérprete asume casi todo.
fuente
Zsh (sin coreutils), 32 bytes
(Tenga en cuenta la nueva línea final) Utiliza la longitud de la secuencia de comandos. En cada invocación, la última línea que se muestra arriba agregará
:
(idéntica atrue
) y una nueva línea al script, de ahí el/2
.Pruébalo en línea!
fuente
Rust / cargo-script, 283 bytes
Un trazador de líneas:
Guardar como
w
y ejecutar concargo-script
:No iteres demasiado rápido o se atascará .
Parcialmente no golfista:
Se romperá después de 99999;
fuente
GNU sed, 13 + 1 (n flag) = 14 bytes
Ejecute: sed -nf ss
La suposición es que se llama al nombre del archivo fuente
s
. Se necesita una nueva línea final después del código, que se contó en el total de bytes. Explicación:fuente