O Vim é um ótimo editor de texto para sistemas unix, mas é notório por ser difícil sair.
Escreva um programa completo que será exibido :q
para sair do Vim. Ele deve ler uma única linha de entrada, pois receberá um prompt do bash; nesse caso, a saída foi bem-sucedida ou um erro; nesse caso, há alterações não salvas.
O prompt do bash será este:
E37@vimmachine: /var/override)
Enquanto o erro será este:
E37: No write since last change (add ! to override)
Ao receber o prompt do bash, o trabalho do programa é concluído e não deve fornecer mais saída (exceto espaços em branco).
Após receber o erro, seu programa deve aleatoriamente (ou seja, cada possibilidade tem uma probabilidade diferente de zero de ser escolhido) sair :q!
, para sair sem salvar, ou :x
para salvar e sair.
Isso é código-golfe, e o menor número de bytes em cada idioma vence!
:x
era uma coisa! Eu sempre usei:wq
:)E37: No write since last change
? Ou seja, como um algoritmo pode distinguir um prompt de uma mensagem de erro?E37@vimmachine: /var/override)
:x
para sair do vim. Algum dia você acidentalmente pressionará:X
teclas aleatórias quando estiver confuso. Depois de finalmente,:wq
você nunca mais verá seu arquivo.Respostas:
Python 2 , 66 bytes
Economizou 3 bytes graças a @ Mr.Xcoder e 4 graças a @Mayube!
Experimente online!
fonte
print
vez deprint()
. E você pode tirar a entrada com citaçõesprint':q'
completamente e mudarinput()
para #input(':q')
Ruby , 35 bytes
Experimente online!
fonte
p
e:q
;)05AB1E , 19 bytes
Experimente online!
fonte
Python 2 ,
76757269 bytesEsta resposta está fora do campo de golfe .
-1 byte graças a Rod. -3 bytes graças ao Mayube. -3 bytes graças a Artyer.
Experimente online!
fonte
it should not give any more output
@Mayube May we output a newline upon terminating?
@Adám sure, that's fine
random()>.5
salvar um byterandom()>0
, porque há uma chance muito pequena querandom()
retornará0
.[0, 1)
significa, certo? Isso significa que zero é incluído porque o intervalo é inclusivo em zero. stackoverflow.com/a/4396303/2415524 ... A maneira mais fácil de lembrar é que em uma linha numérica, pontos fechados são incluídos e pontos abertos não. Os colchetes parecem fechados e os parênteses parecem abertos.Vimscript,
4541 bytesRaspou 4 bytes usando
getpid()
para obter um número. (Alguém pode pensar em uma maneira mais curta de obter um número que não será o mesmo em todos os lugares, o tempo todo?)Supondo +3 bytes para chamar o Vim
-c
para executar o script acima e-
ler a entrada de stdin:fonte
JavaScript,
5246 bytesGuardado 6 bytes graças a @ETHProductions
fonte
!
após o:q
se a entrada for um erro?prompt(':q')[30]&&...
. Além disso,new Date%2?':x':':q!'
C # (.NET Core) ,
140 139138 bytesExperimente online!
fonte
System
namespace torna capaz de encurtarSystem.Random
aRandom
, economizando 1 byteq!
não:q!
.Next(2)>0
para.Next()>9
, deixa um pouco ruim gosto na boca, mas ainda é legal.using static System.Console
permite que você soltar todasC.
as chamadas, e você economiza um byte> <> ,
323029 bytes!o
.Experimente online!
Explicação (antiga)
(será atualizado em breve)
fonte
[
:iii0[
você deixará uma pilha vazia; agradável de qualquer maneira, eu gosto de como você preencher todos os seus possíveis saídas no início para evitar citações adicionaisNa verdade , 27 bytes
Experimente online! (Nota: Como o TIO não funciona bem com o stdin, substituí o
,
(read from stdin) pela string literal, que você pode alterar para testá-lo. Além disso, será necessário desativar o cache de saída para obter uma resposta diferente com a saída aleatória.)Explicação:
fonte
APL (Dyalog) , 27 bytes
Experimente online!
':q'
imprima isto⋄
então?2
número inteiro aleatório entre os dois primeiros⊃⍨
use isso para selecionar':q!' ':x'
esta lista de duas cordas(
…)/
Replique isso com, ou seja, faça n cópias de cada elemento, onde n é'!'∊⍞
o ponto de exclamação é um membro da entrada de texto? (Booleano, ou seja, 0 ou 1)fonte
Lote, 98 bytes
fonte
Ruby , 33 bytes (código 32, +1 para sinalizador -n)
Não tenho muita certeza do
$$%2
trecho. Estou usando-o para gerar um bit aleatório para indexar minha matriz, usando o módulo pid 2 do processo ruby atual, e será bastante imprevisível..sample
adiciona um byte extra.Experimente online!
fonte
JavaScript,
767150 bytesEconomizei um monte de bytes graças a Artyer e Neil, além de condensar meus ternários e mover o primeiro alerta para solicitar (duh).
fonte
prompt()
diretamente? (Além disso, vocês estão autorizadosprompt(":q")
?)new Date%2
em vez deMath.random()>.5
), e você pode usar o prompt diretamente como @Neil disse:prompt()[3]<
.indexOf
isso antes de perceber a outra maneira de fazê-lo. Esqueceu de voltar, obrigado!Python 2 , 64 bytes
Experimente online!
Uma vez que este é apenas um aglomerado de ambos de essas respostas Python, eu marquei isso como uma comunidade wiki.
fonte
Python 2 , 47 bytes
Experimente online
Explicação:
A fonte da aleatoriedade é
id(0)%3<2
. A funçãoid
retorna a localização da memória do parâmetro. Passar qualquer coisa fornecerá um endereço de memória não determinístico. O resultado será sempre uniforme, mas às vezes será divisível por 3. Os resultados do módulo 3 variam. Portanto, isso pode ser uma fonte de aleatoriedade. Usar<2
significa que aproximadamente 2/3 das vezes, o booleano resultante éTrue
.O restante da resposta é inspirado por esta .
fonte
Barril ,
1412 bytesIsso envia um número aleatório e gera uma correspondência correspondente ao número aleatório.
fonte
TCL, 95 bytes
Uma solução simples e bastante longa em tcl ...
fonte
Chamadas de sistema do Assembly 86Bytes Linux
fonte
LOGO,
3736 bytesExperimente online no verificador Anarchy Golf Performance .
Explicação:
(porque
E37@vimmachine: /var/override)
tem 2 palavras, enquantoE37: No write since last change (add ! to override)
tem 10 palavras)fonte
Perl 5 (com sinalizador -E), 35 bytes
Execute isso com
perl -E 'say":q";<>=~l&&say qw(:q! :x)[$$%2]'
.Experimente online!
Ungolfed:
fonte