Напишите самую короткую программу, которая ожидает нажатия каждой клавиши стандартной 101-клавишной клавиатуры США * и затем завершает запись OK!
Каждый раз, когда нажимается клавиша, программа отображает в новой строке оставшееся количество не нажатых уникальных клавиш, которые нужно нажимать, пока все клавиши не будут нажаты хотя бы один раз. Программа должна быть в состоянии протестировать клавиатуру 101 и посмотреть, работает ли каждая клавиша. Таким образом, двойное нажатие клавиши или ввода должно быть разрешено, если это указано пользователем.
Нажатие одной и той же клавиши дважды или более не должно нарушать код или изменять отображаемое количество оставшихся нажатых клавиш.
Все ключи ( Left Shift, Right Shift, Right Control, Esc, Enterи т.д.) должны быть включены.
Фактические клавиши клавиатуры важны в этой задаче, поэтому с точки зрения программы ( A
и a
такие же, и такие же 6
и ^
).
Комбинированные клавиши не будут зарегистрированы в качестве комбинированной команды, и только отдельные клавиши будут зарегистрированы, если нажата Ctrl+ Alt+, Delчто будет учитываться для всех отдельных клавиш в комбинации. Поэтому не нужно нажимать также заглавные буквы, если вы уже нажали строчные буквы и наоборот.
Цифровые клавиши на цифровой клавиатуре отличаются с точки зрения программы, так что они по - прежнему необходимо нажать на программу до конца, если у вас есть ноутбук или любой другой клавиатуры , которая не имеет стандарт США 101 раскладка клавиатуры вас не может выполнить задачу, если вы не подключите совместимую клавиатуру.
* Клавиатуры с клавишей Fn и клавишей ноутбука не поддерживаются, чтобы выполнить эту задачу
Это список клавиш для раскладки клавиатуры стандарта США 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
источник
Ответы:
Javascript, 524 байта
Привет, это мой первый пост здесь, так что извините, если я до сих пор ничего не знаю, хотя я думаю, что я остался в рамках правил.
Кажется, глючит, если я не использую Chrome, но вы можете попробовать это здесь . (обязательно откройте консоль, прежде чем сфокусироваться на окне примера, так как функциональность по умолчанию для F12 запрещена)
обзор
Программа создает массив из всех 101 "кодов клавиш". Некоторые написаны явно, некоторые последовательности добавляются с циклом for, а некоторые хранятся в виде строк. У меня есть отдельный массив для «двойных» кодов клавиш, поскольку левый и правый элементы управления, например, дают одинаковый код клавиши. Однако они также дают местоположение, поэтому я комбинирую коды клавиш с расположениями в виде строк в массиве. Оттуда это просто EventListener, который предотвращает функциональность keydown по умолчанию (в этом случае не нужно обновлять с помощью F5) и отдельный EventListener для Keyup, потому что каждый ключ может быть обнаружен при keydown, ЗА ИСКЛЮЧЕНИЕМ ДЛЯ PRINTSCREEN.
После каждого события keyup регистрируются оставшиеся ключи (то есть длина массива), а также имя кода ключа (таким образом, существует различие между левым и правым смещением и т. Д.). Я не был уверен, требовалось ли это, если нет, вы можете вычесть еще 10 байтов из результата.
Ограничения
Я надеюсь, что этот ответ приветствуется, и, пожалуйста, дайте мне знать, если я сделал что-то не так.
источник
Java 8, 607 + 64 = 671 байт
Это лямбда, принимающая неиспользуемый параметр и выбрасывающая
InterruptedException
. Он запускает окно, которое, будучи в фокусе, перехватывает нажатия 101 стандартной клавиши. Количество байтов включает в себя лямбда и необходимый импорт.Вы можете найти тестовый класс с негольфированной версией здесь .
обзор
При нажатии клавиш значения, однозначно идентифицирующие их (в большинстве случаев код клавиши), сохраняются в наборе. Первые несколько уровней троичного назначения для
c
обработки случаев, когда код клавиши неоднозначен (например, клавиша «Домой», которая может исходить из основной части клавиатуры или цифровой клавиатуры), и случаев, когда одна и та же клавиша может отображаться на несколько коды клавиш (например, поведение цифровой клавиатуры при включенной или выключенной Num Lock). Последняя ветвь обрабатывает «нормальные» ключи, код ключа которых можно просто использовать в наборе. Код ключа индексируется в битовой карте,l
которая указывает, является ли ключ одним из стандартных 101.Ограничения
Если нажата какая-либо клавиша, отличная от стандартной 101, трассировка стека может быть напечатана со стандартной ошибкой или может возникнуть непредвиденное поведение.
Программа напрямую использует числовые значения кодовых констант кода, и
KeyEvent
документация Oracle указывает, что эти значения могут изменяться со временем.Подтверждения
источник
f.setVisible(1>0);
может быть golfed , чтобыf.show();
и()->
может быть golfed сv->
помощью неиспользуемогоVoid null
параметра .JavaScript,
989075 байтТак что ... я подозреваю, что я здесь думаю о чем-то, но это должно сработать. Дайте мне знать, если я что-то упустил. Проверено только в Chrome.
Попытайся
alert
переопределено для вашего здравомыслия и порядок, чтобы сохранить прокрутку.источник