Vim ist ein großartiger Texteditor für Unix-Systeme, der jedoch bekanntermaßen schwer zu beenden ist.
Schreiben Sie ein vollständiges Programm, das ausgegeben wird :q
, um Vim zu beenden. Es sollte dann eine einzelne Eingabezeile lesen, da es dann entweder eine Bash-Eingabeaufforderung erhält, in welchem Fall der Exit erfolgreich war, oder einen Fehler, in welchem Fall ungespeicherte Änderungen vorliegen.
Die Bash-Eingabeaufforderung lautet:
E37@vimmachine: /var/override)
Während der Fehler wird dies sein:
E37: No write since last change (add ! to override)
Mit der Bash-Eingabeaufforderung ist die Arbeit des Programms abgeschlossen und es sollte keine Ausgabe mehr erfolgen (mit Ausnahme von Leerzeichen).
Nach Erhalt des Fehlers sollte Ihr Programm nach dem Zufallsprinzip (dh jede Möglichkeit hat eine Wahrscheinlichkeit ungleich Null, ausgewählt zu werden) ausgegeben werden :q!
, um den Vorgang ohne Speichern zu beenden oder :x
um den Vorgang zu speichern und zu beenden.
Dies ist Codegolf, so dass die wenigsten Bytes in jeder Sprache gewinnen!
:x
war eine Sache! Ich habe immer verwendet:wq
:)E37: No write since last change
? Wie kann ein Algorithmus eine Eingabeaufforderung von einer Fehlermeldung unterscheiden?E37@vimmachine: /var/override)
:x
, um vim zu beenden . Eines Tages werden Sie versehentlich:X
zufällige Tasten drücken, wenn Sie verwirrt sind. Nachdem Sie es endlich geschafft haben, werden:wq
Sie Ihre Datei nie wieder sehen.Antworten:
Python 2 , 66 Bytes
3 Bytes gespart dank @ Mr.Xcoder und 4 dank @Mayube!
Probieren Sie es online!
quelle
print
anstelle von verwendenprint()
. Und Sie können die Eingabe mit Anführungszeichen nehmenprint':q'
input()
input(':q')
Ruby , 35 Bytes
Probieren Sie es online!
quelle
p
und entfernen:q
;)05AB1E , 19 Bytes
Probieren Sie es online!
quelle
Python 2 ,
76757269 BytesDiese Antwort wurde abgelehnt .
-1 Byte dank Rod. -3 Bytes dank Mayube. -3 Bytes dank Artyer.
Probieren Sie es online!
quelle
it should not give any more output
@Mayube May we output a newline upon terminating?
@Adám sure, that's fine
random()>.5
um ein Byte zu speichernrandom()>0
, weil es eine sehr sehr kleine Chance , dassrandom()
zurückkehren wird0
.[0, 1)
bedeutet? Dies bedeutet, dass Null enthalten ist, da der Bereich Null enthält. stackoverflow.com/a/4396303/2415524 ... Der einfache Weg, sich daran zu erinnern, ist, dass in einer Zahlenreihe geschlossene Punkte enthalten sind und offene Punkte nicht. Die Klammern sehen geschlossen aus und die Klammern offen.Vimscript,
4541 Bytes4 Bytes mit rasiert
getpid()
, um eine Zahl zu erhalten. (Kann sich jemand einen kürzeren Weg vorstellen, um eine Nummer zu erhalten, die nicht überall gleich ist?)Angenommen, Sie rufen Vim mit +3 Byte auf
-c
, um das obige Skript auszuführen und-
Eingaben von stdin zu lesen:quelle
JavaScript,
5246 Bytes6 Bytes gespart dank @ETHProductions
quelle
!
nach dem sein,:q
wenn die Eingabe ein Fehler ist?prompt(':q')[30]&&...
. Also,new Date%2?':x':':q!'
C # (.NET Core) ,
140 139138 BytesProbieren Sie es online!
quelle
System
Namespace macht Sie in der Lage zu verkürzen ,System.Random
umRandom
das Speichern von 1 Byteq!
nicht aus:q!
.Next(2)>0
zu.Next()>9
, lässt es ein bisschen ein schlechtes Geschmack im Mund, aber es ist immer noch legal.using static System.Console
Mit dieser Option können Sie alleC.
Anrufe beenden und ein Byte speichern> <> ,
323029 Bytes!o
.Probieren Sie es online!
Erklärung (alt)
(wird bald aktualisiert)
quelle
[
:iii0[
Lassen Sie einen leeren Stapel übrig; Wie auch immer, ich mag es, wie Sie alle möglichen Ausgaben zu Beginn bevölkern, um zusätzliche Anführungszeichen zu vermeidenEigentlich 27 Bytes
Probieren Sie es online! (Hinweis: Da TIO mit stdin nicht gut funktioniert, habe ich die
,
(von stdin gelesene) Zeichenfolge durch die Literalzeichenfolge ersetzt, die Sie ändern können, um sie zu testen. Außerdem müssen Sie den Ausgabe-Cache deaktivieren, um sie abzurufen eine andere Antwort mit der zufälligen Ausgabe.)Erläuterung:
quelle
APL (Dyalog) , 27 Bytes
Probieren Sie es online!
':q'
drucke das aus⋄
dann?2
zufällige ganze Zahl unter den ersten beiden⊃⍨
Verwenden Sie das, um aus auszuwählen':q!' ':x'
Diese Liste von zwei Zeichenfolgen(
…)/
Repliziere das mit, dh mache n Kopien von jedem Element darin, wo n ist'!'∊⍞
Ist das Ausrufezeichen ein Element der Texteingabe? (Boolean, dh 0 oder 1)quelle
Batch, 98 Bytes
quelle
Ruby , 33 Bytes (32 Code, +1 für -n Flag)
Ich bin mir nicht sicher, was das
$$%2
Snippet angeht. Ich benutze es, um ein zufälliges Bit zu generieren, um mein Array zu indizieren, indem ich das pid modulo 2 des aktuellen Ruby-Prozesses nehme, und es wird ziemlich unvorhersehbar sein..sample
Fügt ein zusätzliches Byte hinzu.Probieren Sie es online!
quelle
JavaScript,
767150 BytesDank Artyer und Neil konnte ich eine Menge Bytes sparen, meine Ternaries verdichten und den ersten Alarm auslösen, um (duh) aufzufordern.
quelle
prompt()
direkt anrufen ? (Auch sind Sie erlaubtprompt(":q")
?)new Date%2
anstelle vonMath.random()>.5
), und Sie können die Eingabeaufforderung direkt verwenden, wie @Neil sagte:prompt()[3]<
.indexOf
drauf gemacht, bevor mir der andere Weg aufgefallen ist. Ich habe vergessen zurück zu schalten, danke!Python 2 , 64 Bytes
Probieren Sie es online!
Da dies nur eine Ansammlung von ist sowohl von diesen Python Antworten, habe ich dies als Community Wiki markiert.
quelle
Python 2 , 47 Bytes
Probieren Sie es online aus
Erläuterung:
Die Quelle der Zufälligkeit ist
id(0)%3<2
. Die Funktionid
gibt den Speicherort des Parameters zurück. Wenn Sie irgendetwas übergeben, erhalten Sie eine nicht deterministische Speicheradresse. Das Ergebnis wird immer gerade sein, aber es wird nur manchmal durch 3 teilbar sein. Die Ergebnisse modulo 3 variieren. Dies kann also eine Quelle der Zufälligkeit sein. Using<2
bedeutet, dass ungefähr 2/3 der Zeit der resultierende Boolesche Wert istTrue
.Der Rest der Antwort ist von dieser inspiriert .
quelle
Fass ,
1412 BytesDadurch wird eine Zufallszahl verschoben und entsprechend der Zufallszahl ausgegeben.
quelle
TCL, 95 Bytes
Eine einfache und ziemlich lange Lösung in tcl ...
quelle
Assembly 86Bytes Linux Systemaufrufe
quelle
LOGO,
3736 BytesProbieren Sie es online bei Anarchy Golf Performance Checker .
Erläuterung:
(weil
E37@vimmachine: /var/override)
2 Wörter hat, währendE37: No write since last change (add ! to override)
10 Wörter hat)quelle
Perl 5 (mit -E Flag), 35 Bytes
Führen Sie dies mit
perl -E 'say":q";<>=~l&&say qw(:q! :x)[$$%2]'
.Probieren Sie es online!
Ungolfed:
quelle