pressione qualquer tecla para continuar


36

Sua tarefa é criar um programa que irá exibir o seguinte texto, espera que o usuário pressione uma tecla (que é bom para ignorar teclas como ctrl, alt, caps lock, etc., desde que teclas como letters, numbers, symbols, e enternão são ignorados), e, em seguida, encerre o programa:

Press any key to continue... 

Novas linhas à direita são permitidas. O programa deve sair imediatamente após pressionar uma tecla. Além disso, o programa deve ser razoavelmente portátil (ou seja, sem cabeçalhos ou módulos específicos do SO, executado fora de um IDE, etc.).


O prompt deve ser exatamente como mostrado acima, a menos que uma nova linha à direita não possa ser evitada.


Isso é , então a resposta mais curta em bytes vence. Esta também é minha primeira pergunta sobre código-golfe, então peço desculpas se não conheço as regras do PPCG.


4
O texto de saída diferencia maiúsculas de minúsculas? O WinBatch PAUSEseria uma resposta válida (reticências são distribuídas de ...para . . .)?
FlipTack

13
Também sugiro espera por uma semana ou 2 antes de aceitar qualquer resposta
Kritixi Lithos

3
A maioria das pausefunções do idioma é provavelmente insensível a teclas como Caps-Lock ou Control (pressionadas por si só). Talvez você deve esclarecer se o programa é permitido não notar essas chaves
Luis Mendo

15
Você deve esperar por algumas semanas antes de aceitar uma resposta, como muitos outros têm aconselhado (ainda que você tenha escolhido a ignorar seus conselhos)
FlipTack

12
@JungHwanMin Eu concordo com os outros. Por favor, aguarde para aceitar uma solução até que as entradas
parem de aparecer

Respostas:


5

SmallBasic, 18 17 bytes

  • Versão 2.0

17 bytes

TextWindow.Show()
  • Versão 1.0

18 bytes

TextWindow.Pause()

3
Você não poderia apenas fazer TextWindow.Show()? Com base neste site, deve ter o mesmo efeito.
Suever

20

Lote, 46 bytes

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

Porque pausea saída contém um espaço antes de cada um ..


5
Bom redirecionamento. Você também pode enviar a saída para, digamos x,? Em seguida, xseria criado um arquivo que contém o texto Press any key to continue . . .. Economiza 2 bytes, mas não tenho certeza se isso vai contra esse desafio ou quaisquer brechas padrão.
precisa saber é o seguinte

Estou no sistema livre de choice.exe há algum tempo, mas tenho a sensação de que @choice /n /m Press any key to continue...também era possível algumas décadas atrás.
manatwork

A opção tem valores padrão como J e N; portanto, o programa só continuaria quando J ou N forem pressionados se eu me lembrar corretamente.
geisterfurz007 Pare com este caos

@ geisterfurz007 Além disso, o valor padrão é localizado. Por exemplo, para mim choiceé equivalente a choice /c SN(para sim(sim) e não(não) em português).
Ismael Miguel

Ah, você está certo, @ geisterfurz007. Agora me lembro da aparência boba de meus arquivos em lotes, com o alfabeto inteiro enumerado. Ok, então isso foi uma idéia morta.
manatwork

15

HTML + JavaScript (ES6), 36 + 25 = 61 bytes

Você realmente não pode sair de um programa JavaScript, portanto, limpar a página da Web é o melhor que consigo pensar.

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


HTML + JavaScript (ES6), 33 + 28 = 61 bytes

Solução alternativa sugerida por @LarsW que redireciona para about:blank.

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


HTML / JavaScript, 60 bytes

Outra solução incrível de @Ismael Miguel que não usa JS autônomo. 1 byte salvo!

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


HTML + JavaScript (ES6), 26 + 28 = 54 bytes

Outra solução de @George Reith, usando gravações de documentos.

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

HTML + JavaScript (ES7), 23 + 28 = 51 bytes

Mesmo programa usando o operador de ligação ES7 proposto :

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


Como a maioria dessas soluções não é minha, faça uma cortesia e vote-as nos comentários!


10
36 + 25 é 61 ou estou faltando alguma coisa?

2
@LarsW, ckjbgames Bem, quais são as chances? Você nunca sabe até escrever! ;)
darrylyeo 23/01

2
<html onkeyup=this.innerHTML=''>Press any key to continue...<- 60 bytes. Experimente-o em jsfiddle.net/xhb69401 (que funciona tanto com <html>e <body>)
Ismael Miguel

2
Maneira mais curta de limpar o documento e não precisa de ancoragem. onkeyup=_=>document.open()com Press any key to continue...um total geral de 54 bytes.
George Reith

2
Também com o operador de ligação proposto es-next, ele pode ser reduzido para onkeyup=::document.open.
George Reith

14

MATL, 35 bytes

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

Explicação

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

@LuisMendo Ah boa captura
Suever

2
Por outro lado, Y.também não. Talvez o OP deva esclarecer. Teclas como Controle e Caps-lock irá falhar na maioria das soluções
Luis Mendo

1
@LuisMendo Não há problema em perder teclas de controle, caps lock etc.
ckjbgames

@LuisMendo Sua modificação não exigiria uma tecla enter? Ou talvez eu estou mis lembrando-it
Suever

@ Suever Oh, claro! É necessário entrar
Luis Mendo

11

TI-Basic, 55 bytes

Basicamente, ele volta até que uma tecla seja pressionada. Letras minúsculas muito ruins são dois bytes cada no TI-Basic ...

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

PS Veja o comentário de @GoldenRatio para obter uma explicação de como isso funciona. É genial!


Antes de tudo, sua contagem de bytes está desativada no momento, na verdade são 55 bytes (acabamos de criar um programa na TI-84 + e testado). Segundo, isso tecnicamente não é válido, porque não exibe Pressione nenhuma tecla para continuar ... e, em vez disso, corta para 15 caracteres mais ... Em vez disso, preservando a contagem de bytes, faça dois comandos disp. :Disp "Press any(não se esqueça: no seu código, conta) e Disp "key to continuesin((O pecado força um ... em 1 byte para compensar a nova linha e disp, e isso economiza um espaço entre qualquer tecla e)
Golden Ratio

Bata-me para isso, primeira língua em que pensei.
C Anderson

Obrigado pela dica @GoldenRatio, acho que estava pensando em getKey2 bytes quando na verdade é 1. Suponho que com Text(ou Output(você poderia ajustar tudo em uma linha. Mas, sua sugestão é melhor. Não pensei em usar as reticências implícitas no final de uma linha. Mais uma vez obrigado, vou editar isso agora.
Timtech

Obrigado por atualizá-lo, e acho que o uso de disp com uma vírgula finalmente tem um bom motivo, já que nunca salvou bytes. Eu costumo colocá-los em linhas separadas por causa da minha tendência de apertar o botão claro: D. Além disso, existe algum método oficial de como pontuar o tamanho? Por isso, quero dizer, os 9 bytes que não contei para o nome de um programa contam? E o 1 byte para os dois pontos de início que não podem ser excluídos conta? Marquei isso como 0 bytes, porque, para encontrar espaço, estou acostumado a subtrair 10 para o tamanho do programa, mas talvez os dois pontos devam contar.
Proporção áurea

Não, basicamente, se você criar um programa completamente vazio, ele conta com 0 bytes, então você começa a partir daí. Seria como contar o nome do arquivo de um arquivo de origem. Além disso, os dois pontos iniciais são apenas para exibição e não fazem parte do programa. De fato, toda nova linha mostra automaticamente dois pontos no editor da calculadora, mas, novamente, estes são apenas para exibição (tente o código fonte cemetech para entender o que quero dizer). Por fim, o número de bytes é o mesmo, independentemente de dividirmos as Dispduas linhas ou não (mas nem sempre é assim).
Timtech 25/01

8

Bash, 46 43 42 bytes

Guardado 1 byte graças a @DigitalTrauma

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

Usa o readbuilt-in. -rgarante que ele não permita que o usuário introduza escapes. -n 1permite apenas um caractere. -pé o prompt


Não continua até que eu acerte um <cr>
Glenn Randers-Pehrson

@ GlennRanders-Pehrson Acredito que isso pode acontecer se o seu bash não suportar -n 1. Ele funciona sem bater entrar para mim no entanto (v3.2.57) e na minha máquina DEBAIN (v4.3.30)
Downgoat

Também não funciona se eu digitar um aspas ( ")
Glenn Randers-Pehrson

1
Funciona bem se eu colocar a linha em um arquivo (anykey.sh) e executar isso. Funciona bem também, mesmo se eu remover o espaço entre "-rn" e "1".
Glenn Randers-Pehrson

1
-rn1salva 1 byte
Digital Trauma


5

Oitava / MATLAB, 42 bytes

disp('Press any key to continue...');pause

I upvoted esta resposta há um mês, assumindo que era óptimo ... Mas você foi outgolfed :)
Stewie Griffin

4

QBasic ( QB64 ), 37 (42?) Bytes

Infelizmente, o prompt de final de programa interno do QBasic não possui reticências, portanto, nós mesmos devemos imprimi-lo:

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

( SLEEPsem um argumento, aguarde até pressionar uma tecla.)

Esse código faz o que a pergunta literalmente pede, mas não parece se encaixar no espírito da pergunta, porque, é claro, o QBasic exibe "Pressione qualquer tecla para continuar" e aguarda um pressionamento de tecla antes de retornar ao IDE. Aqui está um que vai direto para o IDE, com +5 bytes:

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

STOPé uma instrução de depuração. No QBasic regular, ele define um ponto de interrupção: a execução é interrompida e retornamos ao IDE, mas a execução pode ser retomada novamente com F5. Não está claro se isso contaria como o programa "saindo". No entanto, estou usando o emulador QB64, que não pode fazer pontos de interrupção. Ao encontrar STOP, ele simplesmente pára - retornando diretamente ao IDE sem a mensagem redundante "Pressione qualquer tecla".


Curiosamente, o 'Pressione qualquer tecla para continuar' também aparece ao executar um QB64 exe independente. Eu tentei usar LOCATEapenas para imprimir os pontos depois dele, mas o QBasic limpa toda a linha inferior quando imprime esta mensagem ... #
23417

4

Processando, 89 81 bytes

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

Explicação

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

Isso é necessário, pois estou usando mais de uma função no meu programa. Qualquer coisa dentro setup()é chamada, neste caso, a string "Press any key to continue...".

if(key>0)exit();

Verifica se key( keysempre conterá o valor int da última tecla pressionada) é maior que 0(ou seja, não é um byte nulo). Se a condição for atendida, o programa será encerrado.

void draw(){}

draw() garante que o programa sempre procure uma chave em vez de parar quando o programa for iniciado.

(Essa sensação quando um builtin em uma linguagem semelhante a Java ainda é detalhada ...)


Realmente não sei Processing, mas acho que você deve ser capaz de substituir void steup(){...}por #static{...}
Pavel

2
@Pavel Não, não funciona
Kritixi Lithos

4

Pascal, 75 65 bytes

Isso foi testado com o Free Pascal Compiler, versão 3.0.0.
Pode funcionar com o TurboPascal 7 ou mais recente.

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

Sadly, I can't replace readkey with readln since the challenge requires that any key be accepted.


I've tested this code on http://rextester.com/l/pascal_online_compiler, with and without supplying an input.
As expected, the program is terminated after 10s, since it sits waiting for a keypress that never happens.


Thanks to @manatwork for saving me 10 bytes by proving me wrong, and showing that I don't need the program _;.


Neither FreePascal nor TurboPascal requires the use of program keyword. (Actually I never met such ancient implementation that did.)
manatwork

@manatwork I tried it without program and it complained. Also, I sometimes use TurboPascal. That one requires (notice: requires) the program there. If you know any place I can test where it runs without the program, I will remove it. I hate having it there. And that uses Crt;.
Ismael Miguel

1
I don't get you. It works fine including the rextester service you linked. In my command line: pastebin.com/pVr9dqxd
manatwork

@manatwork You're right. I know why it complained: I wrote program; instead of actually removing that bit. Thanks for alerting me to that.
Ismael Miguel

4

Scratch, 81 bytes

image

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

(Scratchblocks link)

If you wanted it to stop the entire program when you pressed a key (including other threads) you'd have to add a stop all. If you want to get rid of the say dialog you need an empty say block (stop all works as well).

Convenient that Scratch has a builtin for this!


4

Bash 48 44 42 bytes

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

@mame98 Thanks for saving 4 bytes.

@RaisingAgent Thanks for saving 2 bytes.


You can improve this by adding up the flags, like read -srn1 -p".." and remove the last space in the promt quote. Also, I'm not sure if you need the 's' flag
mame98

1
remove the last space in the quotes _ & -s
RaisingAgent

@RaisingAgent Thanks, updated :)
Abel Tom

3

R, 56 bytes

cat('Press any key to continue...');keypress::keypress()

This works in Linux and OSX terminals.


3

Ruby (2.3) (+ Batch), 52 55 54 53 46 bytes

Now 46 bytes thanks to Alexis Andersen.

Note: Tested on Windows, might not work if there is no pause command.

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

Explanation

Puts the required text:

puts"Press any key to continue..."

End the line:

;

Run the Batch pause command and pipe output to nul:

`pause>nul`

Hello, welcome to PPCG. I see that you have a list of edits in the body of your submission. While this may be customary on other sites, since anyone can see the edit history of a post, we generally leave the history of the post out of the body (aside from the strike throughs for byte counts). This seems like a good first golf and I hope you have fun here.
Wheat Wizard

@WheatWizard Thanks, should I leave the edits there or remove them?
notme1560

1
I think that it makes for a much more readable answer if you remove them and I would personally recommend doing so.
Wheat Wizard

you can shorten that by replacing system with backticks: ` pause>nul ` or even shorter, just use gets (also, there's no good way to include a backtick in a code block in a comment)
Alexis Andersen

@AlexisAndersen doesn't gets wait for enter, and not just any key?
notme1560

3

Java, 127 bytes

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

Note: the console must be set to raw mode in order for this to work.


Then I'm afraid your code should set the console so, like original.legin's Perl solution does.
manatwork

@manatwork Also, the program must be fairly portable (i.e no OS-specific headers or modules, runs outside of an IDE, etc.) if you follow that SO link there is no OS-independent way to do this. Meaning, the answer you linked is equally as valid as this one.

3

SmileBASIC, 52 bytes

?"Press any key to continue...
WHILE""==INKEY$()WEND

3

Python 2, 110 bytes

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 bytes

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

Explanation

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 bytes

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

Explained:

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

WHILE""==INKEY$()WEND is smaller
12Me21

2

Python 2/3 POSIX, 85 bytes

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

2

Python 3, 65 bytes

Requires the Windows version of Python.

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

msvcrt.getch() doesn't wait for the enter key to be pressed like input(), it returns the first key pressed.

Python Docs for msvcrt.getch(): https://docs.python.org/3/library/msvcrt.html#msvcrt.getch

Thanks to @Fliptack for saving some bytes


This answer is invalid without an import msvcrt somewhere
FlipTack

2
As this is code-golf you should remove the comments from your code. Also, using from msvcrt import* appears to be 1 byte shorter
FlipTack

cool, thx @FlitTack
Zachary Smith

2

Node.js, 102 101 99 bytes

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

Not much gain, just 1 character shorter with with: pastebin.com/BhrAyq2K
manatwork

@manatwork Nice one! First time with has saved me bytes (or byte)
George Reith

1
Now you can remove the curly brackets and replace line breaks with commas for 2 more bytes.
darrylyeo

Also if I'm not mistaken, stdout.write`Press any key to continue...` will save 2 bytes in ES6.
darrylyeo

@darrylyeo Commas work thats awesome thanks! Unfortunately a tagged template literal can't be used here as it actually passes in an array and process.stdout.write doesn't do implicit conversions to string (it just errors).
George Reith

2

Sinclair ZX81/Timex TS1000 BASIC: Method 1 approximately 41 bytes

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

Method 2 approximately 38 BYTES

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

I prefer method 1 as on the ZX81, there is a screen flicker when PAUSE is called, and if you want long enough (providing the ZX81 doesn't overheat or crash) the pause will eventually come to an end, whereas method 1 is stuck in an infinite loop until a key is pressed, and no screen flicker.

I'll work out the correct number of bytes used later when I have the right bit of BASIC that will tell me. By the way, using VAL "x" instead of the number saves valuable RAM on a ZX81 (I think that this is the same for the ZX Spectrum as well).


Both methods will work on the Sinclair ZX Spectrum as well, the advantage being that the Spectrum has upper and lower case letters, whereas the ZX81 does not by default (and doesn't have a single quote either as a standard character).
Shaun Bebbers

Method 2 on the Sinclair ZX Spectrum could be condensed to 1 PRINT "Press any key to continue...": PAUSE 4e4
Shaun Bebbers

1
PAUSE 0 pauses for ever.
Neil

Yes I've not programmed in Sinclair Spectrum BASIC for so long that I forgot about that. PAUSE 0 in ZX81 BASIC does not pause forever.
Shaun Bebbers

1

Perl 5, 79 bytes

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

used as:

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

No prizes of course. I'm sure some perl person will have a better way.

(89 bytes if the interpreter invocation as well needs to be included in the count)


@Pavel, he counted system in his bytecount, so I don't know what you meant with that comment.
Dada

1
@original.legin I think Perl won't do much better than this. A few bytes you can golf still: $|=1 isn't necessary, you have a space after print, you can drop the parenthesis around the arguments of read, you can use backticks instead of system, and finally, print returns 1, so you can use it instead of the litteral 1 in the call to read. So in the end, we get: perl -e '`stty cbreak`;read STDIN,$a,print"Press any key to continue..."'
Dada

@Dada You can also shave off 2 bytes with say, although I think this approach fails the "portable" requirement. The best portable solution I can find is perl -MTerm::ReadKey -E'say"Press any key to continue...";ReadMode 3;ReadKey' (52 bytes + 16 bytes for -MTerm::ReadKey<space>). Be careful, this will screw up your terminal unless you restore the read mode at the end with ReadMode 1.
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot Indeed, I didn't see that requirement about portability. About say, I tend not to use it anymore (I agree mostly with this meta post). Now back to a short code, IO::Prompt will be shorter than Term::ReadKey (40 + 13 = 53 bytes) : perl -MIO::Prompt -e 'prompt"Press any key to continue... ",-1'. And as it happens, it's even shorter than what I suggested in my previous comment.
Dada

1
@Dada I can see both sides of the -E argument. The last time I checked, though, J B's answer had been uncontested for four years, so that's what I've followed. Maybe I need to revisit it again. As for IO::Prompt, good find! Although it doesn't work on my Strawberry 5.20.2 on Windows, while Term::ReadKey does.
ThisSuitIsBlackNot

1

PHP, 73 bytes

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

Run it in the PHP interactive shell (php -a)


“The program must exit immediately after a key is pressed.” – This waits until Enter or blackout…
manatwork

1

C#, 101 bytes

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

Tested on Linux, should run on any system having the .NET libraries and the Common Language Runtime.

Ungolfed program:

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 are ignored. The pressed key will be echoed on screen if printable.

Echo can be disabled by replacing C.Read() with C.ReadKey(0<1) at the cost of 6 more bytes.


1

8th, 47 bytes

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

This program ignores keys like ctrl, alt, caps lock. Quits with keys like letters, numbers, symbols, and enter.

Explanation

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

On Windows only you can save 3 bytes omitting cr
Chaos Manor

1

C#, 29 bytes

class P{static void Main(){}}

Not sure if this is considered valid because it prints:

Press any key to continue . . .

But there is a Batch answer that prints this as well.


1

Forth (gforth), 39 bytes

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

(Yes, there is already an 8th solution but this is shorter)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.