Vim - отличный текстовый редактор для систем Unix, но он известен тем, что его трудно выйти.
Напишите полную программу, которая будет выводить данные :q
для выхода из Vim. Затем он должен прочитать одну строку ввода, так как ему будет либо выдано приглашение bash, в этом случае выход завершился успешно, либо ошибка, в случае которой есть несохраненные изменения.
Приглашение bash будет таким:
E37@vimmachine: /var/override)
Пока ошибка будет такой:
E37: No write since last change (add ! to override)
После получения приглашения bash работа программы завершена, и она больше не должна выводить (кроме пробелов).
После получения ошибки ваша программа должна случайным образом (т. Е. Каждая возможность имеет ненулевую вероятность выбора) :q!
выйти :x
, чтобы сохранить без сохранения, или , чтобы сохранить и выйти.
Это код-гольф, поэтому побеждает меньшее количество байтов на каждом языке !
:x
была вещь! Я всегда использовал:wq
:)E37: No write since last change
? То есть, как алгоритм может отличить подсказку от сообщения об ошибке?E37@vimmachine: /var/override)
:x
для выхода из vim. Когда-нибудь вы случайно нажмете на:X
случайные клавиши, когда запутаетесь. После того, как вы, наконец,:wq
вы никогда не увидите свой файл снова.Ответы:
Python 2 , 66 байт
Сохранено 3 байта благодаря @ Mr.Xcoder и 4 благодаря @Mayube!
Попробуйте онлайн!
источник
print
вместоprint()
. И вы можете принять вход с кавычкамиprint':q'
полностью и изменитьinput()
наinput(':q')
Рубин , 35 байт
Попробуйте онлайн!
источник
p
и:q
;)05AB1E , 19 байтов
Попробуйте онлайн!
источник
Python 2 ,
76757269 байтЭтот ответ был вне игры в гольф .
-1 байт благодаря Роду. -3 байта благодаря Mayube. -3 байта благодаря Artyer.
Попробуйте онлайн!
источник
it should not give any more output
@Mayube May we output a newline upon terminating?
@Adám sure, that's fine
random()>.5
чтобы сохранить байтrandom()>0
, потому что есть очень маленький шанс,random()
который вернется0
.[0, 1)
значит, верно? Это означает, что ноль включен, потому что диапазон включает ноль. stackoverflow.com/a/4396303/2415524 ... Самый простой способ запомнить это то, что в числовой строке включены закрытые точки, а в открытых нет. Скобки выглядят закрытыми, а парены - открытыми.Vimscript,
4541 байтСбрил 4 байта, используя,
getpid()
чтобы получить номер. (Кто-нибудь может придумать более короткий способ получить число, которое не будет одинаковым везде и всегда?)Предполагая +3 байта для вызова Vim с
-c
помощью приведенного выше сценария и-
чтения ввода из stdin:источник
JavaScript,
5246 байтСохранено 6 байтов благодаря @ETHProductions
источник
!
после после того:q
, как ввод является ошибкой?prompt(':q')[30]&&...
. Также,new Date%2?':x':':q!'
C # (.NET Core) ,
140 139138 байтПопробуйте онлайн!
источник
System
пространство имен, вы сможете сократить ееSystem.Random
доRandom
1 байтаq!
не:q!
.Next(2)>0
на.Next()>9
, что оставляет немного плохого вкус во рту, но это все еще законно.using static System.Console
позволяет отбрасывать всеC.
звонки и экономить байт> <> ,
323029 байт!o
.Попробуйте онлайн!
Пояснение (старое)
(скоро обновлю)
источник
[
: мыiii0[
оставим вас с пустым стеком; В любом случае, мне нравится, как вы заполняете все возможные результаты в начале, чтобы избежать дополнительных цитатНа самом деле , 27 байтов
Попробуйте онлайн! (Примечание: поскольку TIO плохо работает со стандартным вводом данных, я заменил
,
(чтение из стандартного ввода) на буквальную строку, которую вы можете изменить, чтобы проверить ее. Кроме того, вам нужно отключить кэш вывода, чтобы получить другой ответ со случайным выводом.)Объяснение:
источник
APL (Dyalog) , 27 байтов
Попробуйте онлайн!
':q'
распечатать это⋄
тогда?2
случайное целое число среди первых двух⊃⍨
используйте это, чтобы выбрать из':q!' ':x'
этот список из двух строк(
...)/
повторность , что с, т.е. сделать п копию каждого элемента в том , что, где п есть'!'∊⍞
восклицательный знак является элементом ввода текста? (Булево, то есть 0 или 1)источник
Пакет, 98 байт
источник
Ruby , 33 байта (32 кода, +1 для флага -n)
Я не слишком уверен в
$$%2
фрагменте. Я использую его для генерации случайного бита для индексации моего массива, взяв pid текущего модуля ruby по модулю 2, и это будет довольно непредсказуемо..sample
добавляет дополнительный байт.Попробуйте онлайн!
источник
JavaScript,
767150 байтБлагодаря Artyer и Neil удалось сэкономить кучу байтов, а также сжать мои троицы и перенести первое предупреждение в подсказку (да).
источник
prompt()
напрямую? (Кроме того, вам разрешеноprompt(":q")
?)new Date%2
вместоMath.random()>.5
), и вы можете использовать подсказку прямо как @Neil сказал:prompt()[3]<
.indexOf
это, прежде чем заметил другой способ сделать это. Забыл переключиться обратно, спасибо!Python 2 , 64 байта
Попробуйте онлайн!
Так как это всего лишь скопление и из этих ответов на Python, я пометил это как сообщества вики.
источник
Python 2 , 47 байт
Попробуйте онлайн
Объяснение:
Источник случайности есть
id(0)%3<2
. Функцияid
возвращает ячейку памяти параметра. Передача чего-либо даст недетерминированный адрес памяти. Результат всегда будет четным, но только иногда он будет делиться на 3. Результаты по модулю 3 меняются. Таким образом, это может быть источником случайности. Использование<2
означает, что примерно в 2/3 времени полученное логическое значение равноTrue
.Остальная часть ответа вдохновлена этим .
источник
Бочонок ,
1412 байтЭто выдвигает случайное число и выводит соответственно случайное число.
источник
TCL, 95 байт
Простое и довольно длинное решение в tcl ...
источник
Сборка 86Bytes системных вызовов Linux
источник
LOGO,
3736 байтПопробуйте онлайн на Anarchy Golf Performance Checker .
Объяснение:
(потому что
E37@vimmachine: /var/override)
имеет 2 слова, аE37: No write since last change (add ! to override)
имеет 10 слов)источник
Perl 5 (с флагом -E), 35 байт
Запустите это с
perl -E 'say":q";<>=~l&&say qw(:q! :x)[$$%2]'
.Попробуйте онлайн!
Ungolfed:
источник