Repariere meine fetten Finger


21

Code Golf Challenge

Ich habe einen Fehler, meine Finger sind fett und ich habe häufig einen Fehler, der darin besteht, eine Taste rechts auf meinem Kryboard zu drücken.

Ich fürchte, die Situation wird mit der Zeit schlechter und schlechter.

Sopn jede Taste, die ich mache, wird; nach rechts schieben!

Vor dem Start möchte ich, dass ein Programm (oder eine Funktion) automatisch jede Tastatureingabe wieder nach links verschiebt.

Ich stelle sicher, dass ich den Rest der Zeit mit meinem Band tippe, um keine Verwirrung zu stiften!


Zielsetzung:

Schreiben Sie ein Programm oder eine Funktion, die eine der folgenden grünen Tasten auf einer Standard-QWERTZ-Tastatur verwendet und das Zeichen der Taste links davon zurückgibt.Bildbeschreibung hier eingeben


Bedingungen:

• Sie können davon ausgehen, dass die Person, die dieses Programm ausführt, eine QWERTZ-Tastatur wie die oben abgebildete verwendet.

• Bei Eingabe und Ausgabe wird die Groß- und Kleinschreibung nicht berücksichtigt. Sie können für diese Herausforderung jeden beliebigen Fall (oder eine Mischung aus Fallkombinationen) verwenden und auf Wunsch auch davon ausgehen, dass alle Eingaben in einem Fall erfolgen.

• Wenn Ihre Sprache es aus irgendeinem Grund nicht zulässt, dass ein Benutzer die Eingabetaste eingibt, können Sie diesen einen Tastenanschlag ignorieren

• Diese Abfrage gilt nur für die Standardwerte der Tasten. Wenn 4Sie beispielsweise die Taste drücken, können Sie davon ausgehen, dass dies immer 4und niemals der Fall ist$

• Sie können davon ausgehen, dass immer nur die grünen Tasten gedrückt werden.


Beispiel Input-> Output:

S-> a
4-> 3
=-> -
[->p


Das ist , also gewinnt das Programm mit dem kürzesten bytecount!


Könnten Sie Testfälle zur Verfügung stellen?
Kritixi Lithos

1
@KritixiLithos Mit Sicherheit! Ich bearbeite jetzt @
Albert Renshaw

Meinten Sie ]-> [?
Shooqie


3
Das interessiert Sie vielleicht nicht, aber hier ist eine interessante Kleinigkeit: Dies ist ein ANSI-Tastaturlayout. Beachten Sie den Backslash über der Eingabetaste. im Gegensatz zu einer ISO - Tastatur, in dem die umgekehrten Schrägstrich - Taste links von Z. ist (es ist auch Amerikaner, aber das ist leichter zu identifizieren!)
Doddy

Antworten:


7

Ruby, 76 71 69 Bytes

->a{"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"[/.#{a}/][0]}

5

Perl 6 , 87 83 69 Bytes

{[Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".comb].&{%(.[1..*]Z=>$_)}{$_}}

{~Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".match(/.)>$_/)}

Probieren Sie es online!

Ich frage mich, ob es eine Möglichkeit gibt, diese fest codierte Zeichenfolge in eine kürzere zu codieren.

(Hat GBs Regex-Idee für -14 Bytes gestohlen .)


1
Vielleicht $"könnten wir mit den Reichweiten ein paar Zeichen sparen
Ven

5

Jelly , 34 33 Bytes

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy

Probieren Sie es online!

Wie es funktioniert

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy  Main link. Argument: s (string)

ØD                                 Digits; yield "0123456789".
  ”`1|                             Replace '0' with a backtick.
       Øq                          Qwerty; yield
                                   ["qwertyuiop", "asdfghjkl", "zxcvbnm"].
      ṭ                            Tack; add "`123456789" as the last element of
                                   the qwerty array.
          “[]\“;'¶“,./“0-=”        Yield ["[]\\", ";'\n", "0-="].
         ż                         Zip; combine the strings of the array to the
                                   left with the corresponding strings of the array
                                   to the right, yielding an array of string pairs.
                           F       Flatten, yielding a string.
                            ṡ2     Obtain all overlapping pairs of characters.
                              U    Upend; reverse each pair.
                               Z   Zip, yielding a pair of strings.
                                y  Translate the input s according to the generated
                                   replacement table.

3
Ich kenne Jelly nicht. Können Sie eine Erklärung für Ihren Code hinzufügen? Ich bin gespannt, wie Sie davongekommen sind, ohne ein String-Literal der gesamten Tastatur
Albert Renshaw,

1
Ich hatte noch keine Zeit, aber ich werde so schnell wie möglich eine Erklärung hinzufügen.
Dennis

1
Getan. Ich habe auch ein bisschen Golf gespielt.
Dennis

1
Øqflott! Ich mag das, danke!
Albert Renshaw

4

Python 3, 85 bis 78 Bytes:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]

1
Sie können die Zeichenfolge als optionalen Parameter mit 1 Lambda übergeben: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]um einige Bytes zu reduzieren
Rod

Guter Punkt, ich werde das hinzufügen.
L3viathan

Ich denke, Sie brauchen ein Backtick, um links vom 1.
24.

@xnor Richtig, das wurde behoben.
L3viathan

4

Python , 76 Bytes

s="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?"
dict(zip(s,'`'+s)).get

Probieren Sie es online!

Erstellt ein Wörterbuch, in dem jede Taste mit der verschobenen Version der Zeichenfolge nach links verschoben wird. Die unterste Zeile ist die Funktion, die oberste ist eine Definition.

Das translateErstellen eines Mappings ergab eine längere Lösung. Probieren Sie es online!

lambda s:s.translate("';"*22+"_0__9`12345678_LM-<>_\\VXSWDFGUHJKNBIO=EARYCQZT\nP][___"*4)

4

Retina , 53 51 Bytes

T`1-90\-=QW\ERTYUI\OP[]\\ASDF-HJ-L;'¶ZXCVBNM,./`\`o

Probieren Sie es online!

Eine einfache Transliteration, die jedes Zeichen um eine Position nach hinten verschiebt. Alles von 1bis /ist der ursprüngliche Zeichensatz, während der folgende Teil der neue Satz ist, mit odem der andere Satz angegeben wird.

Hund Lsind spezielle Zeichenklassen für die Transliteration in der Retina (bzw. Zuordnung zu Hexadezimalziffern und Großbuchstaben), aber glücklicherweise treten sie auf der Tastatur innerhalb von alphabetisch geordneten Sequenzen ( FGHund JKL) auf 2 Bytes.



3

TI-Basic, 70 Bytes

Ich bezweifle, dass es kürzer werden könnte ...

Input Str1
"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./
sub(Ans,inString(Ans,Str1)-1,1

PS Das Zwei-Byte - Tokens sind Str1, `, \, sub(, und inString(.


3

V , 57 54 51 Bytes

3 Bytes gespart dank @ nmjcman101 für die Verwendung hxVpanstelle dessen, was ich für die Mehrzeilentastatur hatte

i`¬190-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./<esc>/<C-r>a
hxVp

Probieren Sie es online!

<esc>ist 0x1bund <c-r>ist0x12

Hinweis: Dies unterstützt die Eingabetaste nicht

Enthält nicht druckbare Dateien. Hier ist der Hexdump

00000000: 6960 ac31 3930 2d3d 7177 6572 7479 7569  i`.190-=qwertyui
00000010: 6f70 5b5d 5c61 7364 6667 686a 6b6c 3b27  op[]\asdfghjkl;'
00000020: 7a78 6376 626e 6d2c 2e2f 1b2f 1261 0a68  zxcvbnm,././.a.h
00000030: 7856 70                                  xVp

Erläuterung

Der größte Teil des Programms generiert die Tastatur. iwechselt in den Einfügemodus und jedes darauf folgende Zeichen wird in den Puffer geschrieben. Aber hier gibt es eine kleine ¬19Eigenart , fügt Zeichen zwischen 1 und 9 ein.

Das Programm verlässt den Einfügemodus am <esc>. Und dann /<c-r>asucht es hier nach dem Argument im Puffer. Dies bringt den Cursor über das gefundene Zeichen.

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character

Ich bin nicht zu 100%, aber ich denke, anstatt hylHVGpSie können tun, was @DJMcMayhem in der Motorradfrage wie getan hat hxVp. Ich bin mir nicht sicher, warum du das da Greingest, ist das nicht alles eine Zeile? Auch dhVpfunktionieren würde.
nmjcman101

@ nmjcman101 Ah ja, das muss ich behalten haben, Gseit wann die Tastatur mehrzeilig war. Vielen Dank!
Kritixi Lithos

2

PowerShell, 82 Byte

$k="1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./";$k[$k.IndexOf((read-host))-1]

Die Eingabetaste wird unterstützt, kann jedoch nicht getestet werden, Read-Hostda das Drücken der Eingabetaste ohne Wert in PowerShell nichts zurückgibt.


2

Japt , 56 42 Bytes

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

Erläuterung

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

;D=D                                        // Shortcut for QWERTY (with newlines and spaces), assigning to variable D
    v                                       // Setting D to lowercase
      ·q                                    // Joining D into an array with no spaces or newlines
        i"[]\\",A                          // Inserting "[]\" into index 10 (A)
                   i";'",22                 // Inserting ";'" into index 22
                           +",./"           // Appending ",./"
                                  Dg        // Returns the character at index:
                                    1n      //    -1+
                                       DbU  //     Index of U (the input)

Probieren Sie es online!


Dieser ist cool, kannst du eine Erklärung hinzufügen?
Albert Renshaw

1
@ AlbertRenshaw Hinzugefügt eine Erklärung.
Oliver

2

Java 8, 99 Bytes

c->{String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";return r.charAt(r.indexOf(c)-1);}

Erläuterung:

Probieren Sie es hier aus.

c->{                // Method with character as both parameter and return-type
  String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";
                    //  Literal String of the qwerty keyboard layout of the challenge
  return r.charAt(  //  Return the character at the following index:
    r.indexOf(c)    //   The index of the input character
    -1);            //   -1 to shift it to the left
}                   // End of method

1
Ich gebe auf. Ich versuche es mit Regex zu tun, aber ich kläglich mit einigen Sonderzeichen werden nicht ... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Olivier Grégoire

2

JavaScript (ES6), 74 Byte

c=>(s=".,mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")[s.indexOf(c)+1]

Da /nicht in meinem String, wird indexOfzurückgegeben -1, was bei Inkrementierung .zur Ausgabe führt. 93 Bytes zum Verarbeiten eines Strings:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")

@KevinCruijssen Vielen Dank für die Feststellung, dass ich diese drei Tasten versehentlich verschoben habe. Ich habe sie jetzt verschoben.
Neil

1

GNU sed , 72 + 1 (r Flag) = 73 Bytes

s:$:`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./:
s:(.).*(.)\1.*:\2:

Die Return-Taste kann nicht getestet werden, da sed by design die Eingabe unter Verwendung \ndes Trennzeichens aufteilt und das Skript dann so oft ausführt, wie Zeilen vorhanden sind.

Testlauf: Kontinuierliches Eingabe-Ausgabe-Paar (wenn Sie fertig sind, drücken Sie Strg + D oder Strg + C)

me@LCARS:/PPCG$ sed -rf shift_key.sed
s
a
4
3
=
-
a
\
1
`
\
]

1

05AB1E , 50 Bytes

'`žhÀ"-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"JDÀ‡

Probieren Sie es online!

Erläuterung:

'`                                                  # 1 char string: `
  žh                                                # Push numbers 0123456789
    À                                               # Rotated 1 left (123456890)
     "-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"      # Push string literal
                                              J     # Join all elements pushed to the stack to one string
                                               D    # Duplicate
                                                À   # Rotate 1 left
                                                 ‡  # Transliterate: a.get(b.indexOf(input))

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.