Vim es un excelente editor de texto para sistemas Unix, pero es conocido por ser difícil de salir.
Escriba un programa completo que :q
salga para salir de Vim. Luego, debe leer una sola línea de entrada, ya que se le dará un mensaje bash, en cuyo caso la salida fue exitosa o un error, en cuyo caso hay cambios sin guardar.
El indicador de bash será este:
E37@vimmachine: /var/override)
Si bien el error será este:
E37: No write since last change (add ! to override)
Al recibir el indicador bash, el trabajo del programa está terminado y no debería dar más resultados (excepto los espacios en blanco).
Al recibir el error, su programa debe emitir aleatoriamente (es decir, cada posibilidad tiene una probabilidad distinta de cero de ser elegido) :q!
, salir sin guardar, o :x
, guardar y salir.
Este es el código de golf, por lo que gana menos bytes en cada idioma .
:x
era una cosa! Siempre he usado:wq
:)E37: No write since last change
? Es decir, ¿cómo puede un algoritmo distinguir un mensaje de un mensaje de error?E37@vimmachine: /var/override)
:x
para salir de vim. Algún día accidentalmente presionarás:X
teclas aleatorias cuando estés confundido. Después de que finalmente:wq
nunca volverás a ver tu archivo.Respuestas:
Python 2 , 66 bytes
¡Ahorré 3 bytes gracias a @ Mr.Xcoder y 4 gracias a @Mayube!
Pruébalo en línea!
fuente
print
lugar deprint()
. Y puede tomar la entrada con citasprint':q'
completo y cambiarinput()
ainput(':q')
Ruby , 35 bytes
Pruébalo en línea!
fuente
p
y:q
;)05AB1E , 19 bytes
Pruébalo en línea!
fuente
Python 2 ,
76757269 bytesEsta respuesta ha sido superada .
-1 byte gracias a Rod. -3 bytes gracias a Mayube. -3 bytes gracias a Artyer.
Pruébalo en línea!
fuente
it should not give any more output
@Mayube May we output a newline upon terminating?
@Adám sure, that's fine
random()>.5
guardar un byterandom()>0
, porque hay una muy pequeña posibilidad de querandom()
regrese0
.[0, 1)
significa, ¿verdad? Significa que se incluye cero porque el rango es cero inclusivo. stackoverflow.com/a/4396303/2415524 ... La forma fácil de recordarlo es que en una línea numérica, se incluyen puntos cerrados y puntos abiertos no. Los soportes parecen cerrados, y los parens parecen abiertos.Vimscript,
4541 bytesAfeitó 4 bytes usando
getpid()
para obtener un número. (¿Alguien puede pensar en una forma más corta de obtener un número que no sea el mismo en todas partes, todo el tiempo?)Suponiendo +3 bytes para invocar a Vim con
-c
para ejecutar el script anterior y-
leer la entrada de stdin:fuente
JavaScript,
5246 bytesGuardado 6 bytes gracias a @ETHProductions
fuente
!
después de:q
si la entrada es un error?prompt(':q')[30]&&...
. Además,new Date%2?':x':':q!'
C # (.NET Core) ,
140 139138 bytesPruébalo en línea!
fuente
System
espacio de nombres le hace capaz de acortarSystem.Random
aRandom
, el ahorro de 1 byteq!
no:q!
.Next(2)>0
a.Next()>9
, deja un poco mal sabor en la boca pero sigue siendo legal.using static System.Console
te permite abandonar todas lasC.
llamadas y te ahorra un byte> <> ,
323029 bytes!o
.Pruébalo en línea!
Explicación (antigua)
(se actualizará pronto)
fuente
[
: loiii0[
dejará con una pila vacía; bueno de todos modos, me gusta cómo pueblas todas tus salidas posibles al principio para evitar citas adicionalesEn realidad , 27 bytes
Pruébalo en línea! (Nota: como TIO no funciona bien con stdin, he reemplazado el
,
(leer de stdin) con la cadena literal, que puede cambiar para probarlo. Además, deberá deshabilitar la caché de salida para obtener una respuesta diferente con la salida aleatoria)Explicación:
fuente
APL (Dyalog) , 27 bytes
Pruébalo en línea!
':q'
imprime esto⋄
luego?2
entero aleatorio entre los dos primeros⊃⍨
use eso para seleccionar':q!' ':x'
esta lista de dos cadenas(
…)/
Replica eso con, es decir, haz n copias de cada elemento en ese, donde n es'!'∊⍞
¿Es el signo de exclamación un miembro de la entrada de texto? (Booleano, es decir, 0 o 1)fuente
Lote, 98 bytes
fuente
Ruby , 33 bytes (código 32, +1 para el indicador -n)
No estoy muy seguro sobre el
$$%2
fragmento. Lo estoy usando para generar un bit aleatorio para indexar mi matriz tomando el módulo pid 2 del proceso de ruby actual, y será bastante impredecible..sample
agrega un byte extra.Pruébalo en línea!
fuente
JavaScript,
767150 bytesAhorré un montón de bytes gracias a Artyer y Neil, así como condensé mis ternaries y moví la primera alerta a prompt (duh).
fuente
prompt()
directamente? (Además, ¿está permitidoprompt(":q")
?)new Date%2
lugar deMath.random()>.5
), y puede usar el aviso directamente como @Neil dijo:prompt()[3]<
.indexOf
al respecto, antes de notar la otra forma de hacerlo. Olvidé volver, gracias!Python 2 , 64 bytes
Pruébalo en línea!
Puesto que esto es sólo una aglomeración de ambas de estas respuestas Python, he marcado esto como wiki de la comunidad.
fuente
Python 2 , 47 bytes
Pruébalo en línea
Explicación:
La fuente de aleatoriedad es
id(0)%3<2
. La funciónid
devuelve la ubicación de la memoria del parámetro. Pasar cualquier cosa dará una dirección de memoria no determinista. El resultado siempre será uniforme, pero a veces solo será divisible por 3. Los resultados del módulo 3 varían. Entonces, esto puede ser una fuente de aleatoriedad. Usar<2
significa que aproximadamente 2/3 de las veces, el booleano resultante esTrue
.El resto de la respuesta está inspirada en esta .
fuente
Barril ,
1412 bytesEsto empuja un número aleatorio y sale correspondientemente al número aleatorio.
fuente
TCL, 95 bytes
Una solución simple y bastante larga en tcl ...
fuente
Asamblea 86Bytes Linux System Calls
fuente
LOGOTIPO,
3736 bytesPruébelo en línea en el corrector de rendimiento Anarchy Golf .
Explicación:
(porque
E37@vimmachine: /var/override)
tiene 2 palabras, mientras queE37: No write since last change (add ! to override)
tiene 10 palabras)fuente
Perl 5 (con bandera -E), 35 bytes
Ejecute esto con
perl -E 'say":q";<>=~l&&say qw(:q! :x)[$$%2]'
.Pruébalo en línea!
Sin golf:
fuente