Sua tarefa hoje é implementar um limite de tempo para obter informações, uma tarefa que achei bastante irritante de ser alcançada na maioria dos idiomas.
Você criará uma função de programa que solicita entrada ao usuário. Imediatamente após o usuário fornecer a entrada, imprima a mensagem input received
e finalize a execução / retorno. No entanto, se o usuário aguardar mais de 10 segundos para fornecer entrada, no input received
envie a mensagem e finalize a execução / retorno.
A entrada deve ser de stdin
(o console) ou equivalente, não os argumentos da função ou do programa; no entanto, a saída pode ser para stdout
, o valor de retorno da sua função ou qualquer outro método de saída aceito.
Você pode solicitar qualquer quantidade de entrada, pode ser um único caractere, uma linha, uma palavra ou qualquer método que seja mais curto no seu idioma, desde que espere pelo menos um caractere.
Você deve produzir assim que a entrada for recebida, não após os 10 segundos.
Após 10 segundos, você deve terminar, não poderá continuar aguardando a entrada após a no input received
impressão.
Você pode supor que a entrada não seja transmitida no tempo decorrido entre 10 segundos e o texto sendo impresso na tela, pois essa é uma janela extremamente pequena. Você também pode assumir que o equivalente interno do seu idioma sleep
é consistente e absolutamente perfeito.
Isso é código-golfe , o menor número de bytes vence!
sleep
funções equivalentes do seu idioma perfeitamente 100% do tempo.Respostas:
bash, 38 bytes
Isso usa a
-t
opção (timeout) no bashread
, o que faz com que ela falhe e retorne um código de saída diferente de zero se nenhuma entrada for fornecida no número especificado de segundos.fonte
Haskell,
9789 bytesSe o
timeout
tempo limite expirar, ele retornaráNothing
eJust Char
(Char
porque estamos usandogetChar
) o contrário. Este valor de retorno é convertido para"no "
ou""
por funçãomaybe "no " mempty
. Anexar"input received"
e imprimir.Edit: @BMO sugerido
maybe
e salvou alguns bytes.fonte
g
comlet
:let g Nothing="no ";g _=""
, em seguida, a chamada de funçãotimeout....
funciona bem para mim.g
pelomaybe"no "(pure"")
que for mais curto e até inline - economizando 6 bytes.mempty
em vez de(pure"")
é ainda mais curto.POSIX C99,
7163 bytesUngolfed:
Como
poll
retornará 1 em caso de sucesso, multiplicamos o resultado por 3 e alteramos a sequência de acordo. Em seguida, usamos o fato de questruct pollfd
possui o seguinte layout:e isto
STDIN_FILENO
é0
,POLLIN
é1
substituirpfd
porint pfd[] = {0,1}
, que finalmente transformamos um composto em lixo (conforme permitido por C99).fonte
poll.h
cabeçalho não faz parte do padrão de idioma C99.Applescript, 113
O Applescript realmente não lê o STDIN. Espero que um
display dialog
seja aceitável aqui:fonte
APL (Dyalog) ,
4140 bytesEsta é uma função tácita anônima que precisa de um argumento fictício para ser executada .
'no input received'
a sequência completa↓⍨
solte tantos caracteres na frente como o número retornado pelo{
função explícita anônima (⍵
denota o argumento)⎕RTL←10
definir R esposto T ime L imit a dez segundos3*⍨
elevar esse número (dez) ao poder de três (mil significa "todos")::
sobre essas exceções (todas),0
retornar 0⋄
experimentar:⍞
obter entrada3⊣
descartar isso e retornar 3}
fim da função (observe que o argumento⍵
nunca foi mencionado)fonte
Perl ,
7467 bytesVersão antiga
(Execute via perl -M5.10.1 ...)
fonte
\n
.-M5.10.1
. Você pode simplesmente substituir-e
por-E
. (se necessário-M5.10.1
, você teria que adicionar uma penalidade para a sua pontuação)\n
existe por causa dodie
comportamento: "Se o último elemento da LIST não terminar em uma nova linha, o número da linha de script atual e o número da linha de entrada (se houver) também serão impressos e uma nova linha será fornecida." Portanto, sem ele seria exibido "nenhuma entrada recebida na linha -e 1.". Mas é claro, poderia ser uma quebra de linha literal na string. Além disso, os espaços entredie
esay
e seus parâmetros não são necessários. O mesmo para a final;
. E<>
é o suficiente para ler da entrada padrão.eval
ler o STDIN, poderá evitar a necessidade de umadie
mensagem. Na verdade, um erro de execução funciona tão bem:$SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'
.Perl 6 ,
7266 bytesExperimente sem entrada
Experimente com entrada
Experimente sem entrada
Experimente com entrada
fonte
start
e{
?start
, então não..new
sobre eleC #,
180171148131 bytesEconomizou 17 bytes graças a @VisualMelon.
Versão completa / formatada:
fonte
namespace
e não umausing
diretiva?using
Thread.Join(int)
, (livrar dec
, chaves perder, etc. etc.):var t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";
(VB.NET já parece fazer isso)1e4
, mas que é umdouble
e que eu precisaria de umint
, então eu teria que fazer(int)1e4
:( Boa idéia emboraTI-BASIC,
8477 bytes-7 graças a @ kamoroso94
Aguarda até que um número seja pressionado.
Estou tentando descobrir como jogar golfe na sequência
{72,73,74,82,83,84,92,93,94}
. Está ocupando muito espaço.fonte
Repeat K or 10=checkTmr(T
seria necessário.:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
Shift
chave em um computador. Além disso, encurtar as últimas 4 linhas com seu método fornece a mesma contagem de bytes que a minha. Eu gosto do seu método, no entanto.or
repetir a instrução, use-o para -7 bytes:abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
NodeJS,
105103101 bytes-2 bytes graças a @apsillers
-2 bytes, movendo
console.log()
- se paraexit()
Execute salvando em um arquivo e executando-o com o nó ou execute-o diretamente da linha de comando, executando
node -e "<code>"
fonte
console.log()
chamada para o parâmetro deexit()
. São dois a menos agora.JavaScript (ES6) + HTML,
86848279 + 11 =97959390 bytesTente
Requer um fechamento
>
noinput
para trabalhar em um snippet.fonte
10
vez de1e4
?10
seria 10 milissegundos, o desafio do desafio diz especificamente 10 segundos , ou seja, 10000 milissegundos1e4
.10 != 1e4
porque eu sou um toloVB.net - 174 bytes
Versão COBOL disponível amanhã ;-)
fonte
:
. Isso requer o mesmo número de bytes que uma quebra de linha, diminuindo a legibilidade sem melhorar a pontuação do golfe.:
substituição de quebra de linha possa ser declarada em linha sem repetir - mas isso disse que não sou positivo, meu idioma principal é o VBA, que não suporta encadeamento ou leitura no console <strike> < / strike> asside janela imediata de no momento da definição de função ou chamar: PVá, 149 bytes
fonte
AHK ,
6765 bytes2 bytes salvos por Blauhirn
O AHK possui um tempo limite interno para caixas de entrada.
Tentei ser inteligente e usar em
!o
vez de,ErrorLevel
mas isso falhará se o usuário inserir um valor falsey.Quase metade da resposta são apenas os nomes dos comandos e o texto fixo.
fonte
Timeout
é quase o último parâmetro:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
s:=errorLevel?"no ":
Python3,
100898371 bytesPrimeira tentativa de golfe.
-4 por
any()
, -7 por fatia, obrigado @ user2357112!-6, vá
select()
empty
vez deselect
.fonte
"no input received"
string:"no input received"[3*bool(...):]
.any(...)
vez debool(...[0])
.pty
módulo está disponível apenas em plataformas Linux, mas eu o uso apenas porque seu nome é curto e estáselect
disponível. A versão 2 provavelmente funciona melhor no Windows.PowerShell, 110 bytes
fonte
Python 3, 158 bytes
Tentei executar a resposta Python 3 de Seth, mas no Windows ela lança
ModuleNotFoundError: No module named 'termios'
e, como não posso comentar sua resposta, decidi criar uma solução que deveria ser independente de plataforma.É a minha primeira vez jogando golfe, então tenho certeza de que poderia ser melhorado.
fonte
Tcl, 99 bytes
fonte
SmileBASIC 3, 74 bytes
"Aceita entrada", aguardando qualquer pressão no botão (que deve contar como entrada).
fonte
Raspadinha 2 / 3.x, 41 pontos ( Explicação )
1: Quando GF clicou
1: pergunte [] e aguarde
1 + 14 caracteres: diga [entrada recebida]
1: stop [all v] (nota: como "all" era a configuração padrão, contei o bloco como 1)
1 + 2 dígitos: espera (10) segundos
1 + 17 caracteres: diga [nenhuma entrada recebida]
1: parar [todos v]
fonte
> <> , 43 + 6 = 49 bytes
Experimente online!
+5 para o
-t.08
sinalizador, que define o tick para 0,08 segundos, e +1 para oa
sinalizador, que conta espaços em branco e instruções ignoradas como ticks.O programa verifica a entrada cerca de uma vez a cada segundo e sai do loop se a entrada for detectada. Se a entrada não for recebida, ela sai do loop da parte inferior, acrescentando
no
ao início da string. A inicial/
é garantir que a última verificação de entrada esteja exatamente na marca de 10 segundos.Em seguida, leva de 5 a 6 segundos para imprimir a própria string.
fonte
-at.08
para salvar um byte.Java 1.4 ou superior, 284 bytes
Ungolfed:
Por favor, não sugira melhorias Java específicas da versão; esta é uma resposta Java genérica que funciona em todos os ambientes Java atualmente estáveis (1.4 e acima).
Muito enlouquecido prolixo ... A captura é necessária, não pode ser lançada. A importação do sistema é cortada como 5 bytes ... A sobrecarga também é prolixo, por isso acaba com uma bagunça de aparência pobre.
fonte
10000L
e não10000
? Eu pensei que ints convertidos em longos automaticamente.Julia 0.6 , 78 bytes
Mais do que eu esperava. Veja os comentários para o link TIO "nenhuma entrada recebida".
Experimente online!
fonte
SmileBASIC,
7473 bytesLeva 1 caractere de entrada.
E uma solução de 39 bytes que provavelmente não é válida (na verdade não aceita entrada de texto, apenas possui um OK botão que você pode pressionar)
fonte