Su tarea es escribir un programa completo que continuará contando desde 10 cada vez que se ejecute.
- La primera vez que ejecute el programa, debería imprimirse
10
. - La próxima vez, debería salir
9
. - La próxima vez, debería salir
8
, y así sucesivamente. - En lugar de imprimir
0
, el programa debería bloquearse. No tiene que manejar el programa que se ejecuta más veces después de eso. - Se puede suponer que las instalaciones utilizadas para el almacenamiento están vacías antes de la primera ejecución del programa.
Aquí hay un ejemplo de implementación en Python 3:
try:f=open("a","r+");v=int(f.read())
except:f=open("a","w");v=10
1/v
print(v)
f.seek(0)
f.write(str(v-1))
Este es el código de golf , por lo que gana la respuesta más corta (medida en bytes).
Respuestas:
6502 lenguaje máquina + Apple] [+ ROM, 12 (11? 10? 9?) Bytes
Debería comenzar a las
$8000
. Se bloquea en el monitor del sistema cuando el recuento llega a 0.Debería comenzar a las
$B1
. Esto ahorra un byte ya que puedo usar la versión de cero páginas (dos bytes)DEC
, pero sobrescribe la rutina crítica de ApplesoftCHRGET
; necesitará cargarlo y llamarlo desde el monitor, y usar CTRL+ BReturnpara reiniciar BASIC una vez que haya terminado. No estoy seguro si esto lo invalida o no.Debería comenzar a las
$8000
. Esto no se inicializa$9E
, ahorrando dos bytes. Sin embargo, esto significa que no debe llamarlo con una dirección negativa (o, si lo llama desde el monitor, debe llamar al monitor con una dirección positiva). Si lo hace, de ApplesoftCALL
rutina almacenaráFF
en$9E
, haciendo que se añada al número 65280 al imprimirlo. Nuevamente, no estoy seguro si esto invalida la solución o no.Debería comenzar a las
$B1
. Esta es una combinación de los dos programas anteriores, ahorrando un total de tres bytes; tendrá que llamar al monitor con una dirección positiva, cargarlo y ejecutarlo desde allí, y usar Ctrl+ BReturnpara reiniciar BASIC una vez que haya terminado.Tenga en cuenta que estos programas solo modifican el programa en la memoria; volver a cargar el programa desde el disco restablecerá la cuenta regresiva. Esto funciona porque Apple] [(y] [+, // e y // c) no tienen ningún sistema de protección de memoria; el programa (y sus auto-modificaciones) permanecerán en la memoria incluso después de salir, por lo que puede seguir ejecutándolo desde la memoria hasta que sobrescriba esa memoria con algo más.
Ejecución de la muestra
Explicación
Explicación de la versión de 10 bytes.
Variantes
Imprime
ERR
y emite un pitido cuando el recuento llega a 0Normal - 15 bytes
Sobrescribe
CHRGET
- 14 bytesNo se inicializa
$9E
- 13 bytesSobrescribe
CHRGET
y no se inicializa$9E
- 12 bytesSe congela cuando el recuento llega a 0
Normal - 12 bytes
Sobrescribe
CHRGET
- 11 bytesNo se inicializa
$9E
- 10 bytesSobrescribe
CHRGET
y no se inicializa$9E
: 9 bytesfuente
Perl en Linux, 17 bytes
Pensé que podría ser interesante crear un programa que no mantenga ningún estado en sí mismo y que no modifique su propio código fuente; en otras palabras, en realidad comprueba con qué frecuencia se ha ejecutado preguntando al sistema operativo. La pregunta dice "Se puede suponer que todas las instalaciones utilizadas para el almacenamiento están vacías antes de la primera ejecución del programa", por lo que nos gustaría comenzar desde un sistema operativo completamente en blanco. Como tal, será mejor que te explique cómo lo haces, ya que de lo contrario probar el programa es difícil.
En realidad, hay dos formas de configurar para ejecutar el programa. De cualquier manera, el sistema operativo mínimo para este propósito no estaría ejecutando nada más que un shell (para permitirnos ejecutar Perl a su vez), y el shell más simple posible (para que no haga nada elegante que haga que el sistema operativo no sea blanco).
/bin/dash
es una buena opción aquí, ya que fue concebido como un shell mínimo para la recuperación del sistema. Entonces, necesitamos iniciar Linux de tal manera que no se ejecute nada más quedash
. Podemos hacer esto reiniciando la computadorainit=/bin/dash
en la línea de comandos de Linux para que no comience nada másdash
, o (mucho más convenientemente) creando un contenedor de Linux usandounshare -Urfp /bin/dash
un terminal (enunshare
realidad no crea un SO en blanco, pero simulauno; notablemente, el interior del contenedor piensa que es root,dash
piensa que es init, etc., tal como sucedería en un SO en blanco real). Descargo de responsabilidad: aún no he probado esto en metal desnudo, solo por dentrounshare
, pero debería funcionar en ambos sentidos en teoría.Finalmente, una vez que tenemos eso configurado, simplemente tenemos que mirar el PID; Como estamos en un sistema en blanco, el sistema init (aquí, el shell) tendrá PID 1, por lo que las ejecuciones de Perl tendrán PID de 2 a 12 inclusive. Entonces nuestro programa se ve así:
Aquí hay una muestra de ejecución:
fuente
unshare
no es compatible con ninguna de las banderas-Urfp
.unshare
es bastante nuevo (es una interfaz para una función del sistema operativo que también es bastante nueva) y los errores solo se solucionaron durante el último año más o menos. Si está utilizando una versión de 2 años y medio, no es sorprendente que tenga una funcionalidad muy limitada.Bash + sed,
414038 bytesPruébalo en línea!
fuente
sed: invalid option -- '/'
. sed (GNU sed) 4.2.2Javascript, 42 bytes
Pruébelo con este violín : asegúrese de borrar su almacenamiento local para restablecer la cuenta regresiva.
¡Gracias a steenbergh, Lmis y obarakon por muchos bytes!
fuente
y=localStorage;y.a=y.a||10;alert(y.a>0?y.a--:a)
puede ahorrarte un byte.sessionStorage
para probar con un reinicio más fácil (solo use una pestaña nueva) pero, por supuesto, +2 bytes.l=localStorage;l.l=-~l.l;alert(10-l.l||l)
para guardar un byte, eliminaría el míoconsole.log
aquí, pero preferiría eso tampocoa
evalúe cuando el valor en el almacenamiento local no es 0.C #,
197160159125 bytesGuardado 34 bytes gracias a la leche
Y una versión formateada (con
ReadKey
agregado para que pueda ver la salida):Es más largo de lo que pensaba, por lo que probablemente haya espacio para jugar al golf.
fuente
File.Exists
y enFile.Create
lugar deReadAllText
yWriteAllText
. Simplemente verifique si existe un nombre de archivo, no ambos con el contenido del archivo. Además,namespace System.IO
y puede eliminar el espacio de nombres deSystem.Console.Write
. 125 bytes:namespace System.IO{class P{static void Main(){var n=11;for(;File.Exists(""+--n););File.Create(""+n);Console.Write(n*n/n);}}}
Dyalog APL ,
332822/20? bytesNo estoy seguro de si esto es válido, ya que consiste en una función (que debe llamarse con un argumento ficticio). Sin embargo, todos los programas APL (puramente funcionales o no) tienen el mismo estado y, de hecho, algunas versiones APL no tienen programas tradicionales, solo funciones. En compensación, he agregado dos bytes para nombrarlo, aunque eso no es necesario para el efecto deseado.
Tenga en cuenta que esto se basa en una peculiaridad no oficial, que
∘←
asigna globalmente.6::
ante cualquier error de valor⊢c
volver c∘←10
que se establece globalmente en 10⋄
ahora÷÷c
devuelve el doble invertido (errores en cero) c∘←
que se establece globalmente enc-1
uno menos que cTryAPL en línea!
Versión ciertamente válida de 28 bytes:
Funciona estableciendo c en 11 si falta, luego restando 1 de c , invirtiendo dos veces (lo que da un error div-por-cero si c -1 es 0), asignando a c y generando el nuevo valor.
Versión antigua de 33 bytes:
Funciona redefiniéndose en cada ejecución, pero con una nueva línea final menos. Emite el número dos veces invertido de líneas restantes (menos dos), dando así un error de división por cero cuando solo quedan dos líneas (el encabezado y el código real).
fuente
Perl,
3736 bytesSe bloquea cuando el valor inicial alcanza -1 (que habría impreso 0), ya que escribe sobre el
=~
operador.Guardado un byte usando en
sysopen
lugar deopen
. Esto me permite imprimirSTDOUT
primero, utilizando el valor de retorno como modo de archivo (1
también conocido comoO_WRONLY
), antes de$~
reasignarlo.Uso de muestra
fuente
Perl 6 ,
6058 bytesNecesita carácter de nueva línea después
=finish
.die
puede ser reemplazado con1/0
.Explicación:
Obtiene una lista de líneas después de que
=finish
($=finish.lines
) resta eso10
, y si el resultado no es,0
lo imprime, de lo contrario esdie
s.Lo último que hace es abrirse en modo agregar y agregar otra línea al final.
fuente
say $*PERL.compiler.version
)Python 2, 65 bytes
Inspirado por la respuesta de L3viathan .
Se puede reducir a 60 bytes si puede elegir nombrar al archivo como un solo carácter
x
y luego reemplazarlo__file__
por'x'
. En ese caso, reemplace75
con70
.fuente
Jolf, 20 bytes
Pruébalo aquí! Errores cuando
0
se imprime. Modifica el código. Explicación por venir.fuente
Applesoft BASIC, 21 bytes (tokenizado)
Reemplazar
<CTRL-F>
y<CTRL-H>
con sus versiones literales. Tenga en cuenta que esto solo modifica el programa en la memoria; volver a cargarlo desde el disco restablecerá la cuenta regresiva.Ejecución de la muestra
Explicación
PRINT 9 + 1
hace lo que esperarías.CALL 2066
llama a la rutina de lenguaje de máquina 6502 en la ubicación de memoria 2066, que es posteriorEND :
.END
detiene el programa para que la rutina de lenguaje máquina (que, para el intérprete de Applesoft, sea basura) no se ejecute.La rutina de lenguaje de máquina simplemente disminuye el
9
inPRINT 9 + 1
. DesmontajeDespués de que el contador llega a 0, se "decrementa" a
/
; intentar ejecutar el programa provocará un error de sintaxis.fuente
*> <> ,
2018 bytesEsto realmente funciona en Linux (y lo que sea compatible con los archivos llamados
\n
, supongo). Crea un archivo nombrado\n
en la primera ejecución y las salidas10
. Se procede a generar un número menos en cada ejecución subsiguiente, excepto0
donde se bloquea en su lugar.Explicación
fuente
PHP 57 bytes
realmente no se bloquea, pero sale (sin contar atrás) cuando golpea
0
. ¿Es eso suficiente?Corre con
-r
.fuente
C #, 156 bytes
Jugué al golf la respuesta de @ TheLethalCoder por un momento, y pude guardar 3 bytes reordenando las declaraciones y eliminando int.parse (). Todavía hay margen de mejora, estoy seguro.
Sin golf:
Meta-pregunta: Puede ser complicado tomar el trabajo de TheLethalCoder como punto de partida para mi respuesta. ¿Sería mejor (una vez que tenga el representante) agregar esto como un comentario en su respuesta? No estoy tratando de competir con ellos, solo quiero mostrar mi golf, para edificación mutua.
fuente
Powershell V2.0, 49 bytes
(Primer código de golf, no pude encontrar las reglas sobre cómo calcular bytes. Utilicé una calculadora de Cadena a bytes en línea)
Corriendo:
fuente
Java, 343 bytes
Mi primer intento de golf
sin golf
fuente
java.io.*
y evitando el uso de nombres de constructor totalmente calificados, y puede cortar otros 8 utilizando el hecho de que "imprimir" automáticamente encriptará sus argumentos:import java.io.*;class M{public static void main(String[] a) throws Exception{if(!new File("x").exists()) try(PrintWriter p=new PrintWriter("x")){p.print(10);}int b=new java.util.Scanner(new File("x")).nextInt();try(PrintWriter p=new PrintWriter("x")){p.print(b/b*b-1);System.out.print(b);}}}
?
operador basado en la existencia del archivo cuando leeb
:import java.io.*;class M{public static void main(String[] a) throws Exception{int b=new File("x").exists()?new java.util.Scanner(new File("x")).nextInt():10;try(PrintWriter p=new PrintWriter("x")){p.print(b/b*b-1);System.out.print(b);}}}
import java.io.*;class A{public static void main(String[]a)throws Exception{File f=new File("f");int b=f.exists()?new FileInputStream(f).read()-48:10;new PrintWriter(f).printf("%d",b/b*b-1).close();System.out.print(b);}}
SQLite,
142137Esto probablemente podría hacerse mucho más inteligentemente.
141136 caracteres para el código:Más 1 para el nombre
x
de archivo ensqlite3 x '…'
.fuente
JavaScript, 74 bytes
x=typeof x!=typeof 1?10:x!=1?x-=1:_
l=localStorage;l.a=typeof l.a!=typeof""?10:l.a!=1?l.a=--l.a:_;alert(l.a)
fuente
alert
o similar, es solo un fragmento REPL.Ruby,
9487846159 bytesPor favor, deje sugerencias a continuación.
Gracias @ ConorO'Brien por las ideas (algunas desvergonzadamente arrancadas de su respuesta).
fuente
puts i
=>p i
new
y ensize
lugar deopen
ylength
.Ruby, 52 + 1 = 53 bytes
Asume que el archivo se llama
a
(+1 byte).Corriendo
fuente
a
(que es solo +1).Python 2, 89 bytes
fuente
__file__
así que hice uso de eso en mi respuesta.len
s
, porque necesito leer, luego buscar y luego escribir. Elprint x/x*x
quiere trabajar, pero no mejora la cuenta de bytes.TI-BASIC (TI-84 Plus) (15 bytes)
Ans debería ser igual a 0 (el valor predeterminado) antes de la primera ejecución.
Como
AnsAns/Ans
es la última línea del programa, se generará y almacenará en Ans a menos que Ans sea 0, en cuyo caso se produce un error de división por 0.fuente
JavaScript, 41
l=localStorage;l.l=-~l.l;alert(11-l.l||I)
fuente
a
lugar del
cuando lo escribí, y lo cambié sin pensar, porque pensé que se veía más divertido ... ha sido demasiado tarde y Herby Gracias por señalarlo.GNU Smalltalk,
70, 68 bytesCódigo de 66 bytes +2 bytes para el indicador "-S"
EDICIONES
Golfed
Prueba
Importante
Debe ejecutar gst como root, para que pueda modificar la imagen predeterminada o especificar su propia imagen con -I .
fuente
PHP, 45 bytes
Sinceramente, no estoy seguro si este cuenta.
Publicaría un enlace a un ejemplo, pero todos los probadores en línea que conozco no permiten
session_start()
su uso.Esto hará una cuenta regresiva cada vez que actualice la página hasta 0, cuando
die
se ejecuta el comando.fuente
QBIC , 70 bytes
Abre el archivo
a.b
(o lo crea cuando no se encuentra en la primera ejecución), lee el registro 1 ene
. Si no se encuentra ese registro, suponga 10, de lo contrario, sub 1. Ene==0
, generar un error. Escribir de nuevoe
aa.b
.El acceso a archivos no está integrado en QBIC, esto depende en gran medida del QBasic subyacente.
fuente
Lote, 72 bytes.
Debe invocarse utilizando el nombre de archivo completo, incluida la extensión. La última línea no debe tener una nueva línea final. Funciona escribiendo
-1
al final de la última línea para que se evalúe a 1 menos cada vez.goto g
errores porque no hay etiqueta:g
.fuente
R, 52 bytes
Esencialmente se usa
ls()
para enumerar los nombres de todos los objetos almacenados globalmente. Si suponemos que el entorno global está vacío y"x"
no existe, generex=10
, de lo contrario, six!=0
resta1
, llame a un argumento faltante que devuelve un error.fuente
!
y cambiando el orden de los argumentos then y else, y otros dos cambiandox>0
ax
. (Además,exists("x")
es un poco más ordenado que"x"%in%ls()
, aunque igual en el recuento de bytes)Lote de Windows, 61 bytes
fuente
JavaScript, 44 bytes
fuente