Perbaiki Jari Gemukku

21

Tantangan Golf Code

Saya memiliki isdue, jari saya gemuk dan saya freqintly memiliki isdue of ty [ing satu keystrpke ke kanan di kryboard saya.

Aku khawatir masalah ini semakin buruk dan semakin buruk seiring berjalannya waktu.

Namun, setiap keystrpke saya membuat wil; jadilah shiftrd pne di sebelah kanan!

Befpre maka saya ingin program (atau functipn) untuk secara otomatis menggeser setiap keystrpke kembali ke yang kiri.

Saya akan pastikan untuk mengambil buku saya ketik sisa chal; enge agar tidak menyebabkan kebingungan anu!


Objektif:

Tulis program atau fungsi yang mengambil input dari salah satu tombol hijau berikut pada keyboard QWERTY standar dan mengembalikan karakter tombol yang ada di sebelah kiri itu.masukkan deskripsi gambar di sini


Kondisi:

• Anda dapat berasumsi bahwa orang yang menjalankan program ini menggunakan keyboard QWERTY seperti yang ditunjukkan pada gambar di atas.

• Input dan Output keduanya tidak peka huruf besar kecil, Anda dapat menggunakan case apa saja (atau kombinasi kombinasi huruf besar-kecil) untuk tantangan ini dan Anda juga dapat mengasumsikan semua input dalam satu kasus jika diinginkan.

• Jika bahasa Anda tidak memiliki cara yang memungkinkan pengguna untuk memasukkan kunci kembali karena alasan tertentu, Anda dapat mengabaikan satu penekanan tombol untuk ini

• Tantangan ini hanya untuk nilai-nilai standar tombol, misalnya jika 4tombol ditekan Anda dapat menganggap itu akan selalu 4dan tidak pernah$

• Anda dapat mengasumsikan hanya tombol hijau yang akan ditekan.


Contoh Input-> Output:

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


Ini , jadi program dengan bytecount terpendek menang!

Albert Renshaw
sumber
Bisakah Anda memberikan testcases?
Kritixi Lithos
1
@KritixiLithos Bersertifikat! Saya akan mengedit tjat sekarang @
Albert Renshaw
Apakah maksud Anda ]-> [?
shooqie
3
terkait
Rod
3
Anda mungkin tidak peduli, tetapi ini adalah hal yang menarik: ini adalah tata letak keyboard ANSI. Perhatikan garis miring terbalik di atas tombol Enter; berbeda dengan keyboard ISO, di mana tombol backslash ada di sebelah kiri Z. (Ini juga Amerika, tapi itu lebih mudah untuk diidentifikasi!)
Doddy

Jawaban:

7

Ruby, 76 71 69 byte

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

Perl 6 , 87 83 69 byte

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

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

Cobalah online!

Ingin tahu apakah ada cara untuk menyandikan string hard-coded ke sesuatu yang lebih pendek ...

(Mencuri ide regex GB untuk -14 byte.)

seseorang
sumber
1
Mungkin jika kita memiliki $"rentang dapat menghemat beberapa karakter
Ven
5

Jelly , 34 33 byte

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

Cobalah online!

Bagaimana itu bekerja

Ø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
sumber
3
Saya tidak tahu Jelly, dapatkah Anda menambahkan penjelasan tentang kode Anda? Saya ingin tahu bagaimana Anda bisa pergi tanpa mengetik string literal dari seluruh keyboard
Albert Renshaw
1
Saya belum punya waktu, tapi saya akan menambahkan penjelasan secepatnya.
Dennis
1
Selesai Saya juga sedikit golf.
Dennis
1
Øqbagus! Saya suka ini, terima kasih!
Albert Renshaw
4

Python 3, 85 78 byte:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]
L3viathan
sumber
1
Anda dapat melewatkan string sebagai parameter opsional, menggunakan 1 lambda: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]untuk mengurangi beberapa byte
Rod
Poin bagus, saya akan menambahkannya.
L3viathan
Saya pikir Anda perlu backtick di sebelah kiri 1.
xnor
@ Baik, perbaiki itu.
L3viathan
4

Python , 76 byte

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

Cobalah online!

Membuat kamus yang mengambil setiap tombol ke kiri dengan zip string karakter dengan versi bergesernya. Intinya adalah fungsinya, yang teratas adalah definisi.

Menggunakan translateuntuk membuat pemetaan memberi solusi yang lebih panjang. Cobalah online!

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

Retina , 53 51 byte

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

Cobalah online!

Transliterasi sederhana menggeser setiap posisi karakter 1 ke belakang. Semuanya dari 1ke /adalah set karakter asli, sedangkan bagian berikut adalah set baru, menggunakan ountuk menunjukkan set Lainnya.

Hdan Lmerupakan kelas karakter khusus untuk transliterasi dalam retina (masing-masing memetakan ke angka Hex dan Huruf besar), tetapi untungnya mereka muncul pada keyboard di dalam urutan yang diurutkan secara alfabet ( FGHdan JKL), sehingga kita dapat menghindari melarikan diri dengan meletakkannya dalam rentang dan mendapatkan seperti itu 2 byte.

Leo
sumber
3

C ++, 109 byte

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

Cobalah online!

Tuhan
sumber
3

TI-Basic, 70 byte

Saya ragu bahwa itu bisa lebih pendek dari ini ...

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

PS Dua-byte token Str1, `, \, sub(, dan inString(.

Timtech
sumber
3

V , 57 54 51 byte

3 byte disimpan berkat @ nmjcman101 untuk menggunakan hxVpdaripada apa yang saya miliki untuk keyboard multiline

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

Cobalah online!

<esc>adalah 0x1bdan <c-r>sekarang0x12

Catatan: ini tidak mendukung tombol enter

Berisi unsintables, jadi inilah 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

Penjelasan

Sebagian besar program menghasilkan keyboard. imemasuki mode penyisipan dan setiap karakter yang mengikutinya dicetak ke buffer. Tapi ada kekhasan kecil di sini, ¬19menyisipkan karakter antara 1 dan 9.

Program keluar dari mode penyisipan di jendela <esc>. Dan kemudian di sini /<c-r>aia mencari argumen di buffer. Ini membawa kursor di atas karakter yang ditemukannya.

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character
Kritixi Lithos
sumber
Saya tidak 100%, tapi saya pikir hylHVGpAnda tidak dapat melakukan apa yang dilakukan @DJMcMayhem di pertanyaan sepeda motor hxVp. Saya tidak yakin mengapa Anda meletakkannya Gdi sana, bukankah semuanya satu baris? Juga dhVpakan berhasil.
nmjcman101
@ nmjcman101 Ah ya, saya harus menyimpan Gsejak saat keyboard digunakan untuk multiline. Terima kasih!
Kritixi Lithos
2

PowerShell, 82 byte

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

Tombol Enter didukung, tetapi tidak dapat diuji dengan Read-Hostkarena tindakan menekan enter tanpa nilai tidak mengembalikan apa pun di PowerShell.

Tor
sumber
2

Japt , 56 42 byte

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

Penjelasan

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

Cobalah online!

Oliver
sumber
Yang ini keren, bisakah Anda menambahkan penjelasan?
Albert Renshaw
1
@AlbertRenshaw Menambahkan penjelasan.
Oliver
2

Java 8, 99 byte

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

Penjelasan:

Coba di sini.

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
sumber
1
Saya menyerah. Saya mencoba untuk melakukannya dengan regex, tapi saya sedih gagal dengan beberapa karakter khusus ... 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]

Karena /tidak ada dalam string saya, indexOfkembali -1, yang ketika bertambah menyebabkan .menjadi output. 93 byte untuk memproses string:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")
Neil
sumber
@KevinCruijssen Terima kasih telah mengetahui bahwa saya tidak sengaja menggeser ketiga kunci itu. Saya sudah melepaskan mereka sekarang.
Neil
1

GNU sed , 72 +1 (r flag) = 73 byte

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

Kunci kembali tidak dapat diuji, karena desain membagi input menggunakan \nsebagai pembatas dan kemudian menjalankan skrip sebanyak yang ada garis.

Uji coba: pasangan input-output kontinu (saat selesai tekan Ctrl + D atau Ctrl + C)

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

05AB1E , 50 byte

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

Cobalah online!

Penjelasan:

'`                                                  # 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
sumber
1

Pyth - 56 byte

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

Test Suite .

Maltysen
sumber