Meniru pengetikan Profesor

8

Meniru pengetikan Profesor

Latar Belakang

Sayangnya, Profesor tidak dapat menggunakan keyboard dengan benar: setiap kali dia harus menggunakan Shiftkunci, dia menekan Caps Lock sekali sebelum mengetik, dan tidak repot-repot memperbaiki dirinya sendiri. Jika ada dua atau lebih kunci berturut-turut yang diperlukan Shift, ia menekan Caps Locksebelum yang pertama dan tidak melakukan apa-apa di depan yang lain.

Sebagai sekretarisnya, saya ingin meniru efek ini sehingga orang berpikir bahwa dialah yang membalas emailnya, bukan saya. Dia tahu pengetikannya terlihat bodoh, tetapi dia tidak peduli.

Tugas

Tulis program yang mengambil STDIN atau masukan file dari beberapa teks, dan kemudian output teks itu seolah-olah telah diketik oleh Profesor.

Ini kode golf , dan celah standar tidak diperbolehkan.

Tata letak keyboard

Default:
` 1 2 3 4 5 6 7 8 9 0 - =
   q w e r t y u i o p [ ]
    a s d f g h j k l ; ' #
   \ z x c v b n m , . /

With shift:
¬ ! " £ $ % ^ & * ( ) _ +
   Q W E R T Y U I O P { }
    A S D F G H J K L : @ ~
   | Z X C V B N M < > ?

With caps lock:
` 1 2 3 4 5 6 7 8 9 0 - =
   Q W E R T Y U I O P [ ]
    A S D F G H J K L ; ' #
   \ Z X C V B N M , . /

Contoh input / output

( CapsLockBaris itu hanya ada untuk pengertian Anda, dan tidak boleh ditampilkan dalam program Anda)

Input:    abc ** def ! (ghijkl) mnop
Output:   abc 88 DEF 1 9GHIJKL0 mnop
CapsLock:     *      * *      *       (* means Caps Lock was pressed before this character)

Input:    print("Hello, World!"); sys.exit()
Output:   print92HELLO, world120; SYS.EXIT90
CapsLock:      *        *    *            *

Input:    !ABC!abc!ABC!abc!x!y!z
Output:   1ABC1ABC1abc1abc1X1y1Z
CapsLock: *       *       * * *
monopole
sumber
3
Saya akan mengatakan bahwa kebalikan dari tugas ini akan lebih menarik :) (yaitu untuk memperbaiki salah ketik emailnya)
Pengoptimal
4
@Optimizer Terlalu ambigu. Masukan HELLObisa "diperbaiki" untuk Hello, HEllo, HELlo, dll
Geobits
Tetapi yang benar Hellohanya akan , seperti yang didefinisikan oleh kata kasus (atau aturan tetap casing bahasa Inggris yang benar)
Pengoptimal
4
@laurencevs Jujur saya lebih suka melihatnya sebagai tantangan terpisah :)
Geobits
1
Keyboard voodoo macam apa ini?
Brandon

Jawaban:

5

Python 2 - 269 275 290 318 337

Input sebagian besar aman jika Anda menggunakan tiga kutip:"""print("Hello, World!"); sys.exit()"""

C=D=0
r=''
l,u,c=" `1234567890-=qwertyuiop[]asdfghjkl;'#\\zxcvbnm,./",' \xac!"\xa3$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>?'," `1234567890-=QWERTYUIOP[]ASDFGHJKL;'#\\ZXCVBNM,./"
for h in input():w=h!=' ';U=h in u;C^=w&U&~D;D=U&w;r+=[l,c][C][[l,u][U].find(h)]
print r

Pengkodean sepertinya tidak banyak membantu, kecuali dengan karakter ¬ dan £ yang canggung (Saya sudah mencoba melihat masalah lain seperti ini dan saya pikir saya harus mencoba menggunakan split?) (Sepertinya keyboard tidak cukup kompres. untuk membuatnya berharga .decode, dll ...)

Juga, ruang menyedot.

Edit catatan: Pengindeksan aneh

FryAmTheEggman
sumber
3

PowerShell - 295

Mengambil input dari konsol (Read-Host), dan output ke konsol.

$d=@("``1234567890-=qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ ","``1234567890-=QWERTYUIOP[]ASDFGHJKL;'#\ZXCVBNM,./ ",'¬!"£$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>? ')
((Read-Host).ToCharArray()|%{if($_-eq' '-or$d[2].IndexOf($_)-lt0){$a=0}else{if(!$a){$b=!$b}$a=2}$d[$b][$d[$a].IndexOf($_)]})-join''
puckipedia
sumber