Bố trí bàn phím DVORAK


8

Đây là một thử thách thú vị ...

Tôi muốn bạn mã golf hơn khi được thực thi sẽ cho phép đầu vào của bạn được chuyển đổi thành đầu ra bắt chước như thể bạn đang gõ trên bố trí bàn phím DVORAK.

Mục đích là bắt chước Bàn phím Dvorak Đơn giản hóa của Hoa Kỳ (US: SDK)

nhập mô tả hình ảnh ở đây

Để so sánh, đây là cách bố trí QWERTY tiêu chuẩn của Hoa Kỳ:

nhập mô tả hình ảnh ở đây

Giả lập bàn phím phải hoạt động cho cả chữ in hoa và chữ thường cũng như các phím được dịch chuyển, ví dụ, nếu tôi gõ phím (không dịch chuyển q) trên bàn phím, mã Dvorak sẽ bật ra một 'ký tự trên màn hình. Nếu tôi chạm vào cnút (không được di chuyển), tôi sẽ nhận được jphản hồi C(cũng không được Jdịch chuyển) , (đã thay đổi) sẽ nhận được (đã dịch chuyển) và cứ thế ...

Tôi chỉ tập trung tất nhiên vào các phím trắng trong sơ đồ trên. Tab, Caps và các phím màu xám khác sẽ hoạt động như bình thường ...

Có câu hỏi nào không? Không phải bây giờ? Tốt ...

Tôi sẽ không cho phép các tài nguyên bên ngoài đã được mã hóa bố cục, tôi sẽ không có bất kỳ tệp nào được đưa vào có thể mã hóa bố cục. Mã PHẢI QWERTY INPUT -> (DVORAK RE-CODING) -> DVORAK OUTPUTtrong tự nhiên. Không có Esolang ngớ ngẩn nào về mặt lý thuyết hoặc chỉ nói điều gì đó như "Chương trình này sẽ lấy đầu vào QWERTY và mã hóa lại trong DVORAK. Đây là chương trình." hoặc tào lao như thế ... Hãy thực hiện thử thách này một cách nghiêm túc ... Vì vậy, các lập trình viên Brainfuck, tôi hoan nghênh bạn.

Xin lưu ý, đây KHÔNG phải là chương trình chuyển đổi chuỗi. Đối với mỗi phím QWERTY bạn nhấn, ký tự DVORAK tương ứng phải được xuất ra ...

Mã ngắn nhất sẽ thắng ...


1
Tôi nghĩ bạn cần chỉ định bố cục QWERTY tiêu chuẩn nếu bạn muốn đây là một thách thức công bằng. Tôi đề nghị sử dụng một này .
r3mainer

6
@JanDvorak Chúng tôi đang chờ giải pháp của bạn;)
VisioN

2
Tôi không hiểu đầy đủ. Nếu thao tác chuỗi bị cấm, điều đó có nghĩa là stdin nằm ngoài câu hỏi? Vì vậy, tôi phải thực hiện một số IO bàn phím cấp thấp đọc phím nhấn? Điều này cũng không đủ điều kiện brainfuck, chỉ đọc các chuỗi từ stdin. Còn về thiết bị xuất chuẩn, tôi có thể gửi các chuỗi đến thiết bị xuất chuẩn hay tôi có cần mã trình điều khiển bàn phím các loại mô phỏng nhấn một phím khác không?
fejesjoco

1
@fejesjoco bạn đang đề cập đến câu cuối cùng? Tôi đọc rằng "STDIN phải được đọc từ và STDOUT được viết mà không cần đệm"
John Dvorak

1
Bên cạnh đó, các câu hỏi của bạn dường như luôn tạo ra một cuộc thảo luận lớn trong chuỗi nhận xét. Có lẽ đó là một dấu hiệu bạn nên sử dụng hộp cát nhiều hơn?
Tim Seguine ngày

Câu trả lời:


7

Shell: Unix tr (1) , 94

tr \''"+-/:-[]_b-{}' "-_}w[vzSsW]VZ@AXJE>UIDCHTNMBRL\"POYGK<QF:/={xje.uidchtnmbrl'poygk,qf;?+"

Lệnh này nhận QWERTY trên stdin và xuất DVORAK trên thiết bị xuất chuẩn.


Chết tiệt, bạn đánh tôi với nó!
TheDoctor

@TheDoctor Tôi vừa mới xảy ra câu hỏi này đủ sớm tôi mất một lúc (khoảng 20 phút?) Để tối ưu hóa, ví dụ như các phạm vi, mặc dù.
mirabilos

8

C - 144 ký tự

main(c){putch((c=getch())>33?c:"_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL\"POYGK<QF:/\\
=^{`axje.uidchtnmbrl'poygk,qf?|+~"[c-34]);main(0);}

1
Giải pháp tốt đẹp ;-)
mirabilos

4

C #, 360 ký tự

Có lẽ không phải là ngắn nhất, nhưng nó thực hiện chính xác những gì bạn yêu cầu:

using System;class A{static void Main(){string[] q={"-=qwertyuiop[]sdfghjkl;'zxcvbnm,./","_+QWERTYUIOP{}SDFGHJKL:\"ZXCVBNM<>?","[]',.pyfgcrl/=oeuidhtns-;qjkxbmwvz","{}\"<>PYFGCRL?+OEUIDHTNS_:QJKXBMWVZ"};while(true){var c=Console.ReadKey(true);var a=c.KeyChar;int i,w=c.Modifiers==ConsoleModifiers.Shift?1:0;Console.Write((i=q[w].IndexOf(a))>-1?q[w+2][i]:a);}}}

Nếu bạn nhấn một phím trên bàn phím QWERTY, thì ký tự DVORAK chính xác sẽ xuất hiện trong bảng điều khiển.


3

AutoHotKey, 200 byte

-::[
=::]
q::'
w::,
e::.
r::p
t::y
y::f
u::g
i::c
o::r
p::l
[::/
]::=
s::o
d::e
f::u
g::i
h::d
j::h
k::t
l::n
`;::s
'::-
z::`;
x::q
c::j
v::k
b::x
n::b
,::w
.::v
/::z

Cần có câu trả lời trong AHK cho câu hỏi này nhưng không. Vì vậy, chỉ cần đăng một.


Không nên có một "sự trở lại"?
MilkyWay90

@ MilkyWay90 OP đã không yêu cầu tạm dừng. Và chương trình này sẽ tiếp tục chạy cho đến khi bạn thoát thủ công bằng cách nhấp vào menu khay. Vì vậy, không có "trở lại" liên quan.
tsh

Oh okay cảm ơn bạn đã giải thích.
MilkyWay90

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.