Tata letak keyboard DVORAK

8

Inilah tantangan yang menarik ...

Saya ingin Anda membuat kode golf daripada saat dijalankan akan memungkinkan input Anda dikonversi menjadi mimic output seolah-olah Anda sedang mengetik pada tata letak keyboard DVORAK.

Tujuannya adalah untuk meniru Keyboard US Simplified Dvorak (US: SDK)

masukkan deskripsi gambar di sini

Sebagai perbandingan, berikut adalah tata letak US QWERTY standar:

masukkan deskripsi gambar di sini

Emulasi keyboard harus berfungsi baik untuk huruf besar dan huruf kecil serta tombol bergeser, misalnya, jika saya mengetuk tombol q(tidak tergeser) pada keyboard saya, kode Dvorak harus mengeluarkan 'karakter di layar. Jika saya mengetuk tombol c(tidak tergeser) saya harus mendapatkan j(juga tidak tergeser) sebagai respons, C(bergeser) akan mendapatkan J(bergeser) dan seterusnya ...

Saya hanya berkonsentrasi pada tombol putih pada diagram di atas. Tab, Caps dan kunci abu-abu lainnya harus berfungsi seperti biasa ...

Ada pertanyaan? Tidak untuk sekarang? Baik...

Saya tidak akan mengizinkan sumber daya eksternal yang sudah memiliki tata letak disandikan, saya tidak akan memiliki file yang dibawa yang dapat menyandikan tata letak. Kode ini HARUS QWERTY INPUT -> (DVORAK RE-CODING) -> DVORAK OUTPUTsifatnya. Tidak ada Esolangs konyol yang teoretis atau hanya mengatakan sesuatu seperti "Program ini akan mengambil input QWERTY dan mengode ulang dalam DVORAK. Ini adalah programnya." atau omong kosong seperti itu ... Terima tantangan ini dengan serius ... Jadi, Brainfuck coders, saya menyambut Anda.

Harap dicatat, ini BUKAN program konversi string. Untuk setiap kunci QWERTY yang Anda tekan, karakter DVORAK yang sesuai harus dikeluarkan ...

Kode terpendek menang ...

WallyWest
sumber
1
Saya pikir Anda perlu menentukan tata letak QWERTY standar jika Anda ingin ini menjadi tantangan yang adil. Saya sarankan menggunakan yang ini .
r3mainer
6
@JanDvorak Kami menunggu solusi Anda;)
VisioN
2
Saya tidak sepenuhnya mengerti. Jika manipulasi string dilarang, apakah itu berarti stdin tidak ada pertanyaan? Jadi saya harus menerapkan beberapa IO keyboard tingkat rendah yang bertuliskan penekanan tombol? Ini juga mendiskualifikasi brainfuck, yang hanya membaca string dari stdin. Bagaimana dengan stdout, dapatkah saya mengirim string ke stdout atau apakah saya perlu membuat kode driver keyboard yang mensimulasikan penekanan tombol yang berbeda?
fejesjoco
1
@fejesjoco maksud Anda tentang kalimat terakhir? Saya membaca bahwa "STDIN harus dibaca dari dan STDOUT ditulis tanpa buffering"
John Dvorak
1
Selain itu, pertanyaan Anda tampaknya selalu menghasilkan diskusi besar di utas komentar. Mungkin itu pertanda Anda harus menggunakan kotak pasir lebih banyak?
Tim Seguine

Jawaban:

7

Shell: Unix tr (1) , 94

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

Perintah ini mengambil QWERTY pada stdin dan mengeluarkan DVORAK pada stdout.

mirabilos
sumber
Sial, Anda mengalahkan saya untuk itu!
TheDoctor
@TheDoctor Saya baru saja terjadi pada pertanyaan ini cukup awal ☻ saya butuh waktu (sekitar 20 menit?) Untuk mengoptimalkan misalnya rentang.
mirabilos
8

C - 144 karakter

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

C #, 360 karakter

Mungkin bukan yang terpendek, tetapi ia melakukan persis seperti yang Anda tanyakan:

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

Jika Anda menekan tombol pada keyboard QWERTY Anda, maka karakter DVORAK yang benar muncul di konsol.

ProgramFOX
sumber
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

Seharusnya ada jawaban di AHK untuk pertanyaan ini tetapi tidak. Jadi hanya memposting satu.

tsh
sumber
Bukankah seharusnya ada "pengembalian"?
MilkyWay90
@ MilkyWay90 OP tidak meminta berhenti. Dan program ini akan terus berjalan sampai Anda keluar secara manual dengan mengklik menu baki. Jadi, tidak ada "kembali" yang terlibat.
tsh
Oh oke terima kasih atas penjelasannya.
MilkyWay90
1

R , 157 byte

Skrip terjemahan sederhana.

chartr('\'qQwWeErRtTyYuUiIoOpP[{]}sSdDfFgGhHjJkKlL;:"zZxXcCvVbBnN,<.>/?=_+-','-\'",<.>pPyYfFgGcCrRlL/?=+oOeEuUiIdDhHtTnNsS_;:qQjJkKxXbBwWvVzZ{]}[',scan(,''))

Cobalah online!

CT Hall
sumber