Napisz najkrótszy program, który czeka na każdym kluczu o standard 101 klucz amerykańskiej klawiaturze * być wciśnięty, a następnie kończy pisanie OK!
Za każdym naciśnięciem klawisza program wyświetla w nowym wierszu pozostałą liczbę niespakowanych unikalnych klawiszy, które należy nacisnąć, aż wszystkie klawisze zostaną naciśnięte przynajmniej raz. Program powinien być w stanie przetestować klawiaturę 101 i sprawdzić, czy każdy klawisz działa. Tak więc dwukrotne naciśnięcie klawisza lub enter powinno być dozwolone, o ile jest to określone dla użytkownika.
Dwukrotne naciśnięcie tego samego klawisza nie powinno zakłócać kodu ani zmieniać wyświetlanej liczby pozostałych nie naciśniętych klawiszy.
Wszystkie klucze ( Left Shift, Right Shift, Right Control, Esc, Enter, itd.) Powinny być uwzględnione.
Rzeczywiste klawisze klawiatury są ważne w tym wyzwaniu, więc z perspektywy programu ( A
i a
są takie same, a więc 6
i ^
).
Połączone klawisze nie zostaną zarejestrowane jako kombinacja poleceń i tylko pojedyncze klawisze zostaną zarejestrowane, jeśli zostanie naciśnięty klawisz Ctrl+ Alt+, Delco będzie się liczyć dla wszystkich poszczególnych klawiszy w kombinacji. Więc nie musisz naciskać również wielkich liter, jeśli naciśniesz już małe litery i odwrotnie.
Klawisze numeryczne na klawiaturze numerycznej różnią się od perspektywy programu, więc nadal trzeba je nacisnąć, aby zakończyć program, jeśli masz laptopa lub inną klawiaturę, która nie ma układu klawiatury US Standard 101 , nie może sprostać wyzwaniu, chyba że podłączysz kompatybilną klawiaturę.
* Klawiatury z klawiszem Fn i klawiszem laptopa nie będą obsługiwane, aby sprostać temu wyzwaniu
Oto lista klawiszy dla układu klawiatury 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
źródło
Odpowiedzi:
JavaScript, 524 bajtów
Cześć, to mój pierwszy post tutaj, więc przepraszam, jeśli nadal jestem ignorantem w niektórych sprawach, myślę jednak, że przestrzegałem zasad.
Jeśli nie używam Chrome, wydaje się to wadliwe, ale możesz go wypróbować tutaj . (pamiętaj, aby otworzyć konsolę przed skupieniem się na oknie przykładowym, ponieważ domyślna funkcjonalność F12 jest wyłączona)
Przegląd
Program tworzy tablicę wszystkich 101 „kodów klawiszy”. Niektóre są napisane jawnie, niektóre sekwencje są dodawane za pomocą pętli for, a niektóre są przechowywane jako ciągi znaków. Mam osobną tablicę dla „podwójnych” kodów, ponieważ na przykład lewa i prawa kontrola dają ten sam kod. Podają także lokalizację, więc łączę kody klawiszy z lokalizacjami jako ciągi znaków w tablicy. Stamtąd jest to tylko eventlistener, który uniemożliwia domyślną funkcję keydown (w tym przypadku nie chcę odświeżać przy pomocy F5) i oddzielny eventlistener dla keyup, ponieważ każdy klucz można wykryć podczas keydown, Z WYJĄTKIEM PRINTSCREEN.
Po każdym zdarzeniu keyup rejestrowane są pozostałe klucze (zwane też długością tablicy), a także nazwa kodu klucza (więc istnieje różnica między przesunięciem w lewo i w prawo itp.). Nie byłem pewien, czy to wymaganie, jeśli nie, możesz odjąć kolejne 10 bajtów od wyniku.
Ograniczenia
Mam nadzieję, że ta odpowiedź zostanie doceniona i proszę dać mi znać, jeśli zrobiłem coś złego.
źródło
Java 8, 607 + 64 = 671 bajtów
Jest to lambda przyjmująca nieużywany parametr i rzucająca
InterruptedException
. Uruchamia okno, które po ustawieniu ostrości przechwytuje naciśnięcia 101 standardowych klawiszy. Liczba bajtów obejmuje lambda i wymagany import.Możesz znaleźć klasę testową z wersją bez golfa tutaj .
Przegląd
Gdy klawisze są naciskane, wartości jednoznacznie je identyfikujące (w większości przypadków kod klucza) są przechowywane w zestawie. Pierwsze kilka poziomów przypisania trójskładnikowego do
c
obsługi przypadków, w których kod klawisza jest niejednoznaczny (np. Klawisz „Home”, który może pochodzić z głównej części klawiatury lub klawiatury numerycznej) oraz przypadków, w których ten sam klawisz można odwzorować na wiele kody klawiszy (np. zachowanie klawiatury numerycznej przy włączonym lub wyłączonym Num Lock). Ostatnia gałąź obsługuje „normalne” klucze, których kodu klucza można po prostu użyć w zestawie. Kod klucza indeksuje się do mapy bitowej,l
która wskazuje, czy klucz jest jednym ze standardowych 101.Ograniczenia
Jeśli zostanie naciśnięty dowolny klawisz inny niż standardowy 101, ślad stosu może zostać wydrukowany na błąd standardowy lub może wystąpić nieoczekiwane zachowanie.
Program korzysta bezpośrednio z wartości liczbowych stałych kodu klucza, a
KeyEvent
dokumentacja Oracle wskazuje, że wartości te mogą się zmieniać z czasem.Podziękowanie
źródło
f.setVisible(1>0);
można grać w golfaf.show();
i()->
można w niego graćv->
, używając nieużywanegoVoid null
parametru .JavaScript,
989075 bajtówWięc ... Podejrzewam, że myślę o tym, ale to powinno zadziałać. Daj mi znać, jeśli nie pominąć niczego. Testowane tylko w Chrome.
Spróbuj
alert
nadpisane dla twojego zdrowia psychicznego i odwróconego porządku, aby zapisać przewijanie.źródło