Das häufig verwendete Tastaturlayout ist das unten gezeigte QWERTZ- Layout.
Es gibt aber auch andere Tastaturlayouts:
DVORAK
COLEMAK
Deine Aufgabe
Ihr Code benötigt zwei Eingaben: den Namen des Tastaturlayouts und eine zu transkribierende Zeichenfolge. Ihr Ziel ist es, Ihre QWERTZ-Eingabe so zu konvertieren, als würden Sie mit dem als ersten Parameter angegebenen Tastaturlayout tippen.
Regeln
Das Eingabeformat ist frei, Sie können Zeichenfolgen, Arrays usw. verwenden. Darüber hinaus können Sie drei verschiedene Werte verwenden, um die Layouts darzustellen, um die Anzahl der Bytes zu verringern. Sie müssen jedoch jeweils in maximal 10 Bytes darstellbar sein.
Sie müssen nur die Schlüssel mit einem weißen Hintergrund behandeln. Insbesondere müssen Sie die druckbaren ASCII-Zeichen aus dem QWERTZ-Alphabet in eines der anderen Alphabete umwandeln:
QWERTY: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
DVORAK: !_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
COLEMAK: !"#$%&'()*+,-./0123456789Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJZ[\]^_`abcsftdhuneimky;qprglvwxjz{|}~
WORKMAN: !"#$%&'()*+,-./0123456789Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJZ[\]^_`avmhrtgyuneolkp;qwsbfcdxjz{|}~
(Hinweis: Dies wurde von @ETHproductions von Hand transkribiert. Wenn Sie also Fehler sehen, weisen Sie Sie bitte darauf hin!)
Beispiel
DVORAK zZxX
als Eingabe wird als Ausgabe geben ;:qQ
Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes!
!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
als Eingabe für die Dvorak-Tastatur nehmen? Das würde die Herausforderung trivialisieren ... Wie wäre es mit der Einführung einer Längenbeschränkung oder ähnlichem?!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
als Input nehmenAntworten:
Ruby ,
258247238 BytesProbieren Sie es online!
Dies ist eine Funktion mit zwei Argumenten: der Nachricht, die ausgetauscht werden soll, und einem Wert 0-2, der das Layout darstellt, in das ausgetauscht werden soll, wobei 0 Dvorak, 1 Colemak und 2 Workman entspricht.
Grundsätzlich denke ich nicht, dass dies viel anders ist als die anderen Antworten. Genauer gesagt sieht es so aus:
Rubys
string#tr
Funktion benötigt zwei Argumente: eine Zeichenkette, die zu ersetzende Zeichen enthält, und eine Zeichenkette, die deren Ersetzungen enthält. Es ist hilfreich, Zeichenbereiche mithilfe dera-z
Syntax anzugeben . Die andere wichtige platzsparende Erkenntnis ist, dass es nicht erforderlich ist, Zeichen zu verwenden, die in allen vier Layouts gleich sind. Dadurch konnte ich alle Ziffern, den Buchstaben "A" in Groß- und Kleinbuchstaben und eine Handvoll Zeichen entfernen spezielle Charaktere.Ein anderes seltsames Stück Syntax ist die Verwendung von
%W()
. Dadurch wird ein Array von Zeichenfolgen erstellt, die alle Elemente in Klammern enthalten, die durch Leerzeichen voneinander getrennt sind. Alle Zeilenumbrüche in der Übermittlung fungieren tatsächlich als Elementtrennzeichen.%W()
erlaubt auch String-Interpolation (was mit dem#{}
Operator gemacht wird) -%w()
wäre dasselbe gewesen, aber ohne String-Interpolation.Ich würde mir auch gerne einen Moment Zeit nehmen, um Dvorak die Schuld dafür zu geben, dass er meine Optimierungspläne durcheinandergebracht hat, indem er darauf besteht, die ganze Zeit ganz anders zu sein als alle anderen. Eine Qwerty / Colemak / Workman-Lösung hätte so schön kurz sein können ...
quelle
Retina ,
273270 BytesProbieren Sie es online! Präfix die Nachricht mit einem einzigen Buchstaben
D
,C
oderW
für das gewünschte Tastaturlayout. Leider unterstützt Retina eine Reihe magischer Buchstaben (p
die naheliegend sind, aber ich habe es geschafft, sie einzufügend
), die alle zitiert werden müssen, außer ich konnte siev-x
anstelle von verwendenv\wx
. Bearbeiten: 3 Bytes dank @ETHproductions gespeichert.quelle
-
s Zeichenbereiche repräsentieren, ich glaube , Sie einige durch Änderung retten könnte<-@ABC
zu<-C
.JavaScript (ES7),
282273251250 ByteNimmt eine Tastaturlayout-ID
k
und ein Array von Zeichena
in der aktuellen Syntax auf(k)(a)
. Gibt ein Array übersetzter Zeichen zurück.Die Layout-IDs lauten:
Wie es funktioniert
Kompression
Alle drei Ziellayouts werden in einer einzelnen komprimierten Zeichenfolge gespeichert, wobei jedes Zeichen entweder:
Insbesondere wird eine Ziffer n als die Länge der Zahl 15 n in der Basis 10 interpretiert :
Zum Beispiel wird
#$%&-()*
in DVORAK als3-2
weil gespeichert#$%&
und()*
haben identische Zuordnungen in QWERTY und nur-
eine tatsächliche Übersetzung.Insbesondere
0123456789
wird auf allen Layouts gleich abgebildet und muss nie übersetzt werden. Daher gibt es keine mögliche Mehrdeutigkeit zwischen einer für die Komprimierung verwendeten Ziffer und einer für die Übersetzung verwendeten Ziffer.Dekompression
Um den Layout-String zu dekomprimieren, ersetzen wir jede Ziffer n durch 15 n . Beispielsweise
3-2
wird als dekomprimiert3375-225
.Übersetzung
Für jedes Zeichen
c
ina
extrahieren wir das Übersetzungszeichent
und verwenden esk
als Versatz in der unkomprimierten Layoutzeichenfolge. Dann testen wir , ob es sich um eine Ziffer mit handelt1/t
. In diesem Fall geben wirc
stattdessen das Originalzeichen aus .Demo
Code-Snippet anzeigen
quelle
Python 2, 422 Bytes
Versucht, Layouts mit einer cleveren Methode zu kombinieren, aber es hat nicht viel geholfen.
Probieren Sie es online aus
quelle
PHP, 364 Bytes
Array enthält 3 Arrays, wobei key für 0 = W, 1 = C, 2 = D steht
Probieren Sie es online!
quelle
C ++, 535 Bytes
Laufen Sie mit
./multitrans <0-2> <string>
0 = Dvorak, 1 = Colemak und 2 = Workman.Ich habe dazwischen Zeilenumbrüche eingefügt, um den Code weiter unten etwas lesbarer zu machen. Dieser Code generiert eine Übersetzungszuordnung aus den Zeichenfolgen, in denen das Nachschlagen des QWERTY-Zeichens die Übersetzung zurückgibt (
t[0]['s'] = 'o'
für s in Dvorak). Anschließend wird die Zuordnung zum Übersetzen verwendet. Die Übersetzungszeichenfolgen werden gekürzt, da einige Zeichen nie geändert werden müssen. Es könnte jedoch wahrscheinlich weiter reduziert werden.Extra: Qwerty -> Nur Dvorak (197 Bytes)
Ich habe kürzlich diesen Code geschrieben, der Qwerty in Dvorak ändert, obwohl Großbuchstaben nicht übersetzt werden.
quelle
JavaScript (ES6),
461409404395385 BytesIch habe die Originalversion von unten auf mein Handy geschrieben, während ich in einem Bus saß, und dann hatte ich nicht mehr genug Zeit, um richtig Golf zu spielen, damit es noch knirschender wird. Vielen Dank an @ETHproductions für die bisherige Hilfe.
Die Keyboard-Strings wurden direkt aus der Frage kopiert, also mach
AntoineETH für eventuelle Fehler verantwortlich!Dies setzt eine Ganzzahl voraus, die das Tastaturlayout darstellt (0 für DVORAK, 94 für COLEMAK und 188 für WORKMAN), und ein Array der Zeichenfolge als Argumente für die Ausgabe, z . B.
f(0)(["z","Z","x","X"])
Ausgaben;:qQ
.Versuch es
quelle
QWERTY
als Eingabe erhalten, daher denke ich, dass Sie einige Bytes einsparen könnten, wenn Sie das Objekt nicht in einer Variablen speichern. Es würdes=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
map()
aber mir lief die Zeit davon - ob Sie es glauben oder nicht, ich habe das aufgeschrieben, als ich im Bus zum Kino saß. Ich werde es mit Ihrem Vorschlag und ein paar Verbesserungen aktualisieren, die ich morgen selbst entdeckt habe.C 394 Bytes
Versuchen Sie es online
quelle
05AB1E ,
199192187 BytesVerwendet IDs
1
für DVORAK;2
für COLEMAK und3
für WORKMAN.Drückt zuerst die ID und dann den String, den wir transliterieren möchten.
Probieren Sie es online aus oder überprüfen Sie den gesamten ASCII-Bereich für alle drei .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E an (Abschnitt So komprimieren Sie Zeichenfolgen, die nicht Teil des Wörterbuchs sind ), um zu verstehen, wie die komprimierten Zeichenfolgen funktionieren.
quelle