Gõ, nhưng sang trái [đóng]


13

Lý lịch

Bạn đã được giao một nhiệm vụ để ghi chú cho một cuộc họp. Bạn bắt đầu nhập vào Google Doc, nhưng bạn không có đủ thời gian trong cuộc họp để xem bàn phím trong khi bạn nhập.

May mắn cho bạn, bạn có thể gõ mà không cần nhìn vào bàn phím của bạn. Sau cuộc họp, bạn nhận ra rằng mọi thứ bạn gõ là một phím bên trái.

Các thách thức

Đối với thử thách này, bạn sẽ sử dụng các chữ cái, số và thanh dấu cách của bố cục bàn phím QWERTY.

  • Đưa ra một đầu vào của văn bản (từ bất kỳ phương thức nhập tiêu chuẩn nào), xuất văn bản kết quả, trong đó mỗi ký tự được di chuyển sang trái trên bàn phím.

    • Đối với phần lớn các chữ cái, chỉ cần nhìn vào chữ cái và dịch nó sang chữ bên trái ( ctrở thành x, ttrở thành r, v.v.).

    • Đối với chữ cái q, dịch sang một ký tự tab bằng chữ ( \t).

    • Đối với chữ cái a, kích hoạt khóa mũ, do đó chữ viết hoa của phần còn lại của chuỗi bị đảo ngược.

    • Đối với chữ cái z, viết hoa chữ cái tiếp theo trong chuỗi.

    • Không có bản dịch là cần thiết cho thanh không gian.

  • Giữ nguyên chữ viết hoa trong khi dịch và chú ý khóa mũ (nếu bật khóa mũ, hãy đảm bảo trường hợp ngược lại).

  • Tất cả các ký tự trong chuỗi đầu vào sẽ là chữ cái, số hoặc dấu cách. Không có dấu câu hoặc các ký tự khác có thể được bao gồm.

Các trường hợp thử nghiệm

\t là một ký tự tab

Hello world    -> Gwkki qieks
Code Golf      -> Xisw Fikd
Queried apples -> \tyweuws OOKWA

Chấm điểm

Điểm thấp nhất trong byte thắng. Chúc vui vẻ!


11
Tham chiếu nhanh về các hàng có liên quan của bàn phím QWERTY sẽ hữu ích và giữ cho thử thách khép kín
Jo King

4
Các số có được chuyển sang dấu chấm câu nếu có chữ "Z" trước chúng không?
ErikF

10
Nhưng Z tương ứng với ca ...?
Chuỗi không liên quan

4
Trường hợp thử nghiệm được đề xuất: Azerty->wERT
Jitse

5
Đối với chữ cái z, viết hoa chữ cái tiếp theo trong chuỗi -> điều đó có nghĩa là chúng ta chỉ phải quan tâm đến chữ viết hoa và không phải chuyển đổi giữa các chữ số và ký hiệu? Sản lượng dự kiến ​​cho 0123456789, a0123456789z0z1z2z3z4z5z6z7z8z9? . )
Arnauld

Câu trả lời:


11

JavaScript (V8) , 271 byte

f=(s,k='~!@#$%^&*()_+`1234567890-=\tQWERTYUIOP{}|\tqwertyuiop[]\\ASDFGHJKL:"\n\\asdfghjkl;\'ZXCVBNM<>?zxcvbnm,./')=>s.replace(/[^ ]/g,c=>k[k.indexOf(c)-1]).replace(/\\([^\\]*)\\?/g,(m,c)=>c.replace(/[a-zA-z]/g,l=>l>'Z'?l.toUpperCase():l.toLowerCase())).replace(/[?']/,"")

Hãy thử trực tuyến! Golf mã JavaScript đầu tiên của tôi. Nó chắc chắn có thể ngắn hơn, nhưng tôi nghĩ rằng đây là một khởi đầu tốt.
Về cơ bản, nó tìm thấy từng ký tự trong kchuỗi và thay thế nó bằng ký tự trước đó, sau đó hoán đổi trường hợp của tất cả mọi thứ giữa Ahoặc avà loại bỏ tất cả các lần xuất hiện của Zhoặc z(vì phím shift không tự làm gì).
Đây phải là một bố trí bàn phím QWERTY bình thường, nhưng hãy cho tôi biết nếu không.


Trong liên kết TIO của riêng bạn, zebras=>wveAtrường hợp thử nghiệm dường như là sai. Đầu tiên zsẽ gây ra việc ein một chữ hoa w. Từ OP: "Đối với chữ cái z, viết hoa chữ cái tiếp theo trong chuỗi."
Đêm 2

@ Night2 Chúc mừng, tôi đã đăng trước khi OP làm rõ. Tôi giả sử nhấn phím shift một lần sẽ không làm gì cả.
Matthew Jensen

5

Python 3 , 211 byte

d=' ~!@#$%^&*()`~1!2@3#4$5%6^7&8*9(0)		qQwWeErRtTyYuUiIoOpPaAsSdDfFgGhHjJkKlLzZxXcCvVbBnNmM  '
c=s=0
for i in input():k=d.find(i);print(end=d[k-2+(c*i.isalpha()^s)*(1-k%2*2)][i in'aAzZ':]);c^=i in'aA';s=i in'zZ'

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

Sử dụng một chuỗi tra cứu trong đó ký tự bình thường và phiên bản sửa đổi thay đổi của nó được nhóm lại với nhau. Đối với mỗi ký tự trong đầu vào, nó sẽ truy xuất ký tự hai vị trí bên trái. Thay đổi viết hoa bằng cách thêm 1(hoặc -1nếu ký tự hiện tại là chữ hoa) thành giá trị tra cứu khi khóa mũ XOR đang hoạt động. Số không bị ảnh hưởng bởi công cụ sửa đổi khóa mũ.


2

PHP , 227 byte

for(;''<$s=$argn[$i++];)$s!=a&&$s!=A?$s!=z&&$s!=Z?($t=$m[stripos($m='~1!2@3#4$5%6^7&8*9(0	qwertyuiopasdfghjklzxcvbnm',$s)-1])+(print$s>' '?$s<A?!$h?$s-1?$s?$s-1:9:'`':$t:($t>=A&&(($s<a)+$h+$c)%2?$t^' ':$t):$s)+$h=0:$h=1:$c=!$c;

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

Tôi đã tạo một chuỗi ánh xạ (~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm ) cho mỗi chữ số có chế độ SHIFT của chúng ở bên trái và cho mỗi chữ cái có chữ cái / phím bên trái.

Tôi lặp qua các ký tự đầu vào và cho mỗi ký tự:

  • Nếu nhân vật là ahoặcA , cờ khóa mũ bị đảo ngược (logic không).
  • Nếu ký tự là zhoặc Z, cờ shift được đặt thành1 .
  • Khi nhân vật không ở trong aAzZ :
    • Ký tự bên trái ký tự hiện tại trong chuỗi ánh xạ được lưu trữ trong $t .
    • Nếu ký tự hiện tại là một khoảng trắng, nó được in.
    • Nếu nhân vật hiện nay là một chữ số, và nếu thay đổi cờ 1, $tđược in, nếu không, nếu chữ số là 1, `được in, nếu chữ số được 0, 9được in và nếu không,digit-1 được in ra.
    • Nếu ký tự hiện tại là một chữ cái, dựa trên trạng thái của cờ thay đổi, cờ khóa mũ và vỏ của ký tự hiện tại (dưới / trên), $t in thường hoặc in hoa. Trường hợp đặc biệt duy nhất ở đây là ký tự tab, được in như là.
    • Cờ thay đổi luôn được đặt trở lại 0vào cuối.

2

Màu đỏ , 218 byte

func[t][c: z: 0 rejoin collect[foreach s t[case[find"Aa"s[c: c xor 32]find"Zz"s[z: 32]on
[keep(select/case"  poiuytrewq^-lkjhgfdsamnbvcxzPOIUYTREWQ^-LKJHGFDSAMNBVCXZ0987654321~"s)xor either s <#"Z"[0][c xor z]z: 0]]]]]

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

Hiện tại AaZzkhông ảnh hưởng đến chữ số.


Điều này dường như không làm việc cho 'A pear' -> ' OWe'
Jitse


@Jitse Nhưng thực sự không hoạt động tốt với các chữ số, nó không hoàn toàn rõ ràng từ OP
Galen Ivanov

2
Tôi đồng ý, thách thức là rất mơ hồ.
Jitse

2

C (gcc) , 276 byte

i;j;k;h;l;m;n;o;f(char*b){char*c=calloc(m=strlen(b),1),*a=" \tqwertyuiop\aasdfghjkl\nzxcvbnm\tQWERTYUIOP\aASDFGHJKL\nZXCVBNM`1234567890";for(i=k=j=n=0;j<=m;l=a[i=index(a,b[j++])-a-1])k=l^7?k:!k,o=l>64&l<91?a[i-30*k]:l<97?h=i?l^7?l?l^10?l:0:32:0:0:a[i+29*k],o?c[n++]=o:n;b=c;}

Nhờ trần nhà cho -33 byte.

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

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.