Escreva o programa mais curto que aguarde até que todas as teclas de um teclado americano com 101 teclas padrão * sejam pressionadas e saia da escrita OK!
Cada vez que uma tecla é pressionada, o programa exibe em uma nova linha o número restante de teclas exclusivas não pressionadas que precisam ser pressionadas até que todas as teclas sejam pressionadas pelo menos uma vez. O programa deve poder testar um teclado 101 e verificar se todas as teclas funcionam. Portanto, pressionar duas vezes uma tecla ou enter deve ser permitido, desde que isso seja especificado para o usuário.
Pressionar a mesma tecla duas ou mais vezes não deve interromper o código nem alterar o número exibido de teclas não pressionadas exibidas.
Todas as teclas ( Left Shift, Right Shift, Right Control, Esc, Enter, etc.) devem ser incluídos.
As teclas do teclado reais são importantes neste desafio de modo a partir da perspectiva do programa ( A
e a
, são os mesmos e por isso são 6
e ^
).
As teclas combinadas não serão registradas como um comando combinado e somente as teclas individuais serão registradas se Ctrl+ Alt+ Delfor pressionado, o que contará para todas as teclas individuais da combinação sendo pressionada. Portanto, não é necessário pressionar também as letras maiúsculas se você já pressionou as letras minúsculas e vice-versa.
As teclas numéricas no teclado numérico são diferentes da perspectiva do programa; portanto, ainda é necessário pressionar a tecla para que o programa termine, se você tiver um laptop ou qualquer outro teclado que não possua o layout de teclado US Standard 101 . não pode cumprir o desafio, a menos que você conecte um teclado compatível.
* Os teclados com as teclas Fn e laptop não serão suportados para manter esse desafio possível
Esta é a lista de teclas para um layout de teclado do US Standard 101:
backspace
tab
enter
right shift
right ctrl
right alt
left shift
left ctrl
left alt
print screen
pause/break
caps lock
escape
page up
page down
end
home
left arrow
up arrow
right arrow
down arrow
insert
delete
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
numpad 0
numpad 1
numpad 2
numpad 3
numpad 4
numpad 5
numpad 6
numpad 7
numpad 8
numpad 9
multiply
add
subtract
decimal point
numpad enter
divide
f1
f2
f3
f4
f5
f6
f7
f8
f9
f10
f11
f12
num lock
scroll lock
semi-colon
equal sign
comma
dash
period
forward slash
grave accent
open bracket
back slash
close braket
single quote
space
fonte
Respostas:
Javascript, 524 bytes
Olá, este é o meu primeiro post aqui, desculpe-me se ainda sou ignorante em algumas coisas, acho que fiquei dentro das regras.
Parece incorreto se eu não usar o Chrome, mas você pode experimentá-lo aqui . (abra o console antes de focar na janela de exemplo, pois a funcionalidade padrão do F12 é impedida)
Visão geral
O programa cria uma matriz de todos os 101 "códigos-chave". Alguns são escritos explicitamente, algumas sequências são adicionadas com um loop for e outras são armazenadas como strings. Eu tenho uma matriz separada para os códigos de tecla "duplos", pois o controle esquerdo e direito, por exemplo, fornece o mesmo código de chave. No entanto, eles também fornecem um local, então eu combino os códigos-chave com os locais como cadeias de caracteres na matriz. A partir daí, é apenas um listener de eventos que impede a funcionalidade padrão de pressionamento de tecla (nesse caso, não é necessário atualizar com F5) e um listener de eventos separado para keyup, porque todas as chaves podem ser detectadas no pressionamento de tecla, EXCETO PARA IMPRESSORA.
Após cada evento de keyup, as chaves restantes (também conhecidas como o comprimento da matriz) são registradas, bem como o nome do código da chave (para que haja a distinção entre turno esquerdo e direito, etc). Eu não tinha certeza se isso era um requisito; caso contrário, você pode subtrair outros 10 bytes da pontuação.
Limitações
Espero que esta resposta seja apreciada e informe-me se fiz algo errado.
fonte
Java 8, 607 + 64 = 671 bytes
Este é um lambda que pega um parâmetro não utilizado e lança
InterruptedException
. Ele abre uma janela que, quando em foco, intercepta o pressionamento das 101 teclas padrão. A contagem de bytes inclui lambda e importações necessárias.Você pode encontrar uma classe de teste com uma versão não destruída aqui .
Visão geral
À medida que as teclas são pressionadas, os valores que as identificam exclusivamente (na maioria dos casos, o código da tecla) são armazenados em um conjunto. Os primeiros níveis da atribuição ternária para
c
lidar com casos em que o código da tecla é ambíguo (por exemplo, a tecla "Home", que pode vir da parte principal do teclado ou do teclado numérico) e casos em que a mesma tecla pode mapear para vários códigos de teclas (por exemplo, comportamento do teclado numérico com Num Lock ativado ou desativado). A ramificação final lida com as chaves "normais" cujo código de chave pode ser simplesmente usado no conjunto. O código da chave é indexado no bitmapl
que indica se a chave é uma das 101 padrão.Limitações
Se qualquer tecla diferente da 101 padrão for pressionada, um rastreamento de pilha pode ser impresso com erro padrão ou comportamento inesperado.
O programa usa os valores numéricos das constantes do código-chave diretamente e a
KeyEvent
documentação da Oracle indica que esses valores podem mudar com o tempo.Agradecimentos
fonte
f.setVisible(1>0);
pode ser jogado,f.show();
e()->
pode ser jogadov->
usando umVoid null
parâmetro não utilizado .JavaScript,
989075 bytesEntão ... eu suspeito que posso estar pensando mal aqui, mas isso deve funcionar. Deixe-me saber se eu ter esquecido nada. Testado apenas no Chrome.
Tente
alert
substituído por sua sanidade e ordem revertida para salvar a rolagem.fonte