Mit einem der folgenden Zeichen (oder einer neuen Zeile):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Ihr Programm muss die Zeile ausgeben, in der es sich auf der Tastatur befindet
Da meine Tastatur (fast) leer ist, muss Ihr Code so kurz wie möglich sein
Die Tastatur, die Ihr Programm verwenden soll (für die Zeilensuche), sollte wie folgt aussehen:
Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=
Row 2: Q W E R T Y U I O P {[ }] |\
Row 3: A S D F G H J K L :; "' ↵ return
Row 4: Z X C V B N M <, >. ?/
Row 5: space
Wo ↵ returnist ein Zeilenumbruch? Leere Schlüssel bedeuten nichts.
Beispiele
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
Wo \n
ist ein Newline-Zeichen.
Spezifikationen
- Ihr Programm sollte die Groß- und Kleinschreibung nicht berücksichtigen
- Ihr Programm muss nur die Zeichen auf der angezeigten Tastatur verarbeiten
quelle
kbd
?Antworten:
Pyth,
626665 BytesProbieren Sie es online aus.
Verwendet ein gepackter String eine Zahl in hex darstellt , die, wenn sie in zwei-Bit - Stücke gehackt, mit Ausnahme der Zeile jedes Zeichen darstellt
und
!
als ein Wert von 0 bis 3. Wir auslassenund
!
so haben wir bis 4 nicht speichern oder haben a 0 am Anfang dieser Zahl, dann addieren Sie ihre Zeilenwerte mit+,4Z
. Nachdem wir die Zeichenfolge in Zeilenwerte umgewandelt haben, müssen wir nur den Zeichencode der Eingabe verwenden, um das Array der Werte zu indizieren, und dann 1 hinzufügen.Newline wird separat behandelt, da es von Pyth als leere Zeichenfolge interpretiert wird und daher den Zeichencode 0 hat.
Dies wäre kürzer, wenn ich herausfinden könnte, wie Base 256 in Pyth verwendet wird, aber ich kann es nicht ganz zum Laufen bringen.
quelle
JavaScript (ES6),
105102101 ByteErläuterung
In JavaScript
test
einen Booleschen Wert zurück, die gleich wirkt wie1
oder0
so ich multiplizieren sie durch ihre Reihe. Das Testen von Zeile 2 hat die meisten Bytes in Anspruch genommen, daher habe ich diese als Standard verwendet, wenn keine anderen übereinstimmen.Prüfung
Code-Snippet anzeigen
quelle
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
konvertiert die Operanden in ganze Zahlen (Uncastable wieNaN
werden0
), dann tut0 XOR 2
was ist2
.Glava 1,5 , 164 Bytes
Glava ist ein Java-Dialekt, der Java-Code kürzer macht. Dieser Code ist leider nicht wettbewerbsfähig, da das verwendete Commit (2 Stunden zu spät ...) nach dieser Herausforderung durchgeführt wurde, wodurch einige wichtige Fehler behoben wurden, die das Funktionieren dieses Programms unmöglich machten.
Dies ist ein vollständiges Programm, das Eingaben über Befehlszeilenargumente entgegennimmt. Funktioniert, indem einfach getestet wird, für welche Zeile Regex passt, und dann die entsprechende Nummer ausgegeben wird.
quelle
Python 3, 142
Es gibt wahrscheinlich einen kürzeren Weg, auf dem ich ¯ \ _ (ツ) _ / ¯ übersehen kann
quelle
Pyth , 98
Ich bin mir aus irgendeinem Grund nicht sicher, wie ich den 0-9-Bereich zum Laufen bringen soll: |, inspiriert von der Antwort von user81655
quelle
jkUT
für die Zeichenfolge den Bereich 0 bis 9 verwenden, nicht sicher, ob es einen kürzeren Weg gibt. Sie können auch gepackte Strings speichern ein paar Bytes, zB verwendet."!~WÏù¹_(<]úÝ"
für"~`!@#$%^&*()_-=+"
.Bash, 108
Keine Bash-Antwort? Bash Antwort.
grep -Fin
ist definitiv das richtige Werkzeug für diesen Job.Dieses Programm besteht aus zwei Dateien.
k
73 BytesEs gibt 5 Zeilen, die letzte ist ein Leerzeichen. Wenn Sie Probleme beim Wiedergeben der Datei haben, lautet der base64:
b
34 BytesDies ist das Programm selbst, es nimmt Eingaben als einziges Befehlszeilenargument entgegen.
Ergebnis: 34 + 73 + 1 (für
k
den Dateinamen) = 108 BytesUngolfed
Erläuterung
grep
- Durchsuchen Sie eine Datei nach Zeilen, die einem String oder regulären Ausdruck entsprechen, und geben Sie nur diese Zeilen aus-F
aka--fixed-strings
- deaktiviere reguläre Ausdrücke, damit[
etc. korrekt gehandhabt werden-i
aka-y
aka--ignore-case
- Matching ohne Berücksichtigung der Groß- und Kleinschreibung-n
aka--line-number
- zeige die Zeilennummer und: vor jeder Zeile (zB4:zxcvbnm,./<>?
)"$1"
- Suchen Sie nach dem ersten Befehlszeilenargument des Skripts. Die Anführungszeichen sind erforderlich, um mit Zeilenumbrüchen und Leerzeichen umzugehenk
- Suche in Dateik
grep
Befehl stimmt mit allen fünf Zeilen überein, wenn es sich bei der Eingabe um eine neue Zeile handelt, andernfalls nur mit einer Zeile.|
- Pipe, Standardausgabe eines Befehls an die Standardeingabe des nächsten Befehls sendentail
- Die letzten N Zeilen oder Zeichen der Standardeingabe ausgeben-n3
aka--lines=3
- gibt die letzten 3 Zeilen aus-n
Flag aktiviert istgrep
. Andernfalls übernimmt dieser Befehl nur die Zeilen 3, 4 und 5 (die letzten 3 Zeilen).|
- Pfeifehead
- Die ersten N Zeilen oder Zeichen der Standardeingabe ausgeben-c1
aka--bytes=1
- gibt das erste Zeichen ausquelle
Japt,
737066 BytesProbieren Sie es online! (In diesem Beispiel ist die Eingabe buchstäblich eine neue Zeile.)
quelle
!1
ist etwas, das "falsch" entspricht, endlich weiß ich, wie es geht, danke :)Java, 300 Bytes
Ich bin kein Experte, und dies ist mein erster Versuch, Golf zu spielen, aber ich dachte mir, was zur Hölle, warum nicht? Oben ist die Vollversion des Programms, der eigentliche Code, der in das Programm eingeht, würde höchstwahrscheinlich eine anständige Menge an Zeichen wegnehmen.
quelle
class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}
( 243 Bytes ) Ich habe einige unnötige Klammern entfernt. verkürztargs
; entferntpublic
; direkt verwendet die Zeichenfolge und Scanner; und entfernte den Import jetzt,java.util.Scanner
der einmal verwendet wird.Pyth, 105 Bytes
Erläuterung:
Ich entschied mich, die erste Reihe als "Muss wenn nichts anderes" zu wählen, da die meisten Bytes auch nach dem Golfen dargestellt werden mussten.
quelle
Perl 6, 128 Bytes
Ich erstelle eine Liste von Regexen mit Zeichenklassen und einem String-Literal-Leerzeichen. Ich rufe dann die
first
Methode in der Liste auf (die nur die Methodenversion derfirst
Funktion höherer Ordnung ist) und vergleiche mit smartmatch das an das Programm übergebene Argument mit dem aktuellen Element in der Liste. Beachten Sie, dass Smartmatch sowohl für reguläre Ausdrücke als auch für ein String-Literal "das Richtige" tut. Der:k
optionale Parameter tofirst
bewirkt , dass die Methode den Index des übereinstimmenden Elements in der Liste zurückgibt, dem ich dann 1 hinzufüge und über ausgebesay
.Beachten Sie, dass Sie bei der Verwendung dieses Programms bestimmte Zeichen wie `und Leerzeichen in Ihrer Shell korrekt maskieren müssen. Zum Beispiel: perl6 keyboard.p6 \ `
quelle
JavaScript ES6, 114 Byte
Eine weitere JavaScript-Lösung. Das Prinzip besteht darin, den Index des Eingabezeichens in dem Array aus Zeilen plus 2 zurückzugeben (so wie die Zeile 0-9 -1 zurückgibt, dh nicht existiert, ist -1 + 2 = 1. Befindet
q
sich in der ersten Zeichenfolge des Arrays, es gibt also 0 + 2 = 2. Zeile zurück).quelle
Perl,
967776 BytesFühren Sie mit
perl -p
. Stellen Sie sicher, dass Sie nur einzelne Zeichen eingeben. Zum Beispiel, um es von einer Datei aus auszuführenkey.pl
(um nicht mit Shell-Escape-Sequenzen herumzuspielen)echo -n q|perl -p key.pl
.Es macht Spaß, die Funktionalität des Regex-Bereichs zu missbrauchen.
quelle
echo
, um die Eingabe genau zu steuern - z.echo -n q|perl -n key.pl
, was richtig produziert2
.chomp
die Eingabe nicht machen.chomp
die Eingabe ändern würde, könnte ich für die Eingabetaste nicht '3' zurückgeben.$_=~
für die Matches nicht,m//
(was ist das/.../
) funktioniert$_
automatisch! Auch wenn Sie-p
statt verwenden-n
, können Sie$_=
statt verwendenprint
, um ein paar weitere Bytes zu speichern. Wenn Sie stattdessen einen wörtlichen Zeilenumbruch verwenden,\n
können Sie auch ein weiteres Byte sparen! Das sollte Ihren Code ein wenig reduzieren! Könnte es wert sein, ein Beispiel hinzuzufügen, damit jeder, der es testet, weiß, dass Sie es brauchenecho -n
:)PHP, 173 Bytes
Die Idee dabei war, die Nummer der Regex-Erfassungsgruppe als Zeilenindex zu verwenden. Wahrscheinlich noch ein paar Optimierungen in der Regex.
Der
preg_match()
Aufruf erzeugt eine Reihe$m
von Übereinstimmungen, und wenn wir das ausdrucken würden, würde es ungefähr so aussehen (vorausgesetzt,z
die Eingabe war):Wenn Sie dieses Array durch Vertauschen von Schlüsseln und Werten spiegeln, bewegen Sie sich von links nach rechts und behalten nur den letzten eindeutigen Schlüssel bei.
Dann verwenden wir das Eingabezeichen als Index im Array, um unser Ergebnis zu erhalten.
Probieren Sie es hier aus .
quelle
C
145 143 136 132 127106 BytesDies wirdDies setzt ASCII und 32-Bit-Ints voraus.index()
ab POSIX.1-2001 verwendet und ist in POSIX.1-2008 veraltet.quelle
Python 3, 89 Bytes
Da ich noch keinen Kommentar abgeben kann, veröffentliche ich die Verbesserung für die aktuelle Python 3-Antwort separat.
Bearbeiten : Alle Code
print
jetzt und weiter optimiert.quelle
Ruby , 82 Bytes
Probieren Sie es online!
quelle
CJam, 125 Bytes
Erläuterung
quelle
SpecBAS - 178 Bytes
Ich habe eine lange Zeichenfolge verwendet, bei der jede Zeile 26 Zeichen lang ist (# 34 ist Code für doppelte Anführungszeichen und # 13 ist Code für die Rückgabe).
Drucken Sie dann das Ergebnis der Rundungsposition / 26 aus.
quelle
C # 6, 201 Bytes
Nichts besonderes hier. Ich fand es billiger, nur beide Fälle zu schreiben, anstatt ToUpper () zu verwenden, da der String eine feste Breite hat.
Eingerückt:
quelle
Python 2, 146 Bytes
quelle
Excel, 132 Bytes
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
Versuche, die Groß- und Kleinschreibung
SEARCH()
zuFIND()
ignorieren, haben ergeben, dass Excel übereinstimmt~
,*
und?
zu(tick). The matching of
?means we can't use
SEARCH () `, die massive 5 Bytes rasiert hätte ...quelle