Ваша задача состоит в том, чтобы создать программу , которая будет отображать следующий текст, ждать пользователя нажать клавишу (это нормально игнорировать ключи , как ctrl
, alt
, caps lock
и т.д., до тех пор , как ключи нравятся letters
, numbers
, symbols
и enter
не игнорируется), и затем завершите программу:
Press any key to continue...
Конечные переводы строки разрешены. Программа должна выйти сразу после нажатия клавиши. Кроме того, программа должна быть достаточно переносимой (то есть без заголовков или модулей, специфичных для ОС, запускаемых вне IDE и т. Д.).
Подсказка должна быть точно такой же, как показано выше, если не удается избежать завершающей новой строки.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах. Это также мой первый вопрос по коду-гольфу, поэтому я прошу прощения, если я не знаю правил для PPCG.
PAUSE
правильным ответом (многоточие распространяется от...
до. . .
)?pause
функций языка, вероятно, нечувствительны к клавишам, таким как Caps-Lock или Control (нажаты сами по себе). Возможно, вам следует уточнить, разрешено ли программе не замечать эти клавишиОтветы:
SmallBasic,
1817 байт17 байт
18 байт
источник
TextWindow.Show()
? Исходя из этого сайта, который должен иметь такой же эффект.Пакет, 46 байтов
Потому
pause
что вывод содержит пробел перед каждым.
.источник
x
,? Затемx
будет создан файл , содержащий текстPress any key to continue . . .
. Сохраняет 2 байта, но я не уверен, идет ли это вразрез с этой проблемой или какими-либо стандартными лазейками.@choice /n /m Press any key to continue...
было возможно и несколько десятилетий назад.choice
это эквивалентноchoice /c SN
(дляsim
(да) иnão
(нет) на португальском языке).HTML + JavaScript (ES6), 36 + 25 = 61 байт
Вы не можете выйти из программы JavaScript, поэтому лучше всего придумать очистка веб-страницы.
HTML + JavaScript (ES6), 33 + 28 = 61 байт
Альтернативное решение, предложенное @LarsW, которое перенаправляет на
about:blank
.HTML / JavaScript, 60 байт
Еще одно замечательное решение @Ismael Miguel, которое не использует автономный JS. 1 байт сохранен!
HTML + JavaScript (ES6), 26 + 28 = 54 байта
Еще одно решение @George Reith, использующее записи документов.
HTML + JavaScript (ES7), 23 + 28 = 51 байт
Та же программа, использующая предложенный оператор связывания ES7 :
Поскольку большинство из этих решений не мои, проявите любезность и оцените их в комментариях!
источник
<html onkeyup=this.innerHTML=''>Press any key to continue...
<- 60 байтов. Попробуйте это на jsfiddle.net/xhb69401 (это работает с обоими<html>
и<body>
)onkeyup=_=>document.open()
сPress any key to continue...
общей суммой 54 байта.onkeyup=::document.open
.MATL, 35 байт
объяснение
источник
Y.
тоже нет. Может быть, ОП следует уточнить. Такие ключи, как Control и Caps-lock не будут работать в большинстве решенийTI-Basic, 55 байтов
По сути, он зацикливается до нажатия клавиши. Жаль, что строчные буквы составляют два байта в TI-Basic ...
PS См. Комментарий @GoldenRatio для объяснения того, как это работает. Это гений!
источник
:Disp "Press any
(не забывайте: в вашем коде это считается) иDisp "key to continuesin(
(грех заставляет ... в 1 байт компенсировать новую строку и disp, и это экономит пространство между any и key)getKey
было 2 байта, когда он на самом деле 1. Я полагаю, с помощьюText(
илиOutput(
вы могли бы поместить все это в одну строку. Но ваше предложение лучше. Я не думал об использовании неявного многоточия в конце строки. Еще раз спасибо, я сейчас отредактирую это.Disp
две строки или нет (но это не всегда так).Баш,
464342 байтаСохранено 1 байт благодаря @DigitalTrauma
Использует
read
встроенный.-r
удостоверяется, что это не позволяет пользователю вводить экранирование.-n 1
позволяет только один символ.-p
это подсказкаисточник
-n 1
. Однако он работает, не нажимая Enter для меня (v3.2.57) и на моей машине debain (v4.3.30)-rn1
сохраняет 1 байтHaskell ,
5150 байт (спасибо @ villou24)Попробуйте онлайн!
источник
getChar
вместо этого.putStr
строкой.Октава / MATLAB, 42 байта
источник
QBasic ( QB64 ), 37 (42?) Байтов
К сожалению, во встроенной подсказке QBasic о завершении программы нет многоточия, поэтому нам придется распечатать его самостоятельно:
(
SLEEP
без аргумента ожидает нажатия клавиши.)Этот код выполняет то, о чем буквально просит вопрос, но не похоже, что он соответствует духу вопроса, потому что, конечно, QBasic затем отображает «Нажмите любую клавишу для продолжения» и ждет нажатия клавиши, прежде чем вернуться в IDE. Вот тот, который идет прямо в IDE, для +5 байтов:
STOP
это отладочная инструкция. В обычном QBasic он устанавливает точку останова: выполнение останавливается, и мы возвращаемся в IDE, но выполнение можно возобновить снова с помощью F5. Неясно, будет ли это считаться программой "выхода". Однако я использую эмулятор QB64, который не может делать точки останова. При встречеSTOP
он просто останавливается - возвращаясь прямо в IDE без лишнего сообщения «Нажать любую клавишу».источник
LOCATE
чтобы просто напечатать точки после него, но QBasic очищает весь нижний ряд, когда печатает это сообщение ...Обработка,
8981 байтобъяснение
Это необходимо, поскольку в моей программе используется более одной функции. Все, что внутри,
setup()
вызывается, в данном случае строка"Press any key to continue..."
.Проверяет, будет ли
key
(key
всегда будет содержать значение int последней нажатой клавиши) больше чем0
(т.е. не является нулевым байтом). Если условие выполнено, программа завершается.draw()
гарантирует, что программа всегда будет искать ключ, а не останавливаться после запуска программы.(Это чувство, когда встроенный в Java-подобный язык все еще многословен ...)
источник
void steup(){...}
сstatic{...}
Паскаль,
7565 байтЭто было протестировано с помощью Free Pascal Compiler версии 3.0.0.
Может работать с TurboPascal 7 или новее.
К сожалению, я не могу заменить
readkey
с ,readln
поскольку задача требует , чтобы любой ключ будет принят.Я тестировал этот код на http://rextester.com/l/pascal_online_compiler с предоставлением входных данных и без них.
Как и ожидалось, программа завершается через 10 секунд, так как она сидит в ожидании нажатия клавиши, которое никогда не происходит.
Спасибо @manatwork за то, что он сэкономил мне 10 байтов, доказав, что я не прав, и показал, что мне это не нужно
program _;
.источник
program
ключевого слова. (На самом деле я никогда не встречал такую древнюю реализацию, которая была.)program
и это жаловалось. Кроме того, я иногда использую TurboPascal. Это требует (обратите внимание: требует )program
там. Если вы знаете какое-нибудь место, где я могу проверить, где оно работает безprogram
, я его удалю. Я ненавижу это там. И этоuses Crt;
.program;
вместо того, чтобы фактически удалить этот бит. Спасибо, что предупредили меня об этом.Царапина, 81 байт
( Ссылка Скретчблока )
Если вы хотите остановить всю программу при нажатии клавиши (включая другие потоки), вам нужно добавить
stop all
. Если вы хотите избавиться от диалога say, вам нужен пустойsay
блок (такжеstop all
работает).Удобно, что у Scratch есть для этого встроенная функция!
источник
Баш
484442 байта@ mame98 Спасибо за сохранение 4 байта.
@RaisingAgent Спасибо за сохранение 2 байта.
источник
read -srn1 -p".."
удалив последний пробел в кавычках. Кроме того, я не уверен, если вам нужен флаг 's'_
&-s
R, 56 байт
Это работает в терминалах Linux и OSX.
источник
Рубин (2,3) (+ Пакет),
5255545346 байтовТеперь 46 байтов благодаря Алексису Андерсену.
Примечание: протестировано в Windows, может не работать, если нет
pause
команды.объяснение
Puts
требуемый текст:Конец строки:
Запустите пакетную
pause
команду и передайте вывод по каналуnul
:источник
pause>nul
` или даже короче, просто используйте get (кроме того, нет хорошего способа включитьgets
ждет ввода, а не просто ключ?Java, 127 байт
Примечание: для работы консоли консоль должна быть установлена в режим raw .
источник
Also, the program must be fairly portable (i.e no OS-specific headers or modules, runs outside of an IDE, etc.)
если вы перейдете по этой ссылке, нет независимого от ОС способа сделать это. Это значит, что ответ, который вы указали, в равной степени действителен, как и этот.SmileBASIC, 52 байта
источник
Python 2, 110 байт
источник
Mathematica, 62 байта
объяснение
источник
SmileBASIC, 55 байтов
Разъяснение:
источник
WHILE""==INKEY$()WEND
меньшеPython 2/3 POSIX, 85 байт
источник
Python 3, 65 байт
Требуется версия Python для Windows.
msvcrt.getch () не ожидает нажатия клавиши ввода, как input (), она возвращает первую нажатую клавишу.
Документы Python для msvcrt.getch (): https://docs.python.org/3/library/msvcrt.html#msvcrt.getch
Спасибо @Fliptack за сохранение нескольких байтов
источник
import msvcrt
тоfrom msvcrt import*
выглядит на 1 байт корочеNode.js,
10210199 байтисточник
with
: pastebin.com/BhrAyq2Kwith
спас меня байты (или байты)stdout.write`Press any key to continue...`
сэкономит 2 байта в ES6.process.stdout.write
не делает неявных преобразований в строку (это просто ошибки).Sinclair ZX81 / Timex TS1000 BASIC: метод 1, приблизительно 41 байт
Метод 2 примерно 38 байт
Я предпочитаю метод 1, как на ZX81, при
PAUSE
вызове появляется мерцание экрана , и если вы хотите достаточно долго (при условии, что ZX81 не перегревается и не падает), пауза в конце концов закончится, тогда как метод 1 застрял в бесконечный цикл до нажатия клавиши и отсутствие мерцания экрана.Я определю правильное количество байтов, используемых позже, когда у меня будет правильный бит BASIC, который мне скажет. Кстати, использование VAL «x» вместо числа экономит ценную оперативную память на ZX81 (я думаю, что это то же самое и для ZX Spectrum).
источник
1 PRINT "Press any key to continue...": PAUSE 4e4
PAUSE 0
паузы навсегда.PAUSE 0
в ZX81 BASIC не останавливается вечно.Perl 5, 79 байт
используется как:
Без призов конечно. Я уверен, что какой-нибудь Perl человек будет лучше.
(89 байтов, если вызов интерпретатора также должен быть включен в счетчик)
источник
system
учел свой счет, так что я не знаю, что ты имел в виду под этим комментарием.$|=1
играть в гольф: это необязательно, у вас есть пробел послеprint
, вы можете опустить скобки вокруг аргументовread
, вы можете использовать backticks вместо system и, наконец,print
возвращает 1, так что вы можете использовать его вместо Литерал1
в призыве кread
. Итак, в итоге мы получаем:perl -e '`stty cbreak`;read STDIN,$a,print"Press any key to continue..."'
say
, хотя я думаю, что этот подход не соответствует требованию «переносимости». Лучшее портативное решение, которое я могу найти, этоperl -MTerm::ReadKey -E'say"Press any key to continue...";ReadMode 3;ReadKey'
(52 байта + 16 байтов-MTerm::ReadKey<space>
). Будьте осторожны, это испортит ваш терминал, если вы не восстановите режим чтения в концеReadMode 1
.say
, я склонен больше его не использовать (я согласен в основном с этим мета-постом). Теперь вернемся к короткому коду,IO::Prompt
будет корочеTerm::ReadKey
(40 + 13 = 53 байт):perl -MIO::Prompt -e 'prompt"Press any key to continue... ",-1'
. И как это происходит, это даже короче, чем я предложил в моем предыдущем комментарии.-E
аргумента. Впрочем, в последний раз, когда я проверял, ответ JB не оспаривался в течение четырех лет, поэтому я следовал ему. Может быть, мне нужно вернуться к нему снова. Что касается IO :: Подскажите, хорошая находка! Хотя это не работает на моем Strawberry 5.20.2 в Windows, в то время как Term :: ReadKey работает.PHP, 73 байта
Запустите его в интерактивной оболочке PHP (
php -a
)источник
C #, 101 байт
Протестировано на Linux, должно работать на любой системе, имеющей библиотеки .NET и Common Language Runtime.
Нежелтая программа:
CTRL, ALT, SHIFT игнорируются. Нажатая клавиша будет отображаться на экране, если она печатается.
Эхо можно отключить, заменив C.Read () на C.ReadKey (0 <1) по цене еще 6 байтов.
источник
8-е , 47 байтов
Эта программа игнорирует такие клавиши, как Ctrl, Alt, Caps Lock. Выход с помощью клавиш, таких как буквы, цифры, символы и ввод.
объяснение
источник
cr
C #, 29 байт
Не уверен, если это считается действительным, потому что это печатает:
Но есть пакетный ответ, который печатает это также.
источник
Forth (gforth), 39 байтов
(Да, уже есть восьмое решение, но это короче)
источник