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 enter
nã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 é código-golfe , 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.
PAUSE
seria uma resposta válida (reticências são distribuídas de...
para. . .
)?pause
funçõ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 chavesRespostas:
SmallBasic,
1817 bytes17 bytes
18 bytes
fonte
TextWindow.Show()
? Com base neste site, deve ter o mesmo efeito.Lote, 46 bytes
Porque
pause
a saída contém um espaço antes de cada um.
.fonte
x
,? Em seguida,x
seria criado um arquivo que contém o textoPress any key to continue . . .
. Economiza 2 bytes, mas não tenho certeza se isso vai contra esse desafio ou quaisquer brechas padrão.@choice /n /m Press any key to continue...
também era possível algumas décadas atrás.choice
é equivalente achoice /c SN
(parasim
(sim) enão
(não) em português).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.
HTML + JavaScript (ES6), 33 + 28 = 61 bytes
Solução alternativa sugerida por @LarsW que redireciona para
about:blank
.HTML / JavaScript, 60 bytes
Outra solução incrível de @Ismael Miguel que não usa JS autônomo. 1 byte salvo!
HTML + JavaScript (ES6), 26 + 28 = 54 bytes
Outra solução de @George Reith, usando gravações de documentos.
HTML + JavaScript (ES7), 23 + 28 = 51 bytes
Mesmo programa usando o operador de ligação ES7 proposto :
Como a maioria dessas soluções não é minha, faça uma cortesia e vote-as nos comentários!
fonte
<html onkeyup=this.innerHTML=''>Press any key to continue...
<- 60 bytes. Experimente-o em jsfiddle.net/xhb69401 (que funciona tanto com<html>
e<body>
)onkeyup=_=>document.open()
comPress any key to continue...
um total geral de 54 bytes.onkeyup=::document.open
.MATL, 35 bytes
Explicação
fonte
Y.
também não. Talvez o OP deva esclarecer. Teclas como Controle e Caps-lock irá falhar na maioria das soluçõesTI-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 ...
PS Veja o comentário de @GoldenRatio para obter uma explicação de como isso funciona. É genial!
fonte
:Disp "Press any
(não se esqueça: no seu código, conta) eDisp "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)getKey
2 bytes quando na verdade é 1. Suponho que comText(
ouOutput(
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.Disp
duas linhas ou não (mas nem sempre é assim).Bash,
464342 bytesGuardado 1 byte graças a @DigitalTrauma
Usa o
read
built-in.-r
garante que ele não permita que o usuário introduza escapes.-n 1
permite apenas um caractere.-p
é o promptfonte
-n 1
. Ele funciona sem bater entrar para mim no entanto (v3.2.57) e na minha máquina DEBAIN (v4.3.30)-rn1
salva 1 byteHaskell ,
5150 bytes (Obrigado @ villou24)Experimente online!
fonte
getChar
lugar.putStr
e a sequência.Oitava / MATLAB, 42 bytes
fonte
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:
(
SLEEP
sem 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:
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 encontrarSTOP
, ele simplesmente pára - retornando diretamente ao IDE sem a mensagem redundante "Pressione qualquer tecla".fonte
LOCATE
apenas para imprimir os pontos depois dele, mas o QBasic limpa toda a linha inferior quando imprime esta mensagem ... #Processando,
8981 bytesExplicação
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..."
.Verifica se
key
(key
sempre conterá o valor int da última tecla pressionada) é maior que0
(ou seja, não é um byte nulo). Se a condição for atendida, o programa será encerrado.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 ...)
fonte
void steup(){...}
por #static{...}
Pascal,
7565 bytesIsso foi testado com o Free Pascal Compiler, versão 3.0.0.
Pode funcionar com o TurboPascal 7 ou mais recente.
Sadly, I can't replace
readkey
withreadln
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 _;
.fonte
program
keyword. (Actually I never met such ancient implementation that did.)program
and it complained. Also, I sometimes use TurboPascal. That one requires (notice: requires) theprogram
there. If you know any place I can test where it runs without theprogram
, I will remove it. I hate having it there. And thatuses Crt;
.program;
instead of actually removing that bit. Thanks for alerting me to that.Scratch, 81 bytes
(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 emptysay
block (stop all
works as well).Convenient that Scratch has a builtin for this!
fonte
Bash
484442 bytes@mame98 Thanks for saving 4 bytes.
@RaisingAgent Thanks for saving 2 bytes.
fonte
read -srn1 -p".."
and remove the last space in the promt quote. Also, I'm not sure if you need the 's' flag_
&-s
R, 56 bytes
This works in Linux and OSX terminals.
fonte
Ruby (2.3) (+ Batch),
5255545346 bytesNow 46 bytes thanks to Alexis Andersen.
Note: Tested on Windows, might not work if there is no
pause
command.Explanation
Puts
the required text:End the line:
Run the Batch
pause
command and pipe output tonul
:fonte
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)gets
wait for enter, and not just any key?Java, 127 bytes
Note: the console must be set to raw mode in order for this to work.
fonte
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.SmileBASIC, 52 bytes
fonte
Python 2, 110 bytes
fonte
Mathematica, 62 bytes
Explanation
fonte
SmileBASIC, 55 bytes
Explained:
fonte
WHILE""==INKEY$()WEND
is smallerPython 2/3 POSIX, 85 bytes
fonte
Python 3, 65 bytes
Requires the Windows version of Python.
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
fonte
import msvcrt
somewherefrom msvcrt import*
appears to be 1 byte shorterNode.js,
10210199 bytesfonte
with
: pastebin.com/BhrAyq2Kwith
has saved me bytes (or byte)stdout.write`Press any key to continue...`
will save 2 bytes in ES6.process.stdout.write
doesn't do implicit conversions to string (it just errors).Sinclair ZX81/Timex TS1000 BASIC: Method 1 approximately 41 bytes
Method 2 approximately 38 BYTES
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).
fonte
1 PRINT "Press any key to continue...": PAUSE 4e4
PAUSE 0
pauses for ever.PAUSE 0
in ZX81 BASIC does not pause forever.Perl 5, 79 bytes
used as:
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)
fonte
system
in his bytecount, so I don't know what you meant with that comment.$|=1
isn't necessary, you have a space afterprint
, you can drop the parenthesis around the arguments ofread
, you can use backticks instead of system, and finally,print
returns 1, so you can use it instead of the litteral1
in the call toread
. So in the end, we get:perl -e '`stty cbreak`;read STDIN,$a,print"Press any key to continue..."'
say
, although I think this approach fails the "portable" requirement. The best portable solution I can find isperl -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 withReadMode 1
.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 thanTerm::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.-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.PHP, 73 bytes
Run it in the PHP interactive shell (
php -a
)fonte
C#, 101 bytes
Tested on Linux, should run on any system having the .NET libraries and the Common Language Runtime.
Ungolfed program:
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.
fonte
8th, 47 bytes
This program ignores keys like ctrl, alt, caps lock. Quits with keys like letters, numbers, symbols, and enter.
Explanation
fonte
cr
C#, 29 bytes
Not sure if this is considered valid because it prints:
But there is a Batch answer that prints this as well.
fonte
Forth (gforth), 39 bytes
(Yes, there is already an 8th solution but this is shorter)
fonte