Sửa ngón tay mập của tôi


21

Code Golf Challenge

Tôi có một isdue, ngón tay của tôi là chất béo và tôi tự nhiên đưa ra một định nghĩa của ty [ing một keystrpke ở bên phải trên kryboard của tôi.

Tôi sợ isdue là getyng tồi tệ hơn khi thời gian trôi qua.

Mỗi lần gõ phím tôi làm wil; được chuyển sang bên phải!

Befpre sau đó tôi muốn một chương trình (hoặc funcipn) để tự động dịch chuyển mỗi phím tắt trở lại bên trái.

Tôi chắc chắn sẽ lấy phần còn lại của tôi cho phần còn lại của tjis chal; enge để không gây nhầm lẫn anu!


Mục tiêu:

Viết chương trình hoặc chức năng nhận đầu vào của một trong các phím màu xanh lá cây sau trên bàn phím QWERTY tiêu chuẩn và trả về ký tự của phím đó ở bên trái của nó.nhập mô tả hình ảnh ở đây


Điều kiện:

• Bạn có thể cho rằng người đang chạy chương trình này đang sử dụng bàn phím QWERTY giống như hình trên.

• Đầu vào và Đầu ra đều không phân biệt chữ hoa chữ thường, bạn có thể sử dụng bất kỳ trường hợp nào (hoặc hỗn hợp các kết hợp trường hợp) cho thử thách này và bạn cũng có thể giả sử tất cả đầu vào sẽ nằm trong một trường hợp nếu muốn.

• Nếu ngôn ngữ của bạn không có cách nào cho phép người dùng nhập phím trả về vì một số lý do, bạn có thể bỏ qua một lần nhấn phím cho việc này

• Thử thách này chỉ dành cho các giá trị mặc định của các phím, ví dụ: nếu 4nhấn phím, bạn có thể cho rằng nó sẽ luôn luôn 4và không bao giờ$

• Bạn chỉ có thể giả sử các phím màu xanh lá cây sẽ được nhấn.


Ví dụ Input-> Output:

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


Đây là , vì vậy chương trình có số lần thắng ngắn nhất!


Bạn có thể cung cấp testcase?
Kritixi Lithos

1
@KritixiLithos Chắc chắn! Tôi sẽ chỉnh sửa tjat ngay bây giờ @
Albert Renshaw

Ý bạn là ]-> [?
shooqie


3
Bạn có thể không quan tâm, nhưng đây là một mẩu chuyện nhỏ thú vị: đây là cách bố trí bàn phím ANSI. Lưu ý dấu gạch chéo ngược phía trên phím Enter; trái ngược với bàn phím ISO, trong đó nút dấu gạch chéo ngược ở bên trái của Z. (Nó cũng là của Mỹ, nhưng dễ xác định hơn!)
Doddy

Câu trả lời:


7

Ruby, 76 71 69 byte

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

5

Perl 6 , 87 83 69 byte

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

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

Hãy thử trực tuyến!

Tự hỏi liệu có cách nào để mã hóa chuỗi mã hóa cứng đó thành thứ gì đó ngắn hơn ...

(Lấy ý tưởng regex của GB cho -14 byte.)


1
Có lẽ nếu chúng ta có $"các phạm vi có thể tiết kiệm một vài ký tự
Ven

5

Thạch , 34 33 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Ø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
Tôi không biết Jelly, bạn có thể thêm một lời giải thích về mã của bạn? Tôi tò mò làm thế nào bạn thoát khỏi mà không cần gõ một chuỗi ký tự của toàn bộ bàn phím
Albert Renshaw

1
Tôi chưa có thời gian, nhưng tôi sẽ thêm một lời giải thích càng sớm càng tốt.
Dennis

1
Làm xong. Tôi cũng đánh golf nó một chút.
Dennis

1
Øqtiện lợi Tôi thích điều này, cảm ơn!
Albert Renshaw

4

Python 3, 85 78 byte:

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

1
Bạn có thể vượt qua chuỗi như tham số tùy chọn, sử dụng 1 lambda: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]để giảm vài byte
Rod

Điểm tốt, tôi sẽ thêm điều đó.
L3viathan

Tôi nghĩ rằng bạn cần một backtick ở bên trái của 1.
xnor

@xnor Đúng rồi, sửa cái đó.
L3viathan

4

Python , 76 byte

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

Hãy thử trực tuyến!

Làm cho một từ điển đưa mỗi khóa sang một bên trái của nó bằng cách nén chuỗi ký tự với phiên bản thay đổi của nó. Dòng dưới cùng là chức năng, hàng đầu là một định nghĩa.

Sử dụng translateđể tạo một bản đồ đã cho một giải pháp dài hơn. Hãy thử trực tuyến!

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

4

Võng mạc , 53 51 byte

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

Hãy thử trực tuyến!

Một cách chuyển ngữ đơn giản làm dịch chuyển mỗi vị trí 1 ký tự. Mọi thứ từ 1đến /là bộ ký tự gốc, trong khi phần sau là bộ mới, sử dụng ođể chỉ bộ khác.

HLlà các lớp ký tự đặc biệt để chuyển ngữ trong võng mạc (tương ứng ánh xạ thành các chữ số Hex và chữ in hoa), nhưng may mắn thay chúng xuất hiện trên bàn phím bên trong các chuỗi được sắp xếp theo thứ tự ( FGHJKL), vì vậy chúng ta có thể tránh thoát chúng bằng cách đặt chúng trong phạm vi và đạt được như thế 2 byte.



3

TI-Basic, 70 byte

Tôi nghi ngờ rằng nó có thể rút ngắn hơn thế này ...

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

PS Hai byte thẻ là Str1, `, \, sub(, và inString(.


3

V , 57 54 51 byte

3 byte được lưu nhờ vào @ nmjcman101 vì đã sử dụng hxVpthay vì những gì tôi có cho bàn phím đa dòng

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

Hãy thử trực tuyến!

<esc>đang 0x1b<c-r>0x12

Lưu ý: điều này không hỗ trợ phím enter

Chứa không thể in được, vì vậy đây là 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

Giải trình

Hầu hết các chương trình tạo ra bàn phím. ivào chế độ chèn và mọi ký tự theo sau nó được in vào bộ đệm. Nhưng có một cách giải quyết nhỏ ở đây, ¬19chèn các ký tự từ 1 đến 9.

Chương trình thoát khỏi chế độ chèn tại <esc>. Và sau đó ở đây /<c-r>anó tìm kiếm đối số trong bộ đệm. Điều này mang lại con trỏ trên đầu của ký tự mà nó tìm thấy.

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

Tôi không phải là 100%, nhưng tôi nghĩ thay vì hylHVGpbạn có thể làm những gì @DJMcMayhem đã làm trong câu hỏi xe máy như thế nào hxVp. Tôi không chắc tại sao bạn đặt nó Gvào đó, không phải là tất cả một dòng sao? Cũng dhVpsẽ làm việc.
nmjcman101

@ nmjcman101 À đúng rồi, tôi phải giữ Gtừ khi bàn phím được sử dụng là multiline. Cảm ơn!
Kritixi Lithos

2

PowerShell, 82 byte

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

Phím Enter được hỗ trợ, nhưng không thể được kiểm tra Read-Hostvì hành động nhấn enter không có giá trị sẽ không trả về gì trong PowerShell.


2

Japt , 56 42 byte

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

Giải trình

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

Hãy thử trực tuyến!


Điều này là mát mẻ, bạn có thể thêm một lời giải thích?
Albert Renshaw

1
@AlbertRenshaw Đã thêm một lời giải thích.
Oliver

2

Java 8, 99 byte

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

Giải trình:

Hãy thử nó ở đây.

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
Tôi từ bỏ. Tôi đã cố gắng để làm điều đó với regex, nhưng tôi đau khổ thất bại với một số ký tự đặc biệt ... 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]

/không có trong chuỗi của tôi, indexOftrả về -1, mà khi tăng sẽ gây .ra đầu ra. 93 byte để xử lý một chuỗi:

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

@KevinCruijssen Cảm ơn vì đã phát hiện ra rằng tôi đã vô tình thay đổi ba phím đó. Tôi đã tháo chúng ra bây giờ.
Neil

1

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

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

Khóa trả về không thể được kiểm tra, bởi vì sed theo thiết kế sẽ phân tách đầu vào bằng cách sử dụng \ndấu phân cách và sau đó chạy tập lệnh nhiều lần như có các dòng.

Chạy thử: cặp đầu vào-đầu ra liên tục (khi hoàn tất, nhấn Ctrl + D hoặc Ctrl + C)

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

1

05AB1E , 50 byte

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

Hãy thử trực tuyến!

Giải trình:

'`                                                  # 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))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.