Schreiben Sie das kürzeste Programm, das darauf wartet, dass jede Taste einer US-Tastatur * mit Standard 101 gedrückt wird, und beenden Sie dann das Schreiben mit OK!
Jedes Mal, wenn eine Taste gedrückt wird, zeigt das Programm in einer neuen Zeile die verbleibende Anzahl nicht gedrückter eindeutiger Tasten an, die gedrückt werden müssen, bis alle Tasten mindestens einmal gedrückt wurden. Das Programm sollte in der Lage sein, eine 101-Tastatur zu testen und festzustellen, ob jede Taste funktioniert. Das zweimalige Drücken einer Taste oder der Eingabetaste ist zuzulassen, solange dies dem Benutzer mitgeteilt wird.
Das zweimalige Drücken derselben Taste sollte weder den Code stören noch die angezeigte Anzahl der noch nicht gedrückten Tasten ändern.
Alle Tasten ( Left Shift, Right Shift, Right Control, Esc, Enter, etc.) sollten einbezogen werden.
Die tatsächlichen Tastaturtasten sind bei dieser Herausforderung aus der Sicht des Programms wichtig ( A
und a
, sind gleich und sind es auch 6
und ^
).
Kombinierte Tasten werden nicht als kombinierter Befehl registriert und nur die einzelnen Tasten werden registriert, wenn Ctrl+ Alt+ Delgedrückt wird, was für alle einzelnen Tasten in der gedrückten Kombination gilt. Sie müssen also nicht auch die Großbuchstaben drücken, wenn Sie bereits die Kleinbuchstaben und umgekehrt gedrückt haben.
Zifferntasten auf dem Ziffernblock unterscheiden sich von der Perspektive des Programms, so dass sie nach wie vor notwendig sind für das Programm bis zum Ende gedrückt werden, wenn Sie einen Laptop oder eine andere Tastatur haben , die nicht die hat US - Standard 101 Tastaturlayout Sie kann die Herausforderung nur erfüllen, wenn Sie eine kompatible Tastatur anschließen.
* Tastaturen mit Fn-Taste und Laptop-Taste werden nicht unterstützt, damit diese Herausforderung ausgeführt werden kann
Dies ist die Liste der Tasten für ein Tastaturlayout nach 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
quelle
Antworten:
Javascript, 524 Bytes
Hallo, dies ist mein allererster Post hier. Entschuldigen Sie, wenn ich in einigen Dingen immer noch nichts weiß, ich glaube, ich habe mich jedoch an die Regeln gehalten.
Es scheint fehlerhaft zu sein, wenn ich Chrome nicht verwende, aber Sie können es hier ausprobieren . (Stellen Sie sicher, dass Sie die Konsole öffnen, bevor Sie sich auf das Beispielfenster konzentrieren, da die Standardfunktionalität von F12 verhindert wird.)
Überblick
Das Programm erstellt ein Array aller 101 "Schlüsselcodes". Einige werden explizit geschrieben, einige Sequenzen werden mit einer for-Schleife hinzugefügt und andere werden als Zeichenfolgen gespeichert. Ich habe ein separates Array für die "doppelten" Schlüsselcodes, da die linke und rechte Steuerung zum Beispiel den gleichen Schlüsselcode geben. Sie geben jedoch auch eine Position an, sodass ich die Schlüsselcodes mit den Positionen als Zeichenfolgen im Array kombiniere. Von da an ist es nur eine Ereignisliste, die die standardmäßige Tastendruckfunktion verhindert (in diesem Fall keine Aktualisierung mit F5), und eine separate Ereignisliste für den Tastendruck, da jeder einzelne Tastendruck beim Drücken erkannt werden kann, AUSGENOMMEN FÜR DRUCKBILDSCHIRM.
Nach jedem Keyup-Ereignis werden die verbleibenden Keys (auch bekannt als Länge des Arrays) sowie der Name des Keycodes protokolliert (es wird also zwischen Links- und Rechtsverschiebung usw. unterschieden). Ich war mir nicht sicher, ob das eine Anforderung war. Andernfalls können Sie weitere 10 Bytes von der Punktzahl abziehen.
Einschränkungen
Ich hoffe, diese Antwort wird geschätzt und bitte lassen Sie mich wissen, wenn ich etwas falsch gemacht habe.
quelle
Java 8, 607 + 64 = 671 Bytes
Dies ist ein Lambda, der einen nicht verwendeten Parameter annimmt und wirft
InterruptedException
. Es wird ein Fenster geöffnet, in dem beim Fokussieren das Drücken der 101 Standardtasten abgefangen wird. Die Byteanzahl umfasst Lambda und erforderliche Importe.Sie können eine Testklasse mit einer ungolfed Version finden hier .
Überblick
Beim Drücken von Tasten werden Werte, die diese eindeutig identifizieren (in den meisten Fällen der Tastencode), in einem Satz gespeichert. Die ersten Ebenen der ternären Zuordnung zu
c
behandeln Fälle, in denen der Tastencode mehrdeutig ist (z. B. die "Home" -Taste, die vom Hauptteil der Tastatur oder dem Ziffernblock stammen kann) und Fälle, in denen dieselbe Taste mehreren Tasten zugeordnet werden kann Tastencodes (z. B. Verhalten des Ziffernblocks bei aktivierter oder deaktivierter Num-Taste). Der letzte Zweig behandelt die "normalen" Schlüssel, deren Schlüsselcode einfach im Set verwendet werden kann. Der Schlüsselcode indiziert in die Bitmap,l
die angibt, ob der Schlüssel einer der Standards 101 ist.Einschränkungen
Wenn eine andere Taste als die Standardtaste 101 gedrückt wird, wird möglicherweise eine Stapelablaufverfolgung auf einen Standardfehler gedruckt, oder es kann ein unerwartetes Verhalten auftreten.
Das Programm verwendet die numerischen Werte von Schlüsselcode-Konstanten direkt, und die
KeyEvent
Dokumentation von Oracle zeigt an, dass sich diese Werte im Laufe der Zeit ändern können.Danksagung
quelle
f.setVisible(1>0);
kann mit einem unbenutzten Parameter golfen werdenf.show();
und()->
kannv->
mit einem unbenutztenVoid null
Parameter golfen werden .JavaScript,
989075 BytesAlso ... ich vermute, dass ich hier vielleicht ein wenig nachdenklich bin, aber das sollte funktionieren. Lassen Sie mich wissen, wenn ich etwas übersehen habe. Nur in Chrome getestet.
Versuch es
alert
Für Ihre geistige Gesundheit überschrieben und die Reihenfolge umgekehrt, um das Scrollen zu sparen.quelle