Vim est un excellent éditeur de texte pour les systèmes Unix, mais il est notoire d’être difficile à quitter.
Ecrivez un programme complet qui sortira :q
pour sortir de Vim. Il doit alors lire une seule ligne d’entrée, puisqu’il recevra une invite bash, auquel cas la sortie a réussi, ou une erreur, auquel cas il ya des modifications non enregistrées.
L'invite de bash sera la suivante:
E37@vimmachine: /var/override)
Alors que l'erreur sera la suivante:
E37: No write since last change (add ! to override)
Après avoir reçu l'invite bash, le travail du programme est terminé et il ne devrait plus donner de sortie (sauf pour les espaces).
Dès que l'erreur est signalée, votre programme doit générer de manière aléatoire (c'est-à-dire que chaque possibilité a une probabilité non nulle d'être choisie) la :q!
sortie sans enregistrer ou la :x
sauvegarde et la sortie.
C'est du code-golf, donc le moins d'octets dans chaque langue gagne!
:x
c'était une chose! J'ai toujours utilisé:wq
:)E37: No write since last change
? Comment un algorithme peut-il distinguer une invite d’un message d’erreur?E37@vimmachine: /var/override)
:x
pour quitter vim. Un jour, vous frapperez accidentellement:X
puis des touches aléatoires lorsque vous serez confus. Une fois que:wq
vous aurez enfin vu votre dossier,Réponses:
Python 2 , 66 octets
Sauvegardé 3 octets grâce à @ Mr.Xcoder et 4 grâce à @Mayube!
Essayez-le en ligne!
la source
print
place deprint()
. Et vous pouvez prendre l'entrée avec des guillemetsprint':q'
complètement et changerinput()
àinput(':q')
Ruby , 35 octets
Essayez-le en ligne!
la source
p
et:q
;)05AB1E , 19 octets
Essayez-le en ligne!
la source
Python 2 ,
76757269 octetsCette réponse a été dépassée .
-1 octet grâce à Rod. -3 octets grâce à Mayube. -3 octets grâce à Artyer.
Essayez-le en ligne!
la source
it should not give any more output
@Mayube May we output a newline upon terminating?
@Adám sure, that's fine
random()>.5
sauver un octetrandom()>0
, car il y a très peu de chances querandom()
cela revienne0
.[0, 1)
signifie, non? Cela signifie que zéro est inclus car la plage est zéro-inclus. stackoverflow.com/a/4396303/2415524 ... Le moyen le plus simple de s'en souvenir est que, sur une droite numérique, les points fermés sont inclus et les points ouverts ne le sont pas. Les crochets semblent fermés et les parens semblent ouverts.Vimscript,
4541 octetsRasé 4 octets en utilisant
getpid()
pour obtenir un numéro. (Quelqu'un peut-il penser à un moyen plus rapide d'obtenir un nombre qui ne sera pas identique partout, tout le temps?)En supposant +3 octets pour appeler Vim avec
-c
pour exécuter le script ci-dessus et-
pour lire les entrées de stdin:la source
JavaScript,
5246 octetsEnregistrement de 6 octets grâce à @ETHProductions
la source
!
après:q
si l'entrée est une erreur?prompt(':q')[30]&&...
. Aussi,new Date%2?':x':':q!'
C # (.NET Core) ,
140 139138 octetsEssayez-le en ligne!
la source
System
espace vous fait en mesure de raccourcirSystem.Random
àRandom
, sauver 1 octetq!
ne sort pas:q!
.Next(2)>0
à.Next()>9
, cela laisse un peu un mauvais goût dans la bouche mais c'est toujours légal.using static System.Console
vous laisse tomber tous lesC.
appels, et vous enregistre un octet> <> ,
323029 octets!o
.Essayez-le en ligne!
Explication (ancien)
(sera mis à jour bientôt)
la source
[
:iii0[
vous laisser avec une pile vide; sympa quand même, j'aime la façon dont vous renseignez toutes vos sorties possibles au début pour éviter des citations supplémentairesEn fait , 27 octets
Essayez-le en ligne! (Remarque: TIO ne jouant pas bien avec stdin, j'ai remplacé le
,
(lu à partir de stdin) par la chaîne littérale, que vous pouvez modifier pour le tester. En outre, vous devez désactiver le cache de sortie pour obtenir une réponse différente avec la sortie aléatoire.)Explication:
la source
APL (Dyalog) , 27 octets
Essayez-le en ligne!
':q'
imprimer ceci⋄
puis?2
entier aléatoire parmi les deux premiers⊃⍨
utilisez-le pour sélectionner':q!' ':x'
cette liste de deux chaînes(
…)/
Reproduire cela avec, c.-à-d. Faire n copies de chaque élément dans celui-ci, où n est'!'∊⍞
le point d'exclamation est-il un membre de la saisie de texte? (Booléen, c'est-à-dire 0 ou 1)la source
Lot, 98 octets
la source
Ruby , 33 octets (32 codes, +1 pour l'indicateur -n)
Je ne suis pas trop sûr de l'
$$%2
extrait. Je l'utilise pour générer un bit aléatoire afin d'indexer mon tableau en prenant le pid modulo 2 du processus Ruby actuel, et ce sera assez imprévisible..sample
ajoute un octet supplémentaire.Essayez-le en ligne!
la source
JavaScript,
767150 octetsSauvegardé un tas d'octets grâce à Artyer et Neil, ainsi que la condensation de mes ternaires et le déplacement de la première alerte sur prompt (duh).
la source
prompt()
directement? (De plus, êtes-vous autoriséprompt(":q")
?)new Date%2
au lieu deMath.random()>.5
), et vous pouvez utiliser l'invite directement comme @Neil a dit:prompt()[3]<
.indexOf
avant de remarquer l'autre façon de le faire. Oublié de revenir, merci!Python 2 , 64 octets
Essayez-le en ligne!
Étant donné que cela est juste une agglomération de deux de ces réponses Python, j'ai marqué ce que la communauté wiki.
la source
Python 2 , 47 octets
Essayez-le en ligne
Explication:
La source du hasard est
id(0)%3<2
. La fonctionid
renvoie l'emplacement de la mémoire du paramètre. Passer n'importe quoi donnera une adresse mémoire non déterministe. Le résultat sera toujours pair, mais il ne sera parfois divisible que par 3. Les résultats modulo 3 varient. Donc, cela peut être une source de hasard. Utiliser<2
signifie qu'environ 2/3 du temps, le booléen résultant estTrue
.Le reste de la réponse est inspiré par celui-ci .
la source
Keg ,
1412 octetsCeci pousse un nombre aléatoire et sort en correspondance avec le nombre aléatoire.
la source
TCL, 95 octets
Une solution simple et assez longue en tcl ...
la source
Appels système Linux de 86Bytes Assembly
la source
LOGO,
3736 octetsEssayez-le en ligne à Anarchy Golf Performance Checker .
Explication:
(parce qu'il
E37@vimmachine: /var/override)
a 2 mots, alors qu'ilE37: No write since last change (add ! to override)
a 10 mots)la source
Perl 5 (avec l'indicateur -E), 35 octets
Exécutez ceci avec
perl -E 'say":q";<>=~l&&say qw(:q! :x)[$$%2]'
.Essayez-le en ligne!
Ungolfed:
la source