Napraw moje tłuste palce

21

Code Golf Challenge

Mam problem, moje palce są tłuste i często jave ja zalegam z problemami z wciśnięciem jednego klawisza po prawej stronie na mojej tablicy.

Obawiam się, że z upływem czasu sprawa jest coraz gorsza.

Pozbądź się każdego klucza, który zrobię; przesuń kursor w prawo!

Przed tym chciałbym, aby program (lub FUNCIPN) automatycznie przesuwał wszystkie keystrpke z powrotem na lewy.

Postaram się zabrać mój tom do reszty tjis chal; wyjdź, żeby nie wywołać zamieszania!


Cel:

Napisz program lub funkcję, która pobiera dane z jednego z następujących zielonych klawiszy na standardowej klawiaturze QWERTY i zwraca znak klawisza z lewej strony.wprowadź opis zdjęcia tutaj


Warunki:

• Możesz założyć, że osoba uruchamiająca ten program korzysta z klawiatury QWERTY takiej jak na powyższej ilustracji.

• Dane wejściowe i wyjściowe nie uwzględniają wielkości liter, możesz użyć dowolnej wielkości liter (lub kombinacji kombinacji wielkości liter) dla tego wyzwania, a także możesz założyć, że wszystkie dane wejściowe będą w jednym przypadku, jeśli to pożądane.

• Jeśli z jakiegoś powodu Twój język nie pozwala użytkownikowi wprowadzić klucza powrotu, możesz zignorować to jedno naciśnięcie klawisza

• To wyzwanie dotyczy tylko domyślnych wartości klawiszy, na przykład jeśli 4klawisz zostanie naciśnięty, możesz założyć, że zawsze będzie 4i nigdy$

• Możesz założyć, że tylko zielone klawisze zostaną naciśnięte.


Przykład Input-> Output:

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


To jest , więc wygrywa program z najkrótszą liczbą bajtów!

Albert Renshaw
źródło
Czy możesz dostarczyć testcases?
Kritixi Lithos
1
@KritixiLithos Certaimly! Będę teraz edytować tjat @
Albert Renshaw
Miałeś na myśli ]-> [?
shooqie
3
powiązane
Rod
3
Możesz się tym nie przejmować, ale oto ciekawa ciekawostka: jest to układ klawiatury ANSI. Zwróć uwagę na odwrotny ukośnik nad klawiszem Enter; w przeciwieństwie do klawiatury ISO, w której przycisk odwrotnego ukośnika znajduje się po lewej stronie Z. (Jest również amerykański, ale łatwiej go zidentyfikować!)
Doddy

Odpowiedzi:

7

Ruby, 76 71 69 bajtów

->a{"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"[/.#{a}/][0]}
GB
źródło
5

Perl 6 , 87 83 69 bajtów

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

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

Wypróbuj online!

Zastanawiasz się, czy istnieje sposób na zakodowanie tego zakodowanego ciągu na coś krótszego ...

( Pomysł wyrażenia regularnego Stole GB dla -14 bajtów.)

smls
źródło
1
Może gdybyśmy mieli $"zakresy, moglibyśmy zaoszczędzić kilka znaków
Ven
5

Galaretka , 34 33 bajtów

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

Wypróbuj online!

Jak to działa

Ø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.
Dennis
źródło
3
Nie znam Jelly, czy możesz dodać wyjaśnienie swojego kodu? Jestem ciekawy, jak udało ci się uciec bez wpisywania literałowego ciągu całej klawiatury
Albert Renshaw
1
Nie miałem jeszcze czasu, ale dodam wyjaśnienie jak najszybciej.
Dennis
1
Gotowy. Też trochę grałem w golfa.
Dennis
1
Øqfajne! Lubię to, dzięki!
Albert Renshaw
4

Python 3, 85 78 bajtów:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]
L3viathan
źródło
1
Możesz przekazać ciąg jako parametr opcjonalny, używając 1 lambda: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]aby zmniejszyć kilka bajtów
Rod
Dobra uwaga, dodam to.
L3viathan
Myślę, że potrzebujesz
uderzenia wstecznego,
@ xnor Racja, naprawiłem to.
L3viathan
4

Python , 76 bajtów

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

Wypróbuj online!

Tworzy słownik, który przenosi każdy klawisz do klawisza po lewej stronie, kompresując ciąg znaków za pomocą przesuniętej wersji. Dolna linia to funkcja, górna to definicja.

Użycie translatedo stworzenia mapowania dało dłuższe rozwiązanie. Wypróbuj online!

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

Siatkówka , 53 51 bajtów

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

Wypróbuj online!

Prosta transliteracja przesuwająca każdą pozycję o 1 pozycję do tyłu. Wszystko od 1do /jest oryginalnym zestawem znaków, podczas gdy następna część jest nowym zestawem, za pomocą, oaby wskazać Inny zestaw.

Hi Lsą specjalnymi klasami znaków do transliteracji w siatkówce (odpowiednio odwzorowanie na cyfry szesnastkowe i wielkie litery), ale na szczęście występują na klawiaturze w sekwencjach uporządkowanych alfabetycznie ( FGHi JKL), więc możemy uniknąć ich ucieczki poprzez umieszczenie ich w zakresach i zyskanie w ten sposób 2 bajty.

Lew
źródło
3

C ++, 109 bajtów

void f(char i){std::string k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";std::cout<<k[k.find(i)-1];}

Wypróbuj online!

Boskość
źródło
3

TI-Basic, 70 bajtów

Wątpię, by mogło być krótsze niż to ...

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

PS Tokeny są dwa bajty Str1, `, \, sub(, i inString(.

Timtech
źródło
3

V , 57 54 51 bajtów

3 bajty zaoszczędzone dzięki @ nmjcman101 do używania hxVpzamiast tego, co miałem dla klawiatury wielowierszowej

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

Wypróbuj online!

<esc>jest 0x1bi <c-r>jest0x12

Uwaga: to nie obsługuje klawisza Enter

Zawiera niedrukowalne, więc oto zrzut heksowy

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

Wyjaśnienie

Większość programu generuje klawiaturę. iwchodzi w tryb wstawiania i każdy znak po nim jest drukowany w buforze. Ale jest tu małe dziwactwo, ¬19wstawia znaki od 1 do 9.

Program wychodzi z trybu wstawiania na <esc>. A potem /<c-r>aszuka argumentu w buforze. Spowoduje to umieszczenie kursora nad znalezionym znakiem.

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character
Kritixi Lithos
źródło
Nie jestem w 100%, ale myślę, że zamiast tego hylHVGpmożesz zrobić to, co zrobił @DJMcMayhem w pytaniu motocyklowym hxVp. Nie jestem pewien, dlaczego tam umieściłeś G, prawda? Działa również dhVp.
nmjcman101
@ nmjcman101 Ach tak, musiałem zachować ten czas, Gkiedy klawiatura była wielowierszowa. Dzięki!
Kritixi Lithos
2

PowerShell, 82 bajty

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

Klawisz Enter jest obsługiwany, ale nie można go przetestować, Read-Hostponieważ naciśnięcie klawisza Enter bez wartości nic nie zwraca w programie PowerShell.

Słup
źródło
2

Japt , 56 42 bajtów

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

Wyjaśnienie

;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)

Wypróbuj online!

Oliver
źródło
Ten jest fajny, czy możesz dodać wyjaśnienie?
Albert Renshaw
1
@AlbertRenshaw Dodano wyjaśnienie.
Oliver
2

Java 8, 99 bajtów

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

Wyjaśnienie:

Wypróbuj tutaj.

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
Kevin Cruijssen
źródło
1
Poddaję się. Starałem się zrobić to z regex, ale nie zdało egzaminu z niektórych znaków specjalnych ... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Olivier Grégoire,
2

JavaScript (ES6), 74 bajty

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

Ponieważ /nie ma go w moim ciągu, indexOfzwraca -1, które po zwiększeniu powoduje .wyjście. 93 bajty do przetworzenia ciągu:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")
Neil
źródło
@KevinCruijssen Dzięki za zauważenie, że przypadkowo przesunąłem te trzy klucze. Teraz je zmieniłem.
Neil,
1

GNU sed , 72 + 1 (flaga r) = 73 bajty

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

Nie można przetestować klawisza Return, ponieważ sed by design dzieli dane wejściowe za pomocą \nseparatora, a następnie uruchamia skrypt tyle razy, ile jest wierszy.

Przebieg testowy: ciągła para wejście / wyjście (po zakończeniu naciśnij Ctrl + D lub Ctrl + C)

me@LCARS:/PPCG$ sed -rf shift_key.sed
s
a
4
3
=
-
a
\
1
`
\
]
seshoumara
źródło
1

05AB1E , 50 bajtów

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

Wypróbuj online!

Wyjaśnienie:

'`                                                  # 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))
Okx
źródło
1

Pyth - 56 bajtów

@K"`1234567890-=qwertyuiop[]\\asdfghjkl;'
zxcvbnm,./"txK

Pakiet testowy .

Maltysen
źródło