нажмите любую клавишу для продолжения


36

Ваша задача состоит в том, чтобы создать программу , которая будет отображать следующий текст, ждать пользователя нажать клавишу (это нормально игнорировать ключи , как ctrl, alt, caps lockи т.д., до тех пор , как ключи нравятся letters, numbers, symbolsи enterне игнорируется), и затем завершите программу:

Press any key to continue... 

Конечные переводы строки разрешены. Программа должна выйти сразу после нажатия клавиши. Кроме того, программа должна быть достаточно переносимой (то есть без заголовков или модулей, специфичных для ОС, запускаемых вне IDE и т. Д.).


Подсказка должна быть точно такой же, как показано выше, если не удается избежать завершающей новой строки.


Это , поэтому выигрывает самый короткий ответ в байтах. Это также мой первый вопрос по коду-гольфу, поэтому я прошу прощения, если я не знаю правил для PPCG.


4
Является ли выводимый текст чувствительным к регистру? Будет ли WinBatch PAUSEправильным ответом (многоточие распространяется от ...до . . .)?
FlipTack

13
Также я бы посоветовал подождать неделю или две, прежде чем принимать какой-либо ответ
Kritixi Lithos

3
Большинство pauseфункций языка, вероятно, нечувствительны к клавишам, таким как Caps-Lock или Control (нажаты сами по себе). Возможно, вам следует уточнить, разрешено ли программе не замечать эти клавиши
Луис Мендо

15
Вам следует подождать несколько недель, прежде чем принять ответ, как вам советовали многие другие (хотя вы решили игнорировать их советы)
FlipTack

12
@JungHwanMin Я согласен с другими. Пожалуйста, подождите, чтобы принять решение, пока записи не перестанут
появляться

Ответы:


5

SmallBasic, 18 17 байт

  • Версия 2.0

17 байт

TextWindow.Show()
  • Версия 1.0

18 байт

TextWindow.Pause()

3
Не могли бы вы также просто сделать TextWindow.Show()? Исходя из этого сайта, который должен иметь такой же эффект.
Suever

20

Пакет, 46 байтов

@echo Press any key to continue...
@pause>nul

Потому pauseчто вывод содержит пробел перед каждым ..


5
Хороший редирект. Не могли бы вы также отправить вывод, скажем x,? Затем xбудет создан файл , содержащий текст Press any key to continue . . .. Сохраняет 2 байта, но я не уверен, идет ли это вразрез с этой проблемой или какими-либо стандартными лазейками.
Steenbergh

Некоторое время я нахожусь на системе choice.exe, но у меня есть ощущение, что это @choice /n /m Press any key to continue...было возможно и несколько десятилетий назад.
manatwork

Выбор имеет значения по умолчанию, такие как J и N, поэтому программа будет работать только при нажатии J или N, если я правильно помню.
geisterfurz007 Остановите этот хаос

@ geisterfurz007 Кроме того, значение по умолчанию локализовано. Например, для меня choiceэто эквивалентно choice /c SN(для sim(да) и não(нет) на португальском языке).
Исмаэль Мигель

Ах, ты прав, @ geisterfurz007. Теперь я помню, как глупо выглядели мои командные файлы с перечисленным алфавитом целиком. Хорошо, тогда это была мертвая идея.
manatwork

15

HTML + JavaScript (ES6), 36 + 25 = 61 байт

Вы не можете выйти из программы JavaScript, поэтому лучше всего придумать очистка веб-страницы.

onkeyup=_=>a.innerHTML=''
<a id=a>Press any key to continue...


HTML + JavaScript (ES6), 33 + 28 = 61 байт

Альтернативное решение, предложенное @LarsW, которое перенаправляет на about:blank.

onkeyup=_=>location='about:blank'
Press any key to continue...


HTML / JavaScript, 60 байт

Еще одно замечательное решение @Ismael Miguel, которое не использует автономный JS. 1 байт сохранен!

<html onkeyup=this.innerHTML=''>Press any key to continue...


HTML + JavaScript (ES6), 26 + 28 = 54 байта

Еще одно решение @George Reith, использующее записи документов.

onkeyup=_=>document.open()
Press any key to continue...

HTML + JavaScript (ES7), 23 + 28 = 51 байт

Та же программа, использующая предложенный оператор связывания ES7 :

onkeyup=::document.open
Press any key to continue...


Поскольку большинство из этих решений не мои, проявите любезность и оцените их в комментариях!


10
36 + 25 - это 61 или я что-то упустил?

2
@LarsW, ckjbgames Ну, каковы шансы? Вы никогда не узнаете, пока не напишите это! ;)
darrylyeo

2
<html onkeyup=this.innerHTML=''>Press any key to continue...<- 60 байтов. Попробуйте это на jsfiddle.net/xhb69401 (это работает с обоими <html>и <body>)
Исмаэль Мигель

2
Более короткий способ очистить документ и не требует привязки. onkeyup=_=>document.open()с Press any key to continue...общей суммой 54 байта.
Джордж Райт

2
Также с помощью предложенного es-next оператора связывания его можно уменьшить до onkeyup=::document.open.
Джордж Райт

14

MATL, 35 байт

'Press any key to continue...'D0$Y.

объяснение

'Press any key to continue...'      % String literal
D                                   % Display the string (has trailing newline)
0$Y.                                % Pause until the user presses any key

@LuisMendo Ах, хороший улов
Suever

2
С другой стороны, Y.тоже нет. Может быть, ОП следует уточнить. Такие ключи, как Control и Caps-lock не будут работать в большинстве решений
Луис Мендо

1
@ LuisMendo Можно пропустить управляющие клавиши, блокировку заглавных букв и т. Д.
ckjbgames

@ LuisMendo Разве ваша модификация не требует ввода ключа? Или, может быть, я неправильно помню это
Suever

@ Конечно, конечно! Вход требуется
Луис Мендо

11

TI-Basic, 55 байтов

По сути, он зацикливается до нажатия клавиши. Жаль, что строчные буквы составляют два байта в TI-Basic ...

Disp "Press any","key to continuesin(
Repeat getKey
End

PS См. Комментарий @GoldenRatio для объяснения того, как это работает. Это гений!


Прежде всего, ваш счетчик байтов в данный момент выключен, то есть фактически 55 байтов (только что сделал программу на TI-84 + и протестировал). Во-вторых, это технически недопустимо, потому что оно не отображает Нажмите любую клавишу, чтобы продолжить ... и вместо этого оно сокращается до 15 символов плюс ... Вместо этого, сохраняя количество байтов, сделайте его двумя командами disp. :Disp "Press any(не забывайте: в вашем коде это считается) и Disp "key to continuesin((грех заставляет ... в 1 байт компенсировать новую строку и disp, и это экономит пространство между any и key)
Golden Ratio

Прибей меня к этому, первый язык, о котором я думал.
C Андерсон

Спасибо за подсказку @GoldenRatio, я думаю, я думал, что getKeyбыло 2 байта, когда он на самом деле 1. Я полагаю, с помощью Text(или Output(вы могли бы поместить все это в одну строку. Но ваше предложение лучше. Я не думал об использовании неявного многоточия в конце строки. Еще раз спасибо, я сейчас отредактирую это.
Timtech

Спасибо за обновление, и я думаю, что использование disp с запятой имеет вескую причину, так как он никогда не сохранял байты. Я обычно помещаю их в отдельные строки из-за своей склонности нажимать кнопку очистки: D. Кроме того, существует ли какой-либо официальный метод оценки размера? Под этим я подразумеваю, должны ли 9 байтов, которые я не считал, считать число программ? И должен ли считаться 1 байт для начального двоеточия, которое нельзя удалить? Я пометил это как 0 байтов, потому что для нахождения места я привык вычитать 10 для размера программы, но, возможно, двоеточие должно учитываться.
Золотое

Нет, в основном, если вы создаете совершенно пустую программу, она рассчитывает на 0 байтов, то вы начинаете оттуда. Это было бы похоже на подсчет имени файла исходного файла. Кроме того, начальное двоеточие просто для галочки и фактически не является частью программы. Фактически, каждая новая строка автоматически показывает двоеточие в редакторе на калькуляторе, но опять же, это просто для наглядности (попробуйте cemetech sourcecoder, чтобы понять, что я имею в виду). И, наконец, количество байтов одинаково, независимо от того, разделяем мы Dispдве строки или нет (но это не всегда так).
Timtech

8

Баш, 46 43 42 байта

Сохранено 1 байт благодаря @DigitalTrauma

read -rn1 -p"Press any key to continue..."

Использует readвстроенный. -rудостоверяется, что это не позволяет пользователю вводить экранирование. -n 1позволяет только один символ. -pэто подсказка


Не продолжается, пока я не попал в <cr>
Гленн Рандерс-Персон

@ GlennRanders-Pehrson Я считаю, что это может произойти, если ваш bash не поддерживает -n 1. Однако он работает, не нажимая Enter для меня (v3.2.57) и на моей машине debain (v4.3.30)
Downgoat

Также не работает, если я
Гленн Рандерс-Персон

1
Работает ли нормально, если я помещаю строку в файл (anykey.sh) и запускаю это. Работает нормально, даже если я уберу пробел между "-rn" и "1".
Гленн Рандерс-Персон

1
-rn1сохраняет 1 байт
цифровая травма

8

Haskell , 51 50 байт (спасибо @ villou24)

main=putStr"Press any key to continue...">>getChar

Попробуйте онлайн!


6
Это ждет входа. Вы можете использовать getCharвместо этого.
Кристиан Сиверс

1
Вы можете сохранить байт, удалив пробел между putStrстрокой.
villou24

Пусть ответчик отредактирует свой собственный пост @ckjbgames, не делайте этого за него
MildlyMilquetoast


4

QBasic ( QB64 ), 37 (42?) Байтов

К сожалению, во встроенной подсказке QBasic о завершении программы нет многоточия, поэтому нам придется распечатать его самостоятельно:

?"Press any key to continue..."
SLEEP

( SLEEPбез аргумента ожидает нажатия клавиши.)

Этот код выполняет то, о чем буквально просит вопрос, но не похоже, что он соответствует духу вопроса, потому что, конечно, QBasic затем отображает «Нажмите любую клавишу для продолжения» и ждет нажатия клавиши, прежде чем вернуться в IDE. Вот тот, который идет прямо в IDE, для +5 байтов:

?"Press any key to continue..."
SLEEP
STOP

STOPэто отладочная инструкция. В обычном QBasic он устанавливает точку останова: выполнение останавливается, и мы возвращаемся в IDE, но выполнение можно возобновить снова с помощью F5. Неясно, будет ли это считаться программой "выхода". Однако я использую эмулятор QB64, который не может делать точки останова. При встрече STOPон просто останавливается - возвращаясь прямо в IDE без лишнего сообщения «Нажать любую клавишу».


Как ни странно, «Нажмите любую клавишу для продолжения» также появляется при выполнении автономной версии QB64. Я пытался использовать, LOCATEчтобы просто напечатать точки после него, но QBasic очищает весь нижний ряд, когда печатает это сообщение ...
steenbergh

4

Обработка, 89 81 байт

void setup(){print("Press any key to continue...");}void draw(){if(key>0)exit();}

объяснение

void setup(){print("Press any key to continue...");}

Это необходимо, поскольку в моей программе используется более одной функции. Все, что внутри, setup()вызывается, в данном случае строка "Press any key to continue...".

if(key>0)exit();

Проверяет, будет ли key( keyвсегда будет содержать значение int последней нажатой клавиши) больше чем 0(т.е. не является нулевым байтом). Если условие выполнено, программа завершается.

void draw(){}

draw() гарантирует, что программа всегда будет искать ключ, а не останавливаться после запуска программы.

(Это чувство, когда встроенный в Java-подобный язык все еще многословен ...)


Я не очень знаю Обработки, но я думаю , вы должны быть в состоянии заменить void steup(){...}сstatic{...}
Pavel

2
@Pavel Нет, не работает
Kritixi Lithos

4

Паскаль, 75 65 байт

Это было протестировано с помощью Free Pascal Compiler версии 3.0.0.
Может работать с TurboPascal 7 или новее.

uses Crt;begin write('Press any key to continue...');readkey;end.

К сожалению, я не могу заменить readkeyс , readlnпоскольку задача требует , чтобы любой ключ будет принят.


Я тестировал этот код на http://rextester.com/l/pascal_online_compiler с предоставлением входных данных и без них.
Как и ожидалось, программа завершается через 10 секунд, так как она сидит в ожидании нажатия клавиши, которое никогда не происходит.


Спасибо @manatwork за то, что он сэкономил мне 10 байтов, доказав, что я не прав, и показал, что мне это не нужно program _;.


Ни FreePascal, ни TurboPascal не требуют использования programключевого слова. (На самом деле я никогда не встречал такую ​​древнюю реализацию, которая была.)
manatwork

@manatwork Я попробовал это без, programи это жаловалось. Кроме того, я иногда использую TurboPascal. Это требует (обратите внимание: требует ) programтам. Если вы знаете какое-нибудь место, где я могу проверить, где оно работает без program, я его удалю. Я ненавижу это там. И это uses Crt;.
Исмаэль Мигель

1
Я не понимаю тебя. Он отлично работает, включая службу rextester, которую вы связали. В моей командной строке: pastebin.com/pVr9dqxd
manatwork

@manatwork Ты прав. Я знаю, почему он жаловался: я написал program;вместо того, чтобы фактически удалить этот бит. Спасибо, что предупредили меня об этом.
Исмаэль Мигель

4

Царапина, 81 байт

образ

when gf clicked
say [Press any key to continue...
wait until <key [any v] pressed

( Ссылка Скретчблока )

Если вы хотите остановить всю программу при нажатии клавиши (включая другие потоки), вам нужно добавить stop all. Если вы хотите избавиться от диалога say, вам нужен пустой sayблок (также stop allработает).

Удобно, что у Scratch есть для этого встроенная функция!


4

Баш 48 44 42 байта

read -rn1 -p"Press any key to continue..."

@ mame98 Спасибо за сохранение 4 байта.

@RaisingAgent Спасибо за сохранение 2 байта.


Вы можете улучшить это, сложив флаги, например, read -srn1 -p".."удалив последний пробел в кавычках. Кроме того, я не уверен, если вам нужен флаг 's'
mame98

1
удалить последний пробел в кавычках _&-s
RaisingAgent

@RaisingAgent Спасибо, обновлено :)
Абель Том


3

Рубин (2,3) (+ Пакет), 52 55 54 53 46 байтов

Теперь 46 байтов благодаря Алексису Андерсену.

Примечание: протестировано в Windows, может не работать, если нет pauseкоманды.

puts"Press any key to continue...";`pause>nul`

объяснение

Puts требуемый текст:

puts"Press any key to continue..."

Конец строки:

;

Запустите пакетную pauseкоманду и передайте вывод по каналу nul:

`pause>nul`

Здравствуйте, добро пожаловать в PPCG. Я вижу, что у вас есть список изменений в теле вашего представления. Хотя это может быть обычным делом на других сайтах, так как каждый может видеть историю редактирования сообщения, мы обычно оставляем историю сообщения вне тела (за исключением пробега для подсчета байтов). Это похоже на хороший первый гольф, и я надеюсь, вам здесь будет весело.
Пшеничный волшебник

@WheatWizard Спасибо, я должен оставить там изменения или удалить их?
notme1560

1
Я думаю, что это даст гораздо более читаемый ответ, если вы удалите их, и я лично рекомендовал бы сделать это.
Пшеничный волшебник

Вы можете сократить это, заменив систему обратными галочками: ` pause>nul` или даже короче, просто используйте get (кроме того, нет хорошего способа включить
Алексис Андерсен,

@AlexisAndersen не getsждет ввода, а не просто ключ?
notme1560

3

Java, 127 байт

class P{public static void main(String[]a)throws Exception{System.out.print("Press any key to continue...");System.in.read();}}

Примечание: для работы консоли консоль должна быть установлена ​​в режим raw .


Тогда, боюсь, ваш код должен установить консоль так, как это делает Perl-решение original.legin .
manatwork

@manatwork, Also, the program must be fairly portable (i.e no OS-specific headers or modules, runs outside of an IDE, etc.)если вы перейдете по этой ссылке, нет независимого от ОС способа сделать это. Это значит, что ответ, который вы указали, в равной степени действителен, как и этот.


3

Python 2, 110 байт

import curses as c
s=c.initscr()
c.cbreak()
s.addstr(0,0,'Press any key to continue...')
while not s.getch():1

2

Mathematica, 62 байта

EventHandler["Press any key to continue...","KeyDown":>Exit[]]

объяснение

EventHandler["Press any key to continue...","KeyDown":>Exit[]]
EventHandler[                                                ]  (* Create a new EventHandler *)
             "Press any key to continue..."                     (* Print the dialog text *)
                                            "KeyDown":>Exit[]   (* When a key is pressed down, exit *)

2

SmileBASIC, 55 байтов

?"Press any key to continue..."@L IF INKEY$()!=""GOTO@L

Разъяснение:

?"Press any key to continue..."  '? means PRINT
@L                               'start of loop
IF INKEY$()!="" GOTO @L          'if no key pressed goto @L

WHILE""==INKEY$()WENDменьше
12Me21

2

Python 2/3 POSIX, 85 байт

import sys,tty
print('Press any key to continue...')
tty.setraw(1)
sys.stdin.read(1)

2

Python 3, 65 байт

Требуется версия Python для Windows.

from msvcrt import*
print("Press any key to continue...")
getch()

msvcrt.getch () не ожидает нажатия клавиши ввода, как input (), она возвращает первую нажатую клавишу.

Документы Python для msvcrt.getch (): https://docs.python.org/3/library/msvcrt.html#msvcrt.getch

Спасибо @Fliptack за сохранение нескольких байтов


Этот ответ недействителен без чего- import msvcrtто
FlipTack

2
Поскольку это код-гольф, вы должны удалить комментарии из своего кода. Кроме того, использование from msvcrt import* выглядит на 1 байт короче
FlipTack

круто, спасибо @FlitTack
Захари Смит

2

Node.js, 102 101 99 байт

with(process)stdout.write('Press any key to continue...'),s=stdin,s.setRawMode(1),s.on('data',exit)

Не много выигрыша, всего на 1 символ короче with: pastebin.com/BhrAyq2K
manatwork

@manatwork Хороший! Первый раз withспас меня байты (или байты)
Джордж Райт

1
Теперь вы можете убрать фигурные скобки и заменить разрывы строк запятыми еще на 2 байта.
Даррильо

Также, если я не ошибаюсь, stdout.write`Press any key to continue...`сэкономит 2 байта в ES6.
darrylyeo

@ Darrylyeo запятая работа, это здорово, спасибо! К сожалению, тег с литералом шаблона не может быть использован здесь, так как он фактически передается в массив и process.stdout.writeне делает неявных преобразований в строку (это просто ошибки).
Джордж Райт

2

Sinclair ZX81 / Timex TS1000 BASIC: метод 1, приблизительно 41 байт

1 PRINT "PRESS ANY KEY TO CONTINUE..."
2 GOTO (INKEY$<>"")+VAL "2"

Метод 2 примерно 38 байт

1 PRINT "PRESS ANY KEY TO CONTINUE..."
2 PAUSE VAL "4E4"

Я предпочитаю метод 1, как на ZX81, при PAUSEвызове появляется мерцание экрана , и если вы хотите достаточно долго (при условии, что ZX81 не перегревается и не падает), пауза в конце концов закончится, тогда как метод 1 застрял в бесконечный цикл до нажатия клавиши и отсутствие мерцания экрана.

Я определю правильное количество байтов, используемых позже, когда у меня будет правильный бит BASIC, который мне скажет. Кстати, использование VAL «x» вместо числа экономит ценную оперативную память на ZX81 (я думаю, что это то же самое и для ZX Spectrum).


Оба метода будут работать и на Sinclair ZX Spectrum, преимущество в том, что Spectrum имеет заглавные и строчные буквы, тогда как ZX81 не имеет по умолчанию (и не имеет ни одной кавычки в качестве стандартного символа).
Шон Бебберс

Метод 2 на Sinclair ZX Spectrum может быть сокращен до1 PRINT "Press any key to continue...": PAUSE 4e4
Shaun Bebbers

1
PAUSE 0паузы навсегда.
Нил

Да, я не программировал в Sinclair Spectrum BASIC так долго, что забыл об этом. PAUSE 0в ZX81 BASIC не останавливается вечно.
Шон Бебберс

1

Perl 5, 79 байт

system "stty cbreak";$|=1;print "Press any key to continue...";read(STDIN,$a,1)

используется как:

perl -e 'system "stty cbreak";$|=1;print "Press any key to continue...";read(STDIN,$a,1)'

Без призов конечно. Я уверен, что какой-нибудь Perl человек будет лучше.

(89 байтов, если вызов интерпретатора также должен быть включен в счетчик)


@Pavel, он systemучел свой счет, так что я не знаю, что ты имел в виду под этим комментарием.
Дада

1
@ original.legin Я думаю, что Perl не будет намного лучше, чем этот. Несколько байтов вы можете по-прежнему $|=1играть в гольф: это необязательно, у вас есть пробел после print, вы можете опустить скобки вокруг аргументов read, вы можете использовать backticks вместо system и, наконец, printвозвращает 1, так что вы можете использовать его вместо Литерал 1в призыве к read. Итак, в итоге мы получаем:perl -e '`stty cbreak`;read STDIN,$a,print"Press any key to continue..."'
Дада

@Dada Вы также можете сбрить 2 байта с помощью say, хотя я думаю, что этот подход не соответствует требованию «переносимости». Лучшее портативное решение, которое я могу найти, это perl -MTerm::ReadKey -E'say"Press any key to continue...";ReadMode 3;ReadKey'(52 байта + 16 байтов -MTerm::ReadKey<space>). Будьте осторожны, это испортит ваш терминал, если вы не восстановите режим чтения в конце ReadMode 1.
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot Действительно, я не видел этого требования о переносимости. О say, я склонен больше его не использовать (я согласен в основном с этим мета-постом). Теперь вернемся к короткому коду, IO::Promptбудет короче Term::ReadKey(40 + 13 = 53 байт): perl -MIO::Prompt -e 'prompt"Press any key to continue... ",-1'. И как это происходит, это даже короче, чем я предложил в моем предыдущем комментарии.
Дада

1
@ Дада, я вижу обе стороны -Eаргумента. Впрочем, в последний раз, когда я проверял, ответ JB не оспаривался в течение четырех лет, поэтому я следовал ему. Может быть, мне нужно вернуться к нему снова. Что касается IO :: Подскажите, хорошая находка! Хотя это не работает на моем Strawberry 5.20.2 в Windows, в то время как Term :: ReadKey работает.
ThisSuitIsBlackNot

1

PHP, 73 байта

echo"Press any key to continue...";$h=fopen("php://stdin","r");fgets($h);

Запустите его в интерактивной оболочке PHP ( php -a)


«Программа должна выйти сразу после нажатия кнопки.» - это ждет , пока не вводить или затемнение ...
manatwork

1

C #, 101 байт

using C=System.Console;class P{static void Main(){C.Write("Press any key to continue...");C.Read();}}

Протестировано на Linux, должно работать на любой системе, имеющей библиотеки .NET и Common Language Runtime.

Нежелтая программа:

using C = System.Console; // creating a shorter alias for the System.Console class

class P
{
    static void Main()
    {
        C.Write("Press any key to continue...");    // prints the message
        C.Read();   // waits for key press
    }
}

CTRL, ALT, SHIFT игнорируются. Нажатая клавиша будет отображаться на экране, если она печатается.

Эхо можно отключить, заменив C.Read () на C.ReadKey (0 <1) по цене еще 6 байтов.


1

8-е , 47 байтов

"Press any key to continue..." . cr con:key bye

Эта программа игнорирует такие клавиши, как Ctrl, Alt, Caps Lock. Выход с помощью клавиш, таких как буквы, цифры, символы и ввод.

объяснение

"Press any key to continue..." . cr \ Print message 
con:key                             \ Wait for key input from console  
bye                                 \ Quit program 

Только в Windows вы можете сохранить 3 байта, пропускаяcr
Chaos Manor

1

C #, 29 байт

class P{static void Main(){}}

Не уверен, если это считается действительным, потому что это печатает:

Нажмите любую клавишу для продолжения . , ,

Но есть пакетный ответ, который печатает это также.


1

Forth (gforth), 39 байтов

." Press any key to continue..."key bye

(Да, уже есть восьмое решение, но это короче)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.